下面是利用腐蝕算法進行邊界提取,即原圖減去腐蝕后的圖得到邊界
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提取邊界')
可以看到兩種方法得到的提取結果都很不錯。
下面介紹幾個函數
函數一: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鄰域