Matlab 圖像—邊緣檢測算法及效果演示
點(diǎn)擊下方卡片,關(guān)注“新機(jī)器視覺”公眾號
重磅干貨,第一時間送達(dá)
邊緣檢測
在圖像中,邊緣是一條曲線,其走勢與圖像中強(qiáng)度快速變化的路徑一致。邊緣通常與場景中目標(biāo)的邊界相關(guān)聯(lián)。邊緣檢測用于確定圖像中的邊緣。
要尋找邊緣,您可以使用 edge 函數(shù)。此函數(shù)使用以下兩個標(biāo)準(zhǔn)之一來尋找圖像中強(qiáng)度迅速變化的位置:
強(qiáng)度的一階導(dǎo)數(shù)的模大于某個閾值的位置
強(qiáng)度的二階導(dǎo)數(shù)有過零點(diǎn)的位置
edge 提供幾個導(dǎo)數(shù)估算器,其中每個都實(shí)現(xiàn)以下定義之一。
對于其中一些估算器,您可以指定運(yùn)算是否應(yīng)對水平邊緣、垂直邊緣敏感或?qū)烧叨济舾小?/p>
edge 返回二值圖像,其中包含的 1 對應(yīng)于找到邊的位置,0 對應(yīng)于其他位置。
edge 提供的最強(qiáng)大的邊緣檢測方法是 Canny 方法。Canny 方法與其他邊緣檢測方法的不同之處在于,它使用兩種不同閾值(用于檢測強(qiáng)邊緣和弱邊緣),并且僅當(dāng)弱邊緣連通到強(qiáng)邊緣時才在輸出中包括弱邊緣。
因此,這種方法不太可能受到噪聲的影響,更可能檢測到真正的弱邊緣。
檢測圖像中的邊緣
此示例說明如何同時使用 Canny 邊緣檢測器和 Sobel 邊緣檢測器來檢測圖像中的邊緣。

Matlab 代碼
I = imread('coins.png');imshow(I);% 將 Sobel 和 Canny 邊緣檢測器同時應(yīng)用于圖像,并顯示它們以進(jìn)行比較。BW1 = edge(I,'sobel');BW2 = edge(I,'canny');figure;imshowpair(BW1,BW2,'montage')title('Sobel Filter Canny Filter');
代碼效果如下:

邊緣算法:robert
邊緣定位精度較高,對于陡峭邊緣且噪聲低的圖像效果較好,但沒有進(jìn)行平滑處理,沒有抑制噪聲的能力。
BW1=edge(Img,'Roberts',0.16);邊緣算法:sobel prewitt
進(jìn)行了平滑處理,對噪聲具有一定抑制能力,但容易出現(xiàn)多像素寬度。
BW2=edge(Img,'Sobel',0.16);BW3=edge(Img,'Prewitt',0.16);
邊緣算法:laplacian
對噪聲較為敏感,使噪聲能力成分得到加強(qiáng),容易丟失部分邊緣方向信息,造成一些不連續(xù)的檢測邊緣,同時抗噪聲能力較差。
邊緣算法:log
抗噪聲能力較強(qiáng),但會造成一些尖銳的邊緣無法檢測到。
BW5=edge(Img,'LOG',0.16);邊緣算法:canny
最優(yōu)化思想的邊緣檢測算子,同時采用高斯函數(shù)對圖像進(jìn)行平滑處理,但會造成將高頻邊緣平滑掉,造成邊緣丟失,采用雙閾值算法檢測和連接邊緣。
BW6=edge(Img,'Canny',0.16);效果對比

還有一篇更加偏向于原理講解的文章:
圖像邊緣檢測及提取方法總結(jié)(含Matlab代碼)
https://blog.csdn.net/LemonXQ/article/details/79695641
本文僅做學(xué)術(shù)分享,如有侵權(quán),請聯(lián)系刪文。
