與拉普拉斯算子類似,但對噪音容忍度更高,且可偵測邊緣之方向性
前言
前一篇文章提到的拉普拉斯算子 ( Laplacian operator ),不只是測邊的唯一方法,這篇文章介紹的索伯算子 ( Sobel operator ) 是更常被使用的算子。
相較於拉普拉斯算子而言,索伯算子只用圖像的梯度作為判斷依據,且對於不同方向性的邊界是用分開的面罩 ( Mask ) 來做偵測,當梯度變化超過一個閥值,即判斷為邊界。
梯度向量 ( Gradient Vector )
索伯算子對應到的面罩分為上圖的左右兩個,左邊負責偵測水平向的邊界,右邊負責偵測垂直向的邊界。所以 A 表示輸入影像,G 表示梯度,則公式如下:
將兩個分量結合為梯度:
為了更快速的運算可改為:
而角度則為:
實作應用
輸入圖片:
索伯算子在 OpenCV 也有 API 可以直接使用,並且可透過參數設定 mask 尺寸,並控制水平、垂直向邊界偵測,以下是我用不同尺寸實作的結果比較:
Source code: