1.圖像膨脹的Matlab實現:
可以使用imdilate函數進行圖像膨脹,imdilate函數需要兩個基本輸入參數,即待處理的輸入圖像和結構元素對象。結構元素對象可以是strel函數返回的對象,也可以是一個自己定義的表示結構元素鄰域的二進制矩陣。此外,imdilate還可以接受兩個可選參數:PADOPT(padopt) ——影響輸出圖片的大小、PACKOPT(packopt).——說明輸入圖像是否為打包的二值圖像(二進制圖像)。舉個實例如下:
步驟1,首先創建一個包含矩形對象的二值圖像矩陣。
>> BW=zeros(9,10);
>> BW(4:6,4:7) =1
BW =
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
步驟2,使用一個3×3的正方形結構元素對象對創建的圖像進行膨脹。
>> SE=strel('square',3)
SE =
Flat STREL object containing 9 neighbors.
Neighborhood:
1 1 1
1 1 1
1 1 1
步驟3,將圖像BW和結構元素SE傳遞給imdilate函數。
>> BW2=imdilate(BW,SE)
BW2 =
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
步驟4,顯示結果。
>> imshow(BW,'notruesize')
>> imshow(BW2,'notruesize')
2.圖像腐蝕的Matlab實現:
可以使用imerode函數進行圖像腐蝕。imerode函數需要兩個基本輸入參數:待處理的輸入圖像以及結構元素對象。此外,imerode函數還可以接受3個可選參數:PADOPT(padopt) ——影響輸出圖片的大小、PACKOPT(packopt).——說明輸入圖像是否為打包的二值圖像(二進制圖像)。M——指定原始圖像的行數。
以下程序示例說明了如何對某一副具體圖像進行腐蝕操作,腐蝕前后的效果對比如圖末。
步驟1,讀取圖像cameraman.tif (該圖像是Matlab當前目錄下自帶的圖片)
>> BW1=imread('cameraman.tif');
步驟2,創建一個任意形狀的結構元素對象
>> SE=strel('arbitrary',eye(5));
步驟3,以圖像BW1和結構元素SE為參數調用imerode函數進行腐蝕操作。
>> BW2=imerode(BW1,SE);
步驟4,顯示操作結果
>> imshow(BW1)
>> figure,imshow(BW2)
3.膨脹和腐蝕聯合操作(圖像開運算操作):
下面以圖像開啟為例,說明如何綜合使用imdilate和imerode這兩個函數,實現圖像處理操作。
步驟1,創建結構元素:
>> clear;close all
>> SE = strel('rectangle',[40 30]); %注意:結構元素必須具有適當的大小,既可以刪電流線又可以刪除矩形.
步驟2,使用結構元素腐蝕圖像: %將會刪除所有直線,但也會縮減矩形
>> BW1=imread('circbw.tif');
>> BW2=imerode(BW1,SE);
>> imshow(BW2)
>> figure,imshow(BW1)
步驟3,恢復矩形為原有大小,使用相同的結構元素對腐蝕過的圖像進行膨脹.
>> BW3=imdilate(BW2,SE);
>> figure,imshow(BW3)
4.基於膨脹與腐蝕的形態操作——骨架化和邊緣檢測
(1)骨架化:
某些應用中,針對一副圖像,希望對圖像中所有對象簡化為線條,但不修改圖像的基本結構,保留圖像基本輪廓,這個過程就是所謂的骨架化。提供了專門的函數bwmorph,可以實現骨架化操作。
>> clear;close all
>> BW1=imread('circbw.tif');
>> BW2=bwmorph(BW1,'skel',Inf);
>> imshow(BW1)
>> figure,imshow(BW2)
(2)邊緣檢測
對於一副灰度二進制圖像,如果圖像像素值為1,則該像素的狀態為ON,如果其像素值為0,則該像素的狀態為OFF。在一副圖像中,如果圖像某個像素滿足以下兩個條件:
1.該像素狀態為ON,
2.該像素鄰域中有一個或多個像素狀態為OFF。
則認為該像素為邊緣像素。
Matlab中提供了專門的函數bwperim,可以用於判斷一副二進制圖像中的哪些像素為邊緣像素。
以下程序代碼示例就是利用bwperim函數,對圖像circbw.tif進行邊緣檢測,其邊緣像素檢測效果如尾圖。
>> clear;close all
>> BW1=imread('circbw.tif');
>> BW2=bwperim(BW1);
>> imshow(BW1)
>> figure,imshow(BW2)
基於腐蝕和膨脹的形態操作函數如下:
bwhitmiss 圖像邏輯"與"操作,該函數使用一個結構元素對圖像進行腐蝕操作后,再使用第二個結構元素對圖像進行腐蝕操作
imbothat 從原始圖像中減去經過形態關閉后的圖像,該函數可用來尋找圖像中的灰度槽
imclose 閉合操作.首先對圖像進行膨脹,然后再對膨脹后的圖像進行腐蝕,兩個操作使用同樣的結構元素
imopen 開啟操作,首先對圖像進行腐蝕,然后再對腐蝕后的圖像進行膨脹,兩個操作使用同樣的結構元素
imtophat 從原始圖像中減去形態開啟后的圖像,可以用來增強圖像的對比度