OpenCV2:高中篇 圖像銳化技術-邊緣檢測算子

一.簡介

從一張圖像中,把輪廓提取出來算法

邊緣檢測算子:Sobel  Laplace Roberts  Prewitt Canny 及 Marr-Hildrethblog

任何邊緣檢測算法都不可能在未經處理的原始數據上很好地處理,因此第一步是對原始數據與高斯平滑模板做卷積it

 

二.邊緣提取

1.Canny

Canny邊緣檢測的基本思想是:首先對圖像選擇必定的Gauss(高斯)濾波器進行平滑濾波,而後採用非極值抑制技術進行處理獲得邊緣圖像模板

Canny算子法實現的方式爲:圖像先用2D高斯濾波模板進行卷積以消除噪聲,再對濾波後圖像中的每一個像素計算其梯度的大小和方向class

(1)降噪im

(2)尋找梯度技術

(3)跟蹤邊緣數據

 

Canny算法分爲4個步驟:

(1)濾波平滑噪聲

任何邊緣檢測算法都不可能在未經處理的原始數據上工做,第一步是對原始數據與高斯mask做卷積,獲得的圖像與原始圖像有些輕微模糊,用高斯濾波器來處理高斯平滑的圖像

(2)利用已有的一階偏導算子計算梯度

Canny算法的基本思想是尋找一副圖像中灰度強度變化最強的位置,變化最強即梯度位置,平滑後的圖像中每一個像素點能夠由Sobel算子(一種卷積運算)來得到

(3)非極大值抑制

這一步是將模糊(blurred)的邊界變得清晰(sharp),保留了每一個像素點上的梯度強度大的極大值,而刪掉其餘值

(4)雙閾值法抑制假邊緣,鏈接真邊緣

強邊界用白色表示,弱邊界用灰色表示,經過這樣來去除噪聲點di

 

CV_EXPORTS_W void Canny(InputArray image,

                                                  OutputArray edges,

                                                   double threshold1, double threshold2,

                                                   int apertureSize=3,

                                                   bool L2gradient=false)block

 

  • image,edges

    輸入和輸出圖像

  • threshold1,threshold2

    底閾值和高閾值,值越大,找到的邊緣越少

  • apertureSize

    表示應用Sobel算子的孔徑大小,默認值爲3

  • L2gradient

    表示一個計算圖像梯度幅值的表示,默認值爲false

 

cv::Mat im;
cv::Mat result
cv::Canny(im, result, 50, 150);

 

2.Sobel(索貝爾邊緣算子)

 

3.Laplace(拉普拉斯邊緣算子)

 

4.Roberts(羅伯茨邊緣算子)

Roberts 算子是一種利用局部差分算子尋找邊緣的算子

Roberts 算子在邊緣檢測的效果中因爲沒有通過圖像平滑處理的,所以圖像噪聲通常得不到很好的抑制,也所以影響到計算定位時容易丟失一部分的邊緣。可是Roberts 算子的定位精度較高,對具備陡峭的低噪聲圖像響應較好

相關文章
相關標籤/搜索