邊緣檢測在圖像處理中是非常重要的,通過邊緣檢測,我們能夠區(qū)分一張圖像的邊緣部分。為增進大家對邊緣檢測的認識,本文將對邊緣檢測的步驟以及canny邊緣檢測算法獲取邊緣與輪廓提取的方法予以介紹。如果你對邊緣檢測具有興趣,不妨繼續(xù)往下閱讀哦。
一、邊緣檢測步驟
①濾波:邊緣檢測算法主要是基于圖像強度的一階和二階導數(shù),但導數(shù)的計算對噪聲很敏感,因此必須使用濾波器來改善與噪聲有關的邊緣檢測器的性能。需要指出,大多數(shù)濾波器在降低噪聲的同時也導致了邊緣強度的損失,因此,增強邊緣和降低噪聲之間需要折中。
②增強:增強邊緣的基礎是確定圖像各點鄰域強度的變化值。增強算法可以將鄰域(或局部)強度值有顯著變化的點突顯出來。邊緣增強一般是通過計算梯度幅值來完成的。
③檢測:在圖像中有許多點的梯度幅值比較大,而這些點在特定的應用領域中并不都是邊緣,所以應該用某種方法來確定哪些點是邊緣點。最簡單的邊緣檢測判據(jù)是梯度幅值閾值判據(jù)。
④定位:如果某一應用場合要求確定邊緣位置,則邊緣的位置可在子像素分辨率上來估計,邊緣的方位也可以被估計出來。在邊緣檢測算法中,前三個步驟用得十分普遍。這是因為大多數(shù)場合下,僅僅需要邊緣檢測器指出邊緣出現(xiàn)在圖像某一像素點的附近,而沒有必要指出邊緣的精確位置或方向。
邊緣檢測的實質是采用某種算法來提取出圖像中對象與背景間的交界線。我們將邊緣定義為圖像中灰度發(fā)生急劇變化的區(qū)域邊界。圖像灰度的變化情況可以用圖像灰度分布的梯度來反映,因此我們可以用局部圖像微分技術來獲得邊緣檢測算子。經(jīng)典的邊緣檢測方法,是通過對原始圖像中像素的某小鄰域構造邊緣檢測算子來達到檢測邊緣這一目的的。
二、canny邊緣檢測算法獲取邊緣與輪廓提取
1.獲取邊緣
為了提取單像素寬邊緣,必須細化梯度幅值圖。在梯度幅值圖像中,M[i,j]的極大值所在位置附近會產生屋脊帶,只有細化這些屋脊帶才能精確地確定邊緣的位置,僅保留幅值局部變化最大的點,這一過程叫做非極大值抑制。在非極大值抑制過程中,Canny算子使用3×3大小,包含8個方向的鄰域對梯度幅值陣列M[i,j]的所有像素沿梯度方向進行梯度幅值的插值,在每一個點上,鄰域的中心像素M[i,j]與沿梯度方向的2個梯度幅值的插值結果進行比較,如果鄰域中心點的幅值M[i,j]不比梯度方向上的2個插值結果大,則將M[i,j]對應的邊緣標志位賦值為0,這一過程把M[i.j]寬屋脊帶細化為一個像素寬,并且保留了屋脊的梯度幅值。
對經(jīng)過非極大值抑制和梯度直方圖分類的子圖像N[i,j]分別使用高、低2個閾值thrA和thrl,將梯度小于閾值的像素灰度置為0,分割得到2個閾值邊緣圖像TH[i,j]和TL[i,j]。由于圖像TH[i,j]是由高閾值得到,因此偽邊緣很少,但TL[i,j]保留邊緣信息較為全面,但也含有一些偽邊緣。因此以圖像TH[i,j]為基礎,圖像TL[i,j]為補充獲得相對較為全面的邊緣。
2.輪廓跟蹤或輪廓提取
在對圖像進行canny邊緣檢測后,可能會出現(xiàn)某些檢測邊緣斷裂、不連續(xù)的現(xiàn)象,為了解決這個問題,使獲得的目標檢測物體的邊緣能夠連續(xù)并且去除多余的偽邊緣,在邊緣檢測后,再對圖像進行邊界跟蹤,便可使這一問題得以很好地改善。
對于二值圖像,輪廓提取的基本方法是掏空內部點,即如果原圖像中有一點為黑,且其他相鄰的8個點都為黑,則將該點刪除。
本文借鑒二值圖像輪廓跟蹤方法,即將每一點與其相鄰的8個點作比較。具體方法為:(1)先找到第一個邊界像素。按從左到右、從下到上的順序搜索,找到的第一個白點一定是最左下方的邊界點,記為A0,它的右、右上、上、左上四個相鄰點中至少有一個是邊界點,記為B0,從B0開始找起,按右、右上、上、左上、左、左下、下、右下的順序找8個相鄰點中的邊界點C0,如果C0就是A0點,則表明已經(jīng)轉了一圈,結束;否則從C0點繼續(xù)找,直到找到A0為止;(2)判斷是否邊界點:如果它的8個相鄰點都不是白點,則它即為邊界點。對于邊界跟蹤來說,跟蹤后產生的輪廓邊緣寬度只有一個像素,實現(xiàn)了邊緣像素點單一、清晰,并很好地去除了偽邊緣點。
以上便是此次小編帶來的檢測相關內容,通過本文,希望大家對邊緣檢測具備一定的認知。如果你喜歡本文,不妨持續(xù)關注我們網(wǎng)站哦,小編將于后期帶來更多精彩內容。最后,十分感謝大家的閱讀,have a nice day!