計算機視覺面試考點(18)邊緣檢測算子(Roberts、Prewitt、Sobel、Laplacian、LoG、Canny)

計算機視覺工程師在面試過程中主要考察三個內容:圖像處理、機器學習、深度學習。然而,各類資料紛繁複雜,或是簡單的知識點羅列,或是有着詳細數學推導令人望而生畏的大部頭。爲了督促自己學習,也爲了方便後人,決心將常考必會的知識點以通俗易懂的方式設立專欄進行講解,努力做到長期更新。此專欄不求甚解,只追求應付一般面試。希望該專欄羽翼漸豐之日,可以爲大家免去尋找資料的勞累。每篇介紹一個知識點,沒有先後順序。想了解什麼知識點可以私信或者評論,如果重要而且恰巧我也能學會,會盡快更新。最後,每一個知識點我會參考很多資料。考慮到簡潔性,就不引用了。如有冒犯之處,聯繫我進行刪除或者補加引用。在此先提前致歉了!

邊緣檢測算子是用來提取圖形邊緣的卷積核

邊緣提取原理
邊緣處的像素值通常會有明顯變化
衡量連續的變化可以使用導數
衡量圖像像素間離散的變化使用差分
導數:(f(x+Δx)-f(x))/Δx
差分:f(x+1)-f(x)

梯度表示
梯度表示包含大小和方向

如果只有一個算子
只能表示大小

如果有兩個算子
兩個算子計算的梯度的方向是互相垂直的
如果計算的大小分別爲Gx和Gy
方向爲:
在這裏插入圖片描述
大小有三種:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

Roberts

在這裏插入圖片描述
很直觀,我們會想到分別計算x方向和y方向的差分
於是我們得到兩個算子
[-1 1]

[-1
1]
但是我們可以發現它們計算的區域不同,只有一個點重合
所以升級爲
[-1 1
-1 1]

[-1 -1
1 1]
考慮到三個因素:

  1. 計算量
  2. 實驗效果
  3. 像素間距離很小,計算對角差分和相鄰的差分,實際意義相差不大(這點事個人理解)

於是最後產生了Roberts算子

Prewitt

在這裏插入圖片描述
以第一個算子爲例
想計算中心點x方向的梯度
額外考慮了上一行和下一行x方向的梯度
相當於取了平均

Sobel

在這裏插入圖片描述
在這裏插入圖片描述
在Prewitt取平均的基礎上
對當前行(列)增加了權重
相當於加權平均
實驗證明,這樣效果好一些

變種:
在這裏插入圖片描述
這個的加權平均就嚴格按照距離的比例關係來了
因爲對角的距離是相鄰距離的根號2倍

Laplacian

在這裏插入圖片描述
以上都是一階差分
Laplacian是二階差分
證明:
僅考慮x方向
一階:
中心點右邊的點:f(x+1)-f(x)
中心點左邊的點:f(x)-f(x-1)
二階:
中心點:
[f(x+1)-f(x)]-[f(x)-f(x-1)]=f(x+1)+f(x-1)-2f(x)
再考慮到y方向,相加即可得到Laplacian

擴展模式:
在這裏插入圖片描述

LoG(Laplacian of Gaussian)

原理
高斯平滑(模糊)和拉普拉斯結合

這個模板就不固定了
大小不再侷限於3x3
通常可以是5x5
根據方差不同
模板中的數值也不同

主要目的
高斯平滑可以去噪

該算子的一個例子(下文會介紹推導)
在這裏插入圖片描述

Canny

Canny嚴格來說應該是一種算法

步驟:
1.RGB變灰度圖(其它算子也都是計算灰度圖,沒有太大必要計算三通道再取平均,畢竟計算的是邊緣信息,顏色信息不重要)
2.高斯平滑去噪
3.使用任意算子計算梯度大小和方向(因爲要計算大小和方向,所以Laplacian等相關算子就不能用了)
4.非極大值抑制
將梯度方向分爲4部分(因爲向上和向下對於梯度沒影響,所以把360度轉換爲180度)
在這裏插入圖片描述
在這裏插入圖片描述
比如現在2行3列的7是中心點
它的方向是上下走向
找到上下方向的相鄰點4和5
因爲7比4和5大
所以7保留

注意:
一定是該方向上相鄰的兩個點
比如方向爲右上
那麼相鄰的點就是右上角和左下角

5.雙閾值邊緣連接
設定兩個閾值high和low
梯度大小大於high的保留
梯度大小小於low的去除(梯度大小修改爲0)
梯度在low和high之間的做8鄰域連接
如果8鄰域內有大於high的,那麼該中心點保留,否則去除

8鄰域就是中心點周圍的8個點

關於高斯

噪聲通常是像素值突變的點

舉個例子
在5x5的範圍內,將所有像素值平均
可以減小這種突變
實現了去噪

這樣的壞處是,圖像的信息也沒了

爲了緩解上述情況
我們想到增加中心點的權重
離中心點距離越遠,權重越小
高斯分佈滿足這一條件

所以高斯平滑算子可以用以下公式得到
在這裏插入圖片描述
進一步
LoG是高斯和拉普拉斯的結合
拉普拉斯是二階差分
所以我們對上式關於x和y分別求二階導並相加
得到
在這裏插入圖片描述
比如中心點是(3,3)
那麼LoG算子(4,5)處的值就是把x=1,y=2代入上式

還有個超參數是高斯函數的方差
方差越大,高斯函數越平緩,去噪效果越好,圖像越模糊

優缺點分析
優缺點沒那麼絕對,也很難死記硬背,還是要學會分析

上文提到,平均可以去噪
那麼有平均思想的算子就對噪聲不敏感
比如Prewitt、Sobel
有了平均思想自然會造成一定的信息模糊
所以邊緣定位會因此效果下降
Roberts沒有這種平均思想
在噪聲小的條件下,邊緣定位就會準確一些

一階差分形容像素值變化趨勢
二階差分形容變化趨勢的快慢或者說劇烈程度
顯然噪聲的變化程度劇烈
那麼沒有去噪處理的Laplacian對噪聲就會敏感

在這裏插入圖片描述
四行分別是
常見邊緣
像素變化
一階差分
二階差分

因爲梯度大小要取絕對值或者平方
所以應該將小於0的部分向上翻轉

可以看出
二階差分算子容易檢測出雙邊緣
一階算子比較適合灰度漸變

Canny這種有很多步驟的就可以根據步驟分析
高斯平滑:去噪
雙閾值連接:連接一些弱邊緣
Canny更像一個集大成者
畢竟它已經上升到算法層面了

我覺得學會分析這些就夠了,優缺點還是挺難記的


歡迎討論 歡迎吐槽

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章