索伯運算元

索伯運算元(Sobel operator)是圖像處理中的運算元之一,有時又稱為索伯-費德曼運算元或索貝濾波器,在影像處理及電腦視覺領域中常被用來做邊緣檢測。索伯運算元最早是由艾爾文索伯及蓋瑞費德曼於1968年在史丹佛大學的人工智慧實驗室(SAIL)所提出,因此為了表揚他們的貢獻,才用他們的名字命名。

基本介紹

  • 中文名:索伯運算元
  • 外文名:Sobel operator
  • 別稱:索伯-費德曼運算元或索貝濾波器
  • 定義圖像處理中的運算元之一
  • 提出者:艾爾文索伯及蓋瑞費德曼
  • 提出時間:1968年
簡介,公式,技術細節,替代的運運算元,虛擬碼,

簡介

索伯運算元(Sobel operator)是圖像處理中的運算元之一,有時又稱為索伯-費德曼運算元或索貝濾波器,在影像處理及電腦視覺領域中常被用來做邊緣檢測。索伯運算元最早是由艾爾文索伯及蓋瑞費德曼於1968年在史丹佛大學的人工智慧實驗室(SAIL)所提出,因此為了表揚他們的貢獻,才用他們的名字命名。在技術上,它是一離散性差分運算元,用來運算圖像亮度函式的梯度之近似值。在圖像的任何一點使用此運算元,索伯運算元的運算將會產生對應的梯度向量或是其範數。概念上,索伯運算元就是一個小且是整數的濾波器對整張影像在水平及垂直方向上做卷積,因此它所需的運算資源相對較少,另一方面,對於影像中的頻率變化較高的地方,它所得的梯度之近似值也比較粗糙。
雖然索伯運算元代表著相對沒那么精準的影像梯度近似,但其品質也足夠在很多套用派上用場。更精確來說,對於每個點,它只用其亮度的值在周圍3x3的區域去近似該點的梯度,而且在近似的過程,它也只用整數去代表影像亮度的權重。

公式

該運算元包含兩組3x3的矩陣,分別為橫向及縱向,將之與圖像作平面卷積,即按所示方程式計算:
即可分別得出橫向及縱向的亮度差分近似值。如果以A代表原始圖像,
分別代表經橫向及縱向邊緣檢測的圖像,其公式如下:
圖像的每一個像素的橫向及縱向梯度近似值可用以下的公式結合,來計算梯度的大小。
然後可用以下公式計算梯度方向。
以縱向邊緣為例,如果角度等於零,即代表圖像的縱向邊緣右方較亮;若為π,則左方較亮。

技術細節

索伯運算元在實作上可以用很簡單的硬體和軟體: 只有該點的周圍八個點需要被計算,同時在梯度向量的近似上也都只牽涉到整數的計算,而且上述的兩個離散濾波器是可分解的:
因此GxGy可推導成
在特別的實作上,可分解的運算可能會有優勢因為在每個點的運算上會有少一些的算術運算。套用卷積核K在像素群P上的虛擬碼可以表示成:
P代表著像素矩陣,所以N(x,y) 代表的套用卷積核K在像素群P後產生的矩陣。

替代的運運算元

索伯運算元在轉動上沒有完美的對稱。因此沙爾想要改進這個特性。它曾提出了更大的5x5核心,不過後來最常被使用的是:
沙爾運算元的概念源自於試圖在頻域上最小化加權的均方角度差,這個最佳化問題需要考量濾波器在數值上的一致性,因此它們是微分核。
另一個相似的改進方法是被法立德和西蒙切利所提出,它們的研究是針對更高次方的微分,相較於沙爾運算元,這些濾波器沒有考量到數值的一致性。
除此之外,克龍也提出了利用數值方法的最佳化來設計微分濾波器。
2014年,哈斯特也利用任意的三次樣條曲線去設計微分濾波器,他的研究指出可以利用長度為7的濾波器作雙重濾波在三次樣條曲線及三角樣條上已取得精準的一次微分和二次微分。
另外一個相似的運算元是卡雅利運算元,概念也是來自於索伯運算元,但它是個具有完美的旋轉對稱的3x3卷積濾波器。
在那之後的工作,沙爾又針對了光流的預測上提出了更好的濾波器,同一年,他也提出了更好的二次微分濾波器套用在動作預測上。結果顯示使用的核心越大,就越有可能去逼近高斯濾波的微分。

虛擬碼

function sobel(A : as two dimensional image array)        Gx=[-1 0 1; -2 0 2; -1 0 1]        Gy=[-1 -2 -1; 0 0 0; 1 2 1]                rows = size(A,1)        columns = size(A,2)        mag=zeros(A)        for i=1:rows-2                for j=1:columns-2                        S1=sum(sum(Gx.*A(i:i+2,j:j+2)))                        S2=sum(sum(Gy.*A(i:i+2,j:j+2)))                        mag(i+1,j+1)=sqrt(S1.^2+S2.^2)                end for        end for                threshold = 70 %varies for application [0 255]        output_image = max(mag,threshold)        output_image(output_image==round(threshold))=0;        return output_imageend function

相關詞條

熱門詞條

聯絡我們