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)以上就是提取影象輪廓常用的方法,根據需要選擇合適的方法才能有更好的效果。

熱門標籤