1. 程式人生 > >opencv筆記(一):邊緣檢測的4種運算元

opencv筆記(一):邊緣檢測的4種運算元

邊緣檢測:可以用導數來檢測

1.canny運算元:採用一階偏導的有限差分來計算梯度幅值和方向,方向導數達到區域性最大則為邊緣候選點;

                         創新點在於試圖將邊緣畫素拼接成輪廓,輪廓的形成即使用滯後性閾值:通過高低兩個閾值的設定,高閾值用來控制強邊緣的初始段,低閾值用來邊緣連線。

                         高閾值求的邊緣一般斷斷續續,斷開的地方如果低閾值求的邊緣存在,就用低閾值的邊緣接上去,目的讓邊緣儘量都連在一起。兩閾值間的點為疑似邊緣點,根據     連 通性確定,如果疑似點的鄰接畫素中有邊緣點則認為是邊緣點。

2.sobel運算元

:在某個點使用sobel運算元,產生梯度向量(可用來邊緣檢測)或法向量(可用來計演算法線)。計算時先在x,y方向求導數,即分別和核進行卷積,

                        Gx = |(P3+2P6+P9)-(P1+2P4+P7)|
                        Gy = |(P1+2P2+P3) - (P7+2P8+P9)|

                        假如中間為邊緣,那麼邊緣兩側的亮度差距就會變大,乘以符號相反的係數,會使得最終的結果達到很大的值,在影象上來看就是白色;而不是邊緣的區域,左右兩  邊或者上下兩邊就會抵消,在影象上看就是黑色。

3.scharr濾波器:對小的核來說,sobel運算元的精度低,例如3*3的核,可以用scharr代替sobel,速度一樣,精度高。

4.拉普拉斯運算元:利用sobel運算元算出影象上x,y方向的導數,帶入到公式中。拉普拉斯求2階導,邊緣位於拉普拉斯值為0的地方,2階導數為0,即一階導為極大或極小值。