下面是利用腐蝕算法進行邊界提取,即原圖減去腐蝕後的圖得到邊界
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提取邊界')
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CMzgDM4MDM2gjMjBDNkRGOyYzX4IDMwUTM1IzLcVDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
可以看到兩種方法得到的提取結果都很不錯。
下面介紹幾個函數
函數一: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鄰域