天天看點

邊界提取_MATLAB

下面是利用腐蝕算法進行邊界提取,即原圖減去腐蝕後的圖得到邊界

1 f=imread('D:/picture/ZiXia.jpg');
 2 figure;
 3 subplot(2,2,1);
 4 imshow(f);
 5 title('原圖');
 6 f=rgb2gray(f);
 7 f=im2bw(f);%圖像二值化
 8 subplot(2,2,2);
 9 imshow(f);
10 title('人臉二值圖像');
11 se=strel('square',3);%選取3*3正方形結構元素
12 Ie=imerode(f,se);%對原圖像進行腐蝕,
13 Iout1=f-Ie;%原圖像減去腐蝕結果
14 subplot(2,2,3);
15 imshow(Iout1);
16 title('直接邊界輪廓提取')
17 Iout2=bwperim(f,4);%用bwperim提取邊界
18 subplot(2,2,4);
19 imshow(Iout2);
20 title('用bwperim提取邊界')      
邊界提取_MATLAB

可以看到兩種方法得到的提取結果都很不錯。

下面介紹幾個函數

函數一:im2bw

im2bw:基于門檻值,将圖像轉變成二進制圖像。

BW = im2bw(I, level):将灰階圖像I轉變成二級制圖像BW

level:門檻值等級,取值範圍【0,1】

BW: 邏輯型

如果I中像素亮度比I*level大,則該值變為1,否則為0

通俗講,就是門檻值設定的大的話。原圖隻會保留下很亮的部分!      

函數二:strel

Matlab中函數strel在操作結構元素應用,用于膨脹腐蝕及開閉運算等操作的結構元素對象
具體用法:SE = strel(shape,parameters)
建立由指定形狀shape對應的結構元素。其中shape的種類有
arbitrary'
'pair'
'diamond'
'periodicline'
'disk'
'rectangle'
'line'
'square'
'octagon
參數parameters一般控制SE的大小。
例子:
se1 = strel('square',6)
% 建立6*6的正方形
se2 = strel('line',10,45)
% 建立直線長度10,角度45
se3 = strel('disk',15)
% 建立圓盤半徑15

se4 = strel('ball',15,5)
% 建立橢圓體,半徑15,高度5      

函數三:imerode

Matlab用imerode函數實作圖像腐蝕。用法為:
Imerode(X,SE).其中X是待處理的圖像,SE是結構元素對象      

函數四:bwperim函數

BW1 = imread('circbw.tif');
BW2 = bwperim(BW1,8); 
Bw1是提取的圖像對象,8指的是八鄰域,預設鄰域類型為4鄰域