图像处理常用边缘检测算子
圖像處理常用邊緣檢測算子
?????不同圖像灰度不同,邊界處一般會有明顯的邊緣,利用此特征可以分割圖像。需要說明的是:邊緣和物體間的邊界并不等同,邊緣指的是圖像中像素的值有突變的地方,而物體間的邊界指的是現實場景中的存在于物體之間的邊界。有可能有邊緣的地方并非邊界,也有可能邊界的地方并無邊緣,因為現實世界中的物體是三維的,而圖像只具有二維信息,從三維到二維的投影成像不可避免的會丟失一部分信息;另外,成像過程中的光照和噪聲也是不可避免的重要因素。正是因為這些原因,基于邊緣的圖像分割仍然是當前圖像研究中的世界級難題,目前研究者正在試圖在邊緣提取中加入高層的語義信息。
? ? ? ? 在實際的圖像分割中,往往只用到一階和二階導數,雖然,原理上,可以用更高階的導數,但是,因為噪聲的影響,在純粹二階的導數操作中就會出現對噪聲的敏感現象,三階以上的導數信息往往失去了應用價值。二階導數還可以說明灰度突變的類型。在有些情況下,如灰度變化均勻的圖像,只利用一階導數可能找不到邊界,此時二階導數就能提供很有用的信息。二階導數對噪聲也比較敏感,解決的方法是先對圖像進行平滑濾波,消除部分噪聲,再進行邊緣檢測。不過,利用二階導數信息的算法是基于過零檢測的,因此得到的邊緣點數比較少,有利于后繼的處理和識別工作。
? ? ? 各種算子的存在就是對這種導數分割原理進行的實例化計算,是為了在計算過程中直接使用的一種計算單位。
?
1.Sobel算子
? ? ? ? 其主要用于邊緣檢測,在技術上它是以離散型的差分算子,用來運算圖像亮度函數的梯度的近似值,?Sobel算子是典型的基于一階導數的邊緣檢測算子,由于該算子中引入了類似局部平均的運算,因此對噪聲具有平滑作用,能很好的消除噪聲的影響。Sobel算子對于象素的位置的影響做了加權,與Prewitt算子、Roberts算子相比因此效果更好。
? ? ? ?Sobel算子包含兩組3x3的矩陣,分別為橫向及縱向模板,將之與圖像作平面卷積,即可分別得出橫向及縱向的亮度差分近似值。實際使用中,常用如下兩個模板來檢測圖像邊緣。
檢測水平邊沿?橫向模板?:? ? ? ? ? ?檢測垂直平邊沿 縱向模板:
圖像的每一個像素的橫向及縱向梯度近似值可用以下的公式結合,來計算梯度的大小:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
然后可用以下公式計算梯度方向:
在以上例子中,如果以上的角度Θ等于零,即代表圖像該處擁有縱向邊緣,左方較右方暗。
缺點是Sobel算子并沒有將圖像的主題與背景嚴格地區分開來,換言之就是Sobel算子并沒有基于圖像灰度進行處理,由于Sobel算子并沒有嚴格地模擬人的視覺生理特征,所以提取的圖像輪廓有時并不能令人滿意。
?
2.Log算子(高斯拉普拉斯函數)
? ? ? LoG邊緣檢測算子是David Courtnay Marr和Ellen Hildreth(1980)共同提出的[1]??。因此,也稱為邊緣檢測算法或Marr & Hildreth算子。該算法首先對圖像做高斯濾波,然后再求其拉普拉斯(Laplacian)二階導數。即圖像與 Laplacian of the Gaussian function 進行濾波運算。最后,通過檢測濾波結果的零交叉(Zero crossings)可以獲得圖像或物體的邊緣。因而,也被業界簡稱為Laplacian-of-Gaussian (LoG)算子。
? ? ? LoG算子也就是 Laplace of Gaussian function(高斯拉普拉斯函數)。常用于數字圖像的邊緣提取和二值化。LoG 算子源于D.Marr計算視覺理論中提出的邊緣提取思想, 即首先對原始圖像進行最佳平滑處理, 最大程度地抑制噪聲, 再對平滑后的圖像求取邊緣。
? ? ?由于噪聲點(灰度與周圍點相差很大的像素點)對邊緣檢測有一定的影響,所以效果更好的邊緣檢測器是LoG算子,也就是Laplacian-Gauss算子。它把的Gauss平滑濾波器和Laplacian銳化濾波器結合了起來,先平滑掉噪聲,再進行邊緣檢測,所以效果會更好。[1]?
? ? 常用的LoG算子是5×5的模板。
? ? LoG算子 到中心的距離與位置加權系數的關系曲線象墨西哥草帽的剖面,所以LoG算子也叫墨西哥草帽濾波器。
3. Isotropic Sobel算子
? ? ? ? Sobel算子另一種形式是(Isotropic Sobel)算子,加權平均算子,權值反比于鄰點與中心點的距離,當沿不同方向檢測邊緣時梯度幅度一致,就是通常所說的各向同性Sobel(Isotropic Sobel)算子。模板也有兩個,一個是檢測水平邊沿的 ,另一個是檢測垂直平邊沿的 。各向同性Sobel算子和普通Sobel算子相比,它的位置加權系數更為準確,在檢測不同方向的邊沿時梯度的幅度一致。
?
4.?Roberts算子
? ? ? ?羅伯茨算子、Roberts算子是一種最簡單的算子,是一種利用局部差分算子尋找邊緣的算子,他采用對角線方向相鄰兩象素之差近似梯度幅值檢測邊緣。檢測垂直邊緣的效果好于斜向邊緣,定位精度高,對噪聲敏感,無法抑制噪聲的影響。1963年,Roberts提出了這種尋找邊緣的算子。
? ? ? ?Roberts邊緣算子是一個2x2的模板,采用的是對角方向相鄰的兩個像素之差。從圖像處理的實際效果來看,邊緣定位較準,對噪聲敏感。適用于邊緣明顯且噪聲較少的圖像分割。Roberts邊緣檢測算子是一種利用局部差分算子尋找邊緣的算子,Robert算子圖像處理后結果邊緣不是很平滑。經分析,由于Robert算子通常會在圖像邊緣附近的區域內產生較寬的響應,故采用上述算子檢測的邊緣圖像常需做細化處理,邊緣定位的精度不是很高。
?
5. Prewitt算子
? ? ? ? Prewitt算子是一種一階微分算子的邊緣檢測,利用像素點上下、左右鄰點的灰度差,在邊緣處達到極值檢測邊緣,去掉部分偽邊緣,對噪聲具有平滑作用 。其原理是在圖像空間利用兩個方向模板與圖像進行鄰域卷積來完成的,這兩個方向模板一個檢測水平邊緣,一個檢測垂直邊緣。
?對數字圖像f(x,y),Prewitt算子的定義如下:
? ? ? ? ? ?G(i)=|[f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)]-[f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)]|
? ? ? ? ? ?G(j)=|[f(i-1,j+1)+f(i,j+1)+f(i+1,j+1)]-[f(i-1,j-1)+f(i,j-1)+f(i+1,j-1)]|
? ? ? ? ? ? 則 P(i,j)=max[G(i),G(j)]或 P(i,j)=G(i)+G(j)
? ? ? ? 經典Prewitt算子認為:凡灰度新值大于或等于閾值的像素點都是邊緣點。即選擇適當的閾值T,若P(i,j)≥T,則(i,j)為邊緣點,P(i,j)為邊緣圖像。這種判定是欠合理的,會造成邊緣點的誤判,因為許多噪聲點的灰度值也很大,而且對于幅值較小的邊緣點,其邊緣反而丟失了。
? ? ? ? Prewitt算子對噪聲有抑制作用,抑制噪聲的原理是通過像素平均,但是像素平均相當于對圖像的低通濾波,所以Prewitt算子對邊緣的定位不如Roberts算子。
? ? ? 因為平均能減少或消除噪聲,Prewitt梯度算子法就是先求平均,再求差分來求梯度。水平和垂直梯度模板分別為:
檢測水平邊沿橫向模板:??? ? ? ? ? ? ? ?檢測垂直平邊沿縱向模板:
該算子與Sobel算子類似,只是權值有所變化,但兩者實現起來功能還是有差距的,據經驗得知Sobel要比Prewitt更能準確檢測圖像邊緣。
?
6.Laplacian算子
? ? ? ? ?Laplace算子是一種各向同性算子,二階微分算子,在只關心邊緣的位置而不考慮其周圍的象素灰度差值時比較合適。Laplace算子對孤立象素的響應要比對邊緣或線的響應要更強烈,因此只適用于無噪聲圖象。存在噪聲情況下,使用Laplacian算子檢測邊緣之前需要先進行低通濾波。所以,通常的分割算法都是把Laplacian算子和平滑算子結合起來生成一個新的模板。
拉普拉斯算子也是最簡單的各向同性微分算子,具有旋轉不變性。一個二維圖像函數的拉普拉斯變換是各向同性的二階導數,定義了更適合于數字圖像處理,將拉式算子表示為離散形式:
另外,拉普拉斯算子還可以表示成模板的形式,如下圖所示,
離散拉普拉斯算子的模板:, 其擴展模板:?。
? ? ? 拉式算子用來改善因擴散效應的模糊特別有效,因為它符合降制模型。擴散效應是成像過程中經常發生的現象。
? ? ? Laplacian算子一般不以其原始形式用于邊緣檢測,因為其作為一個二階導數,Laplacian算子對噪聲具有無法接受的敏感性;同時其幅值產生算邊緣,這是復雜的分割不希望有的結果;最后Laplacian算子不能檢測邊緣的方向;所以Laplacian在分割中所起的作用包括:(1)利用它的零交叉性質進行邊緣定位;(2)確定一個像素是在一條邊緣暗的一面還是亮的一面;一般使用的是高斯型拉普拉斯算子(Laplacian of a Gaussian,LoG),由于二階導數是線性運算,利用LoG卷積一幅圖像與首先使用高斯型平滑函數卷積改圖像,然后計算所得結果的拉普拉斯是一樣的。所以在LoG公式中使用高斯函數的目的就是對圖像進行平滑處理,使用Laplacian算子的目的是提供一幅用零交叉確定邊緣位置的圖像;圖像的平滑處理減少了噪聲的影響并且它的主要作用還是抵消由Laplacian算子的二階導數引起的逐漸增加的噪聲影響。
?
?7.Canny算子
? ? ? 該算子功能比前面幾種都要好,但是它實現起來較為麻煩,Canny算子是一個具有濾波,增強,檢測的多階段的優化算子,在進行處理前,Canny算子先利用高斯平滑濾波器來平滑圖像以除去噪聲,Canny分割算法采用一階偏導的有限差分來計算梯度幅值和方向,在處理過程中,Canny算子還將經過一個非極大值抑制的過程,最后Canny算子還采用兩個閾值來連接邊緣。
Canny邊緣檢測算法:
step1: 用高斯濾波器平滑圖象;
step2: 用一階偏導的有限差分來計算梯度的幅值和方向;
step3: 對梯度幅值進行非極大值抑制
step4: 用雙閾值算法檢測和連接邊緣
?
Canny邊緣檢測基本原理:
(1)圖象邊緣檢測必須滿足兩個條件:一能有效地抑制噪聲;二必須盡量精確確定邊緣的位置。
(2)根據對信噪比與定位乘積進行測度,得到最優化逼近算子。這就是Canny邊緣檢測算子。
(3)類似與Marr(LoG)邊緣檢測方法,也屬于先平滑后求導數的方法。
?
step1: 高斯平滑函數:
step3:非極大值抑制
????? 僅僅得到全局的梯度并不足以確定邊緣,因此為確定邊緣,必須保留局部梯度最大的點,而抑制非極大值。(non-maxima suppression,NMS)
解決方法:利用梯度的方向。
step4:用雙閾值算法檢測和連接邊緣:
對非極大值抑制圖像作用兩個閾值th1和th2,兩者關系th1=0.4th2。我們把梯度值小于th1的像素的灰度值設為0,得到圖像1。然后把梯度值小于th2的像素的灰度值設為0,得到圖像2。由于圖像2的閾值較高,去除大部分噪音,但同時也損失了有用的邊緣信息。而圖像1的閾值較低,保留了較多的信息,我們可以以圖像2為基礎,以圖像1為補充來連結圖像的邊緣。
鏈接邊緣的具體步驟如下:
對圖像2進行掃描,當遇到一個非零灰度的像素p(x,y)時,跟蹤以p(x,y)為開始點的輪廓線,直到輪廓線的終點q(x,y)。
考察圖像1中與圖像2中q(x,y)點位置對應的點s(x,y)的8鄰近區域。如果在s(x,y)點的8鄰近區域中有非零像素s(x,y)存在,則將其包括到圖像2中,作為r(x,y)點。從r(x,y)開始,重復第一步,直到我們在圖像1和圖像2中都無法繼續為止。
當完成對包含p(x,y)的輪廓線的連結之后,將這條輪廓線標記為已經訪問?;氐降谝徊?#xff0c;尋找下一條輪廓線。重復第一步、第二步、第三步,直到圖像2中找不到新輪廓線為止。
??至此,完成canny算子的邊緣檢測。
?
總結
以上是生活随笔為你收集整理的图像处理常用边缘检测算子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Faker库:一个数据造假的神库
- 下一篇: Java学习小代码(1)编写三个数的排序