Canny邊緣檢測運算元是John F. Canny于 1986 年開發出來的一個多級邊緣檢測演算法,是邊緣檢測的一種標準演算法,而且仍在研究中廣泛使用。
其步驟如下:
1. 圖像平滑化
使用Gaussian Filter對圖片做輕微模糊,去除雜訊。Gaussian Filter適用於消除高斯雜訊。
2. 計算圖片梯度方向及強度
使用Sobel找出垂直(Gy)、水平(Gx)方向梯度,從而計算出梯度方向
及強度,計算公式為:
3. Non-Maximum Suppression
為了簡化運算,將梯度方向簡化為8個方向:
相互比較相同梯度方向,非最大值時,簡化為0,只保留最大值,舉例:右斜對角為目前pixel之梯度方向,因此只考慮當前pixel、右上及左下pixel,相互比較,只留最大值。
4. Double Threshold
使用兩個Threshold(Tmax,Tmin)用以尋找可能邊界,當pixel梯度強度大於Tmax時,判斷該pixel為邊緣(強邊緣Hard Edge)。當梯度強度介於兩者Tmin<pixel<Tmax,該pixel可能為邊緣,為邊緣候選(弱邊緣Weak Edge)。梯度強度小於Tmin時,則不為邊緣。
5. Connect Weak Edge
將有跟硬邊緣(Hard Edge)連接的軟邊緣(Weak Edge)判斷為邊緣(Edge),未連接則非邊緣。
如上圖,Edge1有部分pixel位於軟邊緣,部分位於硬邊緣,軟邊緣與硬邊緣有連接,因此整體會判斷為Edge。而Edge2所有線段皆位於軟邊緣範圍內,無與硬邊界連接,因此非Edge。
以上步驟即完成Canny Edge。這個方法算法簡易,但在實作上相對較不靈活,較難調整結果或是難以與其他方法相結合。