本示例說明了如何使用分水嶺分割來分離影象中的物體。分水嶺變換透過將影象視為亮畫素高而暗畫素低的表面,在影象中找到“集水盆地”和“分水嶺脊線”。

如果您可以識別或“標記”前景物體和背景位置,則使用分水嶺變換進行分割會更好。標記控制的分水嶺分割遵循以下基本過程:

計算分割函式。這是一張影象,其暗區是您要分割的物體。

計算前景標記。這些是每個物體中畫素的連通域。

計算背景標記。這些是不屬於任何物體的畫素。

修改分割函式,使其僅在前景和背景標記位置具有最小值。

計算修改後的分割函式的分水嶺變換。

步驟1:讀取彩色影象並將其轉換為灰度

rgb

=

imread

‘pears。png’

);

I

=

rgb2gray

rgb

);

imshow

I

text

732

501

‘Image courtesy of Corel(R)’

。。。

‘FontSize’

7

‘HorizontalAlignment’

‘right’

MATLAB影象處理:50:標記控制的分水嶺分割

步驟2:使用梯度幅度作為分割函式

計算梯度幅度。梯度在物體邊界處較高,而在物體內部的梯度較低(大部分)。

gmag

=

imgradient

I

);

imshow

gmag

,[])

title

‘Gradient Magnitude’

MATLAB影象處理:50:標記控制的分水嶺分割

您是否可以直接在梯度幅度上使用分水嶺變換對影象進行分割?

L

=

watershed

gmag

);

Lrgb

=

label2rgb

L

);

imshow

Lrgb

title

‘Watershed Transform of Gradient Magnitude’

MATLAB影象處理:50:標記控制的分水嶺分割

不行。如果不進行其他預處理(例如下面的標記計算),則直接使用分水嶺變換通常會導致“過度分割”。

步驟3:標記前景物體

在這裡可以應用各種過程來找到前景標記,這些前景標記必須與每個前景物體內部的畫素區域相連。在此示例中,您將使用稱為“開重建”和“閉重建”的形態學技術“清理”影象。這些操作用

imregionalmax

將在每個可使用定位的物體內建立平坦的最大值。

開操作是腐蝕然後是膨脹,而開重建是腐蝕然後是形態學重建。讓我們比較一下兩者。首先,使用開操作

imopen

se

=

strel

‘disk’

20

);

Io

=

imopen

I

se

);

imshow

Io

title

‘Opening’

MATLAB影象處理:50:標記控制的分水嶺分割

接下來,使用

imerode

imreconstruct

計算開重建。

Ie

=

imerode

I

se

);

Iobr

=

imreconstruct

Ie

I

);

imshow

Iobr

title

‘Opening-by-Reconstruction’

MATLAB影象處理:50:標記控制的分水嶺分割

開操作後可以用閉操作消除黑點和莖幹痕跡。比較常規形態學閉操作與閉重建。首先嚐試

imclose

Ioc

=

imclose

Io

se

);

imshow

Ioc

title

‘Opening-Closing’

MATLAB影象處理:50:標記控制的分水嶺分割

現在使用

imdilate

之後再用

imreconstruct

。請注意,您必須對

imreconstruct

影象的輸入和輸出進行補集操作。

Iobrd

=

imdilate

Iobr

se

);

Iobrcbr

=

imreconstruct

imcomplement

Iobrd

),

imcomplement

Iobr

));

Iobrcbr

=

imcomplement

Iobrcbr

);

imshow

Iobrcbr

title

‘Opening-Closing by Reconstruction’

MATLAB影象處理:50:標記控制的分水嶺分割

如你所見,可以用

Ioc

比較

Iobrcbr

,在不影響物體的總體形狀的條件下消除小瑕疵,基於重建的開和閉比標準的開操作和閉操作更加有效。計算

Iobrcbr

的區域最大值以獲得良好的前景標記。

fgm

=

imregionalmax

Iobrcbr

);

imshow

fgm

title

‘Regional Maxima of Opening-Closing by Reconstruction’

MATLAB影象處理:50:標記控制的分水嶺分割

為了幫助解釋結果,請將前景標記影象疊加在原始影象上。

I2

=

labeloverlay

I

fgm

);

imshow

I2

title

‘Regional Maxima Superimposed on Original Image’

