1. 程式人生 > >區域生長和區域分離與合併的影象分割方法

區域生長和區域分離與合併的影象分割方法

最近在學習影象分割的方法,所以對區域生長與區域分離與合併的影象分割方法進行一下總結。

首先說一下兩者的不同。區域生長是根據預先定義的生長準則來把畫素或子區域集合成較大區域的處理方法。區域生長是先給定影象中要分割的目標物體內的一個小塊或者說種子區域(seed point),再在種子區域基礎上不斷將其周圍的畫素點以一定的規則加入其中,達到最終將代表該物體的所有畫素點結合成一個區域的目的。區域分離與合併是先將影象分割成很多的一致性較強,如區域內畫素灰度值相同的小區域,再按一定的規則將小區域融合成大區域,達到分割影象的目的。區域生長的好壞決定於1、種子點的選取,2、生長準則,3、停止準則。

下面將重點講一下區域分離與合併的影象分割方法。在我的上一篇部落格裡面也有程式,可對照程式進行理解。總的過程分三步:

(1) 分離任意區域Ri為4個不相連的象限,滿足P(Ri)=FALSE。

(2) 當無法進一步分離時,合併任何滿足P(Rj∪Rk)=TURE的區域Rj和Rk。

(3) 在無法進一步合併的時候停止。

具體來說,首先是影象分裂,分裂R的一種方法是把R連續地細分成越來越小的象限區域,以便對任何區域Ri都有P(Ri)=TRUE。我們從整個區域開始:如果P(R) =TRUE,就把影象分成4象限;如果對每個4象限來說,P都是FALSE,就不再進行分裂,這樣繼續下去。這種特別的分離技術有一種方便的表現方法,叫做四叉樹;這是一棵樹,樹中的每個節點都恰好有4個後代,詳細參考岡薩雷斯的數字影象處理。子影象對應四叉樹的節點,有時稱為四叉區域或四叉影象。


如果只使用分離,最終的部分通常包括具有相同屬性的鄰近區域,這個缺點可以通過下邊的合併來解決。兩個鄰近的區域Rj和Rk,在滿足P (Rj∪Rk) =TURE的時候就合併。當無法合併時,分割就完成了。滿足屬性的所有四叉區域都用1填充,並且它們的連通性可以很容易被檢查,比如用imreconstruct函式。在效果上,這個函式能達到希望的鄰近象限區域的合併。不滿足屬性的四叉區域都用0填充,從而產生分割的影象。

程式的編寫:

 g=splitmerge(f,2,@predicate);%首先這條語句是主體,返回的g就是分割後的影象。predicate用於兩個目的。判斷是否分裂,是否滿足合併標記的條件,後面會講。

S=qtdecomp(f,@split_test,mindim,fun);%qtdecomp是實現四叉樹分解的matlab中的函式,由於要實現分解,所以先把原影象f擴充套件成2的冪次的尺寸大小,最後返回g的時候,再變為原影象的大小就可以了。f是輸入影象,S是包括四叉樹結構的稀疏矩陣。如果S(k, m)非零,那麼(k,m)是分解塊的左上角,而且塊的大小是S(k, m)。split_test函式用來決定某個區域是否進行分離,split_test本質上就是對flag=predicate(region)進行了一個呼叫,1,就繼續分裂,0就停止分裂。mindim是它的引數,表示允許的最小的分塊大小的尺寸。

分裂完以後,開始進行判斷是否合併,為了在四叉樹分解中得到實際的四叉區域畫素值,使用qtgetblk函式,語法是:

[vals,r,c]=qtgetblk(f,S,m)

其中,vals是陣列,vals包含f中四叉樹分解的尺寸為m×m的塊的個數,S是由qtdecomp返回的稀疏矩陣。引數r和c是包含塊的左上角行和列座標的向量。vals是一個數組,包含f的四叉樹分解中大小為m*m的塊的值,是一個m*m*個數的矩陣,個數是指S中有多少個這樣大小的塊,f是被四叉樹分的原影象,r,c是對應的左上角塊的座標如2*2塊,代表的是左上角開始塊的座標。

函式splitmerge的結構很簡單。首先,影象被函式qtdecomp分塊。函式split_test使用predicate來決定區域是否應該被分離。因為當區域被分成4個時,我們並不知道產生的4個區域中的哪一個將通過屬性測試。在瞭解了在分離的影象中哪一個區域通過測試之後,考查一下區域是有必要的。函式predicate也用於這個目的。所以,predicate用於兩個目的,在被split_test呼叫時,返回1,代表繼續分裂,0代表不再分裂;在用作合併中時,返回1,表示通過測試,四叉區域都用1填充,返回0代表沒有通過測試,用0填充。標識陣列可在每個被填充了1的區域通過選擇元素來建立。標識陣列連同分割的影象一起被用於決定區域的連通性(鄰接性);函式imreconstruct也用於這一目的。

所以區域分裂與合併的分割方法中,predicate函式是使用者自定義的,改動性最大,最關鍵,關乎分割效果的好壞,用於兩個目的時可以分別定義不同的函式準則,以達到最好的效果。


²一種是先給定影象中要分割的目標物體內的一個小塊或者說種子區域(seedpoint),再在種子區域基礎上不斷將其周圍的畫素點以一定的規則加入其中,達到最終將代表該物體的所有畫素點結合成一個區域的目的 ²另一種是先將影象分割成很多的一致性較強,如區域內畫素灰度值相同的小區域,再按一定的規則將小區域融合成大區域,達到分割影象的目的 ²一種是先給定影象中要分割的目標物體內的一個小塊或者說種子區域(seedpoint),再在種子區域基礎上不斷將其周圍的畫素點以一定的規則加入其中,達到最終將代表該物體的所有畫素點結合成一個區域的目的 ²另一種是先將影象分割成很多的一致性較強,如區域內畫素灰度值相同的小區域,再按一定的規則將小區域融合成大區域,達到分割影象的目的 ²一種是先給定影象中要分割的目標物體內的一個小塊或者說種子區域(seedpoint),再在種子區域基礎上不斷將其周圍的畫素點以一定的規則加入其中,達到最終將代表該物體的所有畫素點結合成一個區域的目的 ²另一種是先將影象分割成很多的一致性較強,如區域內畫素灰度值相同的小區域,再按一定的規則將小區域融合成大區域,達到分割影象的目的