天天看點

Canny邊緣檢測算子原理

canny算子是圖像進行中比較常用的算法,之前曾用canny來進行邊緣檢測,友善接下來的用Hough對圖像進行處理,其中Canny算子的算法原理中有好多基本的機率都很重要,為了溫故是以寫篇Canny,有不做和錯誤的地方歡迎指征。

首先介紹一下Canny對邊緣檢測品質進行分析提出了三個原則:1.信噪比準則、2.定位精度準則、3.但邊緣響應準則,具體什麼意思這裡就不貼了。邊緣檢測算法難點在于需要在排除噪聲和精準定位方面,正所謂魚和熊掌不可兼得。Canny算子可以在這兩者之間比較好的折衷

算法步驟

(1)用高斯濾波器平滑圖像

這裡為什麼用對圖像進行平滑,有一種解釋是在後期邊緣檢測的時候可以獲得比較圓潤的邊緣,坑擊噪聲對圖像的幹擾

Canny邊緣檢測算子原理

(1)是高斯函數,但是在canny算子中用的是不帶系數的高斯函數,G(x,y)=F(x,y)*H(x,y),G為濾波後的圖像,F為原始圖像

(2)用一階偏導的有限差分計算梯度幅值和方向

Canny邊緣檢測算子原理

(2)數學表達式

Canny邊緣檢測算子原理

(3)計算模闆

Canny邊緣檢測算子原理

(4)計算梯度幅值和方向

附:在canny算子中使用的是一階偏導如(2),二階偏導的數學表達式:f(x+1)-f(x)-(f(x)-f(x-1))=f(x+1)+f(x1)-2f(x)

(3)對梯度幅值進行非極大值抑制

在http://blog.csdn.net/xiaxiazls/article/details/47841435這篇文章中的這部分介紹很詳細。要進行非極大值抑制,就首先要确定像素點C的灰階值在其8值鄰域内是否為最大。圖1中藍色的線條方向為C點的梯度方向,這樣就可以确定其局部的最大值肯定分布在這條線上,也即出了C點外,梯度方向的交點dTmp1和dTmp2這兩個點的值也可能會是局部最大值。是以,判斷C點灰階與這兩個點灰階大小即可判斷C點是否為其鄰域内的局部最大灰階點。如果經過判斷,C點灰階值小于這兩個點中的任一個,那就說明C點不是局部極大值,那麼則可以排除C點為邊緣。這就是非極大值抑制的工作原理。

Canny邊緣檢測算子原理

(4)用雙門檻值方法檢測和連接配接邊緣

使用兩個門檻值T1和T2(T1<T2),首先使用高門檻值得到一個邊緣圖像,但是該邊緣圖像由于采用的是高門檻值,是以存在不連續的情況比較多,這個時候在高門檻值邊緣圖像的端點8領域處尋找可以連接配接的到輪廓上的邊緣,當滿足門檻值T1時連接配接。

繼續閱讀