影像處理與濾波

索貝爾算子

索貝爾算子是一對特定、實用的 3 乘 3 小核,用來估計影像梯度,一個算水平導數 Gx、一個算垂直導數 Gy。它的巧妙在於一舉兩得:它一邊微分(找出亮度變化之處),一邊在垂直方向輕度平滑(以抵抗雜訊),這使它遠比赤裸裸的相鄰像素相減可靠。

水平核是各列為 [-1, 0, +1]、[-2, 0, +2]、[-1, 0, +1] 的 3x3 網格;垂直核是它的轉置,各列為 [-1, -2, -1]、[0, 0, 0]、[+1, +2, +1]。這個結構並非偶然:每個核都是平滑向量 [1, 2, 1] 與中央差分向量 [-1, 0, +1] 的外積(可分離)。[-1, 0, +1] 部分估計跨越中心的斜率,[1, 2, 1] 部分則對相鄰列或行取平均、並對中心加重,以抑制雜訊。把影像與這兩個核卷積便得到 Gx 與 Gy,由此得出邊緣強度 sqrt(Gx^2 + Gy^2) 與邊緣方向 atan2(Gy, Gx)。

索貝爾算子通常是更大流程的第一階段,最著名的就是 Canny 邊緣偵測器內部的梯度計算,它也出現在無數特徵與紋理描述子中。它的限制源自它只是 3x3 近似:它在旋轉上略不準確,對對角邊緣的反應與對軸向邊緣略有不同。Scharr 算子(各列為 [-3, 0, +3]、[-10, 0, +10]、[-3, 0, +3])就是為改善旋轉對稱性而設計,而較簡單的 Prewitt 算子使用均勻的 [1, 1, 1] 平滑,因而稍微吵雜一些。

把水平 Sobel 核掃過一道乾淨的垂直邊緣,它會回傳強烈反應;掃過一道水平邊緣,它幾乎回傳零,這種方向選擇性正是你需要同時用 Gx 與 Gy 才能捕捉各種方向邊緣的原因。

陷阱:Sobel 的輸出是帶正負號的,且可能超出 0-255 範圍(由暗到亮的強邊給出大正值,由亮到暗給出大負值)。在取大小之前,請以帶符號或浮點型別儲存結果;先夾限到 8 位元會摧毀一半的邊緣。

又称
Sobel-Feldman operatorSobel filter