【zz】matlab 腐蝕膨脹算法

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 從原始圖像中減去形態開啓後的圖像,能夠用來加強圖像的對比度

相關文章
相關標籤/搜索