1.圖像膨脹的Matlab實現:函數
可使用imdilate函數進行圖像膨脹,imdilate函數須要兩個基本輸入參數,即待處理的輸入圖像和結構元素對象。結構元素對象能夠是strel函數返回的對象,也能夠是一個本身定義的表示結構元素鄰域的二進制矩陣。此外,imdilate還能夠接受兩個可選參數:PADOPT(padopt) ——影響輸出圖片的大小、PACKOPT(packopt).——說明輸入圖像是否爲打包的二值圖像(二進制圖像)。舉個實例以下:對象
步驟1,首先建立一個包含矩形對象的二值圖像矩陣。圖片
>> BW=zeros(9,10);ci
>> BW(4:6,4:7) =1it
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的正方形結構元素對象對建立的圖像進行膨脹。object
>> 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 從原始圖像中減去形態開啓後的圖像,能夠用來加強圖像的對比度