MATLAB影象處理:50:標記控制的分水嶺分割

請注意,某些未完全遮蓋和陰影的物體未標記,這意味著在最終結果中將無法正確分割這些物體。此外,某些物件中的前景標記會一直向上延伸到物件的邊緣。這意味著您應該清理標記斑點的邊緣,然後將其縮小一點。您可以先閉操作再進行侵蝕操作。

se2

=

strel

ones

5

5

));

fgm2

=

imclose

fgm

se2

);

fgm3

=

imerode

fgm2

se2

);

此過程往往會留下一些必須隔離的雜散孤立畫素。您可以使用

bwareaopen

來執行此操作,該操作會刪除畫素少於一定數量的所有斑點。

fgm4

=

bwareaopen

fgm3

20

);

I3

=

labeloverlay

I

fgm4

);

imshow

I3

title

‘Modified Regional Maxima Superimposed on Original Image’

MATLAB影象處理:50:標記控制的分水嶺分割

步驟4:計算背景標記

現在您需要標記背景。在清理後的影象

Iobrcbr

中,黑色畫素屬於背景,因此您可以從閾值操作開始。

bw

=

imbinarize

Iobrcbr

);

imshow

bw

title

‘Thresholded Opening-Closing by Reconstruction’

MATLAB影象處理:50:標記控制的分水嶺分割

背景畫素為黑色,但理想情況下,我們不希望背景標記離我們要分割的物件的邊緣太近。我們將透過計算

bw

前景的“受影響區域的骨架”(SKIZ)來“縮小”背景。可以透過計算

bw

距離變換的分水嶺變換,然後尋找結果的分水嶺脊線(

DL == 0

)來完成。

D

=

bwdist

bw

);

DL

=

watershed

D

);

bgm

=

DL

==

0

imshow

bgm

title

‘Watershed Ridge Lines’

MATLAB影象處理:50:標記控制的分水嶺分割

步驟5:計算分割函式的分水嶺變換

函式

imimposemin

可用於修改影象,使其僅在某些所需位置具有區域最小值。在這裡,您可以用

imimposemin

來修改梯度幅度影象,以使其唯一的區域最小值出現在前景和背景標記畫素上。

gmag2

=

imimposemin

gmag

bgm

|

fgm4

);

最後,計算基於分水嶺的分割。

L

=

watershed

gmag2

);

步驟6:視覺化結果

一種視覺化技術是在原始影象上疊加前景標記、背景標記和分割物體的邊界。您可以根據需要使用膨脹來使某些方面(例如物件邊界)更加可見。物體邊界位於

L == 0

處。二進位制前景和背景標記縮放到不同的整數值,以便為它們分配不同的標籤。

labels

=

imdilate

L

==

0

ones

3

3

))

+

2

*

bgm

+

3

*

fgm4

I4

=

labeloverlay

I

labels

);

imshow

I4

title

‘Markers and Object Boundaries Superimposed on Original Image’

MATLAB影象處理:50:標記控制的分水嶺分割

該視覺化說明了前景標記和背景標記的位置如何影響結果。在幾個位置中,部分被遮擋的較暗物件與它們的明亮鄰居物體合併,因為被遮擋的物體沒有前景標記。

另一種有用的視覺化技術是將標籤矩陣顯示為彩色影象。標籤矩陣(例如由

watershed

bwlabel

生成的標籤矩陣)可以使用

label2rgb

轉換為真彩色影象,以用於視覺化目的。

Lrgb

=

label2rgb

L

‘jet’

‘w’

‘shuffle’

);

imshow

Lrgb

title

‘Colored Watershed Label Matrix’

MATLAB影象處理:50:標記控制的分水嶺分割

您可以使用透明度將此偽彩色標籤矩陣疊加在原始強度影象的頂部。

figure

imshow

I

hold

on

himage

=

imshow

Lrgb

);

himage

AlphaData

=

0。3

title

‘Colored Labels Superimposed Transparently on Original Image’

MATLAB影象處理:50:標記控制的分水嶺分割

注:本文根據MATLAB官網內容修改而成。

以下的

免費影片教程

,特點是沒有PPT,不摻水,直接程式設計環境下的實操課程:

用100分鐘瞭解MATLAB程式設計

歡迎您進一步瞭解以下MATLAB系列文章: