matlab 獲取圖像輪廓兩種方法

來源:酷知科普網 1.41W

在圖像的視覺特徵研究領域,形狀特徵因更接近人的視覺特點,一直是人們的研究重點,而形狀的邊緣又反映出很多信息,所以在研究圖像的特徵時有必要提取其邊緣輪廓以便以後的深入分析。
matlab中有很多集成的邊緣函數,可以很方便的提取圖像的邊緣。今天小沙就為大家介紹一下。

使用beperim方法

(01)matlab中有提取圖形輪廓的函數bwperim。但其只針對二值圖像,所以需要先對灰度圖像進行二值化,選定合適的閾值進行二值化。I = imread('1.jpg');BW = im2bw(I,0.4);BW2 = bwperim(BW,8);顯示圖像:subplot(1,2,1);imshow(I);title('original iamge');subplot(1,2,2), imshow(BW2);title('bwperim');

matlab 獲取圖像輪廓兩種方法

(02)由上圖可以看出,這個函數的侷限性在於, 它不僅提取外輪廓, 對圖形區域內部的孔洞所圍成的內部邊緣也提取出來。如果想只得到外形輪廓,則需要先進行填洞操作,後進行膨脹操作,去除孔、洞。填洞為imfill。IBW = ~BW;F1 = imfill(IBW,'holes');SE = ones(3);F2 = imdilate(F1,SE,'same');BW3 = bwperim(F2);顯示圖像:subplot(1,2,1);imshow(I);title('original iamge');subplot(1,2,2), imshow(BW3);title('operated bwperim');

matlab 獲取圖像輪廓兩種方法 第2張

(03)這種方法具有一定侷限性和優點,可根據個人的具體需要合理使用。下面介紹一下另一種方法,也是較為常用的方法:edge。

使用edge方法

(01)edge方法適用於灰度圖像。edge的語法較為簡單。Bw = edge(I,‘methodname’)。第一個參數為要提取輪廓的圖像,第二個參數為使用的算子。不同算子提取出來的效果略有不同。第一種:SOBEL算子。I=imread('lena.bmp');%  提取圖像BW1=edge(I,'sobel'); %用SOBEL算子進行邊緣檢測顯示圖像:figure;subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW1);title('sobel');

(02)第二種:Roberts算子。I=imread('lena.bmp');%  提取圖像BW2=edge(I,'roberts');%用Roberts算子進行邊緣檢測顯示圖像:figure;subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW2);title('roberts');

matlab 獲取圖像輪廓兩種方法 第3張

(03)第三種:prewitt算子。I=imread('lena.bmp');%  提取圖像BW3=edge(I,'prewitt'); %用prewitt算子進行邊緣檢測顯示圖像:figure;subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW3);title('prewitt');

(04)第四種:log算子。I=imread('lena.bmp');%  提取圖像BW4=edge(I,'log'); %用log算子進行邊緣檢測顯示圖像:figure;subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW4);title('log');

matlab 獲取圖像輪廓兩種方法 第4張

(05)第五種:canny算子。I=imread('lena.bmp');%  提取圖像BW5=edge(I,'canny'); %用canny算子進行邊緣檢測顯示圖像:figure;subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW5);title('canny');

matlab 獲取圖像輪廓兩種方法 第5張

(06)我們也可以將圖像加上噪音然後進行提取,加了噪聲之後的圖像的輪廓要更加雜亂。第六種:加噪音提取。I=imread('lena.bmp');%  提取圖像h=fspecial('gaussian',5);BW6=edge(I,'canny');顯示圖像:figure;subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW6);title('gasussian&canny');

matlab 獲取圖像輪廓兩種方法 第6張

總結

(01)以上就是提取圖像輪廓常用的方法,根據需要選擇合適的方法才能有更好的效果。

熱門標籤