1. 程式人生 > >圖像切割—基於圖的圖像切割(Graph-Based Image Segmentation)

圖像切割—基於圖的圖像切割(Graph-Based Image Segmentation)

子圖 衡量標準 content 彩色 cep 期待 mean 定義 筆記



圖像切割—基於圖的圖像切割(Graph-Based Image Segmentation)

Reference:

Efficient Graph-Based Image Segmentation,IJCV 2004,MIT Code

圖像切割—基於圖的圖像切割(OpenCV源代碼註解)

最後一個暑假了,不打算開疆辟土了。戰略中心轉移到品味經典。計劃把圖像切割和目標追蹤的經典算法都看一看。再記些筆記。

Graph-Based Segmentation 是經典的圖像切割算法,作者Felzenszwalb也是提出DPM算法的大牛。該算法是基於圖的貪心聚類

算法,實現簡單。速度比較快,精度也還行。

只是。眼下直接用它做切割的應該比較少,畢竟是99年的跨世紀元老,可是非常多算法用它作墊腳石。比方Object Propose的開山之作《Segmentation as Selective Search for Object Recognition》就用它來產生過切割(oversegmentation)。還有的語義切割(senmatic segmentation )算法用它來產生超像素(superpixels)詳細忘記了……

圖的基本概念

由於該算法是將照片用加權圖抽象化表示,所以補充圖的一些基本概念。

是由頂點技術分享(vertices)和技術分享(edges)組成,表示為技術分享

。頂點技術分享,在本文中即為單個的像素點。連接一對頂點的邊技術分享具有權重技術分享,本文中的意義為頂點之間的相似度,所用的是無向圖

技術分享

樹:特殊的圖。圖中隨意兩個頂點,都有路徑相連接,可是沒有回路。如上圖中加粗的邊所連接而成的圖。假設看成一團亂連的珠子,僅僅保留樹中的珠子和連線。那麽隨便選個珠子,都能把這棵樹中全部的珠子都提起來。假設,i和h這條邊也保留下來。那麽頂點h,i,c,f,g就構成了一個回路。

最小生成樹(MST, minimum spanning tree):特殊的樹。給定須要連接的頂點,選擇邊權之和最小的樹。

上圖即是一棵MST

技術分享

本文中,初始化時每個像素點都是一個頂點,然後逐漸合並得到一個區域,確切地說是連接這個區域中的像素點的一個MST。如圖,棕色圓圈為頂點。線段為邊。合並棕色頂點所生成的MST,相應的就是一個切割區域。切割後的結果事實上就是森林。

相似性

既然是聚類算法,那應該根據何種規則判定何時該合二為一,何時該繼續劃清界限呢?

對於孤立的兩個像素點,所不同的是顏色,自然就用顏色的距離來衡量兩點的相似性,本文中是使用RGB的距離,即技術分享

當然也能夠用perceptually uniform的Luv或者Lab色彩空間,對於灰度圖像就僅僅能使用亮度值了,此外。還能夠先使用紋理特征濾波,再計算距離,比方,先做Census Transform再計算Hamming distance距離。

全局閾值à自適應閾值

上面提到應該用亮度值之差來衡量兩個像素點之間的差異性。對於兩個區域(子圖)或者一個區域和一個像素點的相似性,最簡單的方法即僅僅考慮連接二者的邊的不相似度。

技術分享

如圖,已經形成了棕色和綠色兩個區域,如今通過紫色邊來推斷這兩個區域是否合並。

那麽我們就能夠設定一個閾值,當兩個像素之間的差異(即不相似度)小於該值時,合二為一。

叠代合並,終於就會合並成一個個區域。效果類似於區域生長:星星之火,能夠燎原。

技術分享技術分享

顯然,上面這張圖應該聚成右圖所思的3類,高頻區h,斜坡區s,平坦區p。

假設我們設置一個全局閾值。那麽假設h區要合並成一塊的話,那麽該閾值要選非常大。可是那樣就會把p和s區域也包括進來。切割結果太粗。假設以p為參考,那麽閾值應該選特別小的值,那樣的話。p區是會合並成一塊。可是,h區就會合並成特別特別多的小塊,如同一面支離破碎的鏡子,切割結果太細

顯然,全局閾值並不合適,那麽自然就得用自適應閾值。對於p區該閾值要特別小,s區稍大。h區巨大。

對於兩個區域(原文中叫Component,實質上是一個MST,單獨的一個像素點也能夠看成一個區域),本文使用了很直觀,但抗幹擾性並不強的方法。先來兩個定義。原文根據這兩個附加信息來得到自適應閾值。

一個區域的類內差異技術分享

技術分享

能夠近似理解為一個區域內部最大的亮度差異值,定義是MST中不相似度最大的一條邊。

兩個區域的類間差異技術分享

技術分享

即連接兩個區域全部邊中,不相似度最小的邊的不相似度,也就是兩個區域最相似的地方的不相似度。

那麽直觀的推斷是否合並的標準:

技術分享

等價條件

技術分享

解釋: 技術分享技術分享各自是區域技術分享技術分享所能忍受的最大差異,當二者都能忍受當前差異技術分享時。你情我願,一拍即合,僅僅要有一方不願意,就不能強求。

特殊情況。當二者都是孤立的像素值時。技術分享,全部像素都是"零容忍"僅僅有像素值全然一樣才幹合並。自然會導致過切割。所以剛開始的時候,應該給每一個像素點設定一個能夠容忍的範圍。當生長到一定程度時。就應該去掉該初始容忍值的作用。

原文條件例如以下

技術分享 添加項技術分享:

技術分享

當中技術分享為區域技術分享所包括的像素點的個數,如此。隨著區域逐漸擴大,這一項的作用就越來越小,最後差點兒能夠忽略不計。那麽技術分享就是一個能夠控制所形成的的區域的大小,假設。技術分享那麽,差點兒每一個像素都成為了一個獨立的區域,假設技術分享,顯然整張圖片都會聚成一塊。所以,技術分享越大。切割後的圖片也就越大。

當然,能夠採用中位數來應對超調,只是這就變成了一個NP難問題。證明見原文

形狀相似

前面提到的用顏色信息來聚類,改動相似性衡量標準,能夠聚類成我們想要的特定形狀。

比方我們希望得到非常多長條形的區域,那麽能夠用聚類後的所形成的區域的面積/周長 + 亮度值的差 衡量兩個子圖或者兩個像素之間的相似度。

由於長條形的面積/周長會比較小。

算法步驟

Step 1: 計算每個像素點與其8鄰域或4鄰域的不相似度。

技術分享

如左邊所看到的,實線為僅僅計算4領域。加上虛線就是計算8鄰域。因為是無向圖,依照從左到右。從上到下的順序計算的話。僅僅須要計算右圖中灰色的線就可以。

Step 2:依照不相似度non-decreasing排列(從小到大排序得到技術分享

Step 3: 選擇技術分享

Step 4: 對當前選擇的邊技術分享進行合並推斷。設其所連接的頂點為技術分享。假設滿足合並條件:

(1)技術分享不屬於同一個區域技術分享

(2)不相似度不大於二者內部的不相似度。

技術分享則運行Step 5。否則運行Step 6

Step 5: 更新閾值以及類標號。

更新類標號:將技術分享的類標號統一為技術分享的標號。

更新該類的不相似度閾值為:技術分享

註意:因為不相似度小的邊先合並,所以。技術分享即為當前合並後的區域的最大的邊,即技術分享

Step 6: 假設技術分享,則依照排好的順序。選擇下一條邊轉到Step 4,否則結束。

結果

技術分享

技術分享技術分享

Segmentation parameters: sigma = 0.5, k= 500, min = 50.

Sigma先對原圖像進行高斯濾波去噪。sigma即為高斯核的技術分享

k: 控制合並後的區域的大小,見前文

min: 後處理參數,切割後會有非常多小區域,當區域技術分享像素點的個數技術分享小於min時。選擇與其差異最小的區域技術分享合並即技術分享

性質討論

結果盡管不是非常好,但有非常好的全局性質。結論非常有意思,有興趣的能夠看看。

首先要說明的是,對於不論什麽圖像,始終存在一種切割方法,使得切割的結果既只是細。也只是粗。

可是並不唯一

引理

假設step 4 時,技術分享,但並沒有合並,即技術分享,那麽肯定有一個區域已經切割好了,比方技術分享,那麽區域技術分享的範圍就不會再有添加,它將會成為終於的切割區域中的一個區域。

Proof:

如果。技術分享,因為邊是依照non-decreasing排序。所以剩下的連接技術分享的邊的不相似度肯定都不低於技術分享。最小的邊都不行,其余的邊自然是靠邊站了。

只是,原文說僅僅能僅僅有一個已經切割好了。可是我認為另一種情況。技術分享 而且技術分享,那麽這兩個區都應該分好了才對呀。

Not Too fine

切割太細,也就是本來不應該分開的區域被攔腰截斷。可是本算法是能保證有情人終成眷屬的,絕對不會幹棒打鴛鴦拆散一對是一對的事。

Proof:

技術分享

反證法:如上圖。本不應該切割,則應該滿足條件技術分享。如果分開了,那麽必然存在一條邊技術分享導致二者沒有合並。那麽由前面的引理,必然存在一個區域成為終於切割結果的一部分,如果為A部分,再回溯到推斷這條邊的時候。必然有。技術分享,從而技術分享,因為是按non-decreasing 順序,所以A部分和B部分最小的邊就是技術分享,那麽技術分享與如果條件矛盾。

Not Too coarse

切割太粗。也就是本應該分開的區域沒有分開。但本算法能保證當斷則斷。不會藕斷絲連。

反證法:如上圖。本應該切割,則應滿足條件技術分享。如果還是技術分享技術分享為連接A,B最小的邊。如果合並了,因為技術分享。並且是non-decreasing 順序,所以在判定邊技術分享之前A區域已經形成。

假設切割過粗。則判定這條邊時最小的邊滿足技術分享,則必然技術分享使得二者合並了。

和條件矛盾。

等權邊處理先後次序的影響

假設兩條邊技術分享技術分享的權值同樣,那麽排序時候。誰排前頭。誰落後面有影響嗎?結論是木有。

Proof:

Case1技術分享技術分享連接的區域同樣,即技術分享技術分享連接的都是區域技術分享。那麽它倆誰在前面都沒關系。

Case2技術分享技術分享連接的區域全然不同,比方技術分享連接區域,技術分享技術分享連接區域技術分享,那麽誰先誰後,都不影響技術分享是否合並,也不影響技術分享是否合並。

Case3技術分享連接技術分享,技術分享連接技術分享

Case3-1:技術分享在先。技術分享在後,而且,技術分享使得技術分享合並。交換二者處理順序。先處理技術分享。後處理技術分享

假設技術分享不合並技術分享,那不影響技術分享合並技術分享;假設技術分享合並技術分享,那麽合並後的技術分享,照樣合並。

Case3-2:技術分享在先,技術分享在後,而且,技術分享不合並技術分享,交換二者處理順序。先處理技術分享,後處理技術分享。假設是技術分享

技術分享是否合並技術分享。都不會使得技術分享合並;假設技術分享,那相同也有技術分享,相同也沒影響。

補充:

彩色圖片

對於彩色圖片,上文是將R,G,B作為距離。整張圖片僅僅進行一次切割。原文說對每個通道都進行一次切割,最後對結果取交集,也就是說圖片中的兩個點要劃分到同一個區域,則在R,G,B三個通道的劃分結果中。它倆得始終在同一個區域。原文說這樣效果更好……只是他的程序是採用一次切割。

Nearest Neighbor Graphs

前文是僅僅用了空間位置技術分享來構件圖的連接關系,缺點是明顯的,空間不相鄰,色彩全然一樣也白搭,於是中間略微有斷開都會分成多個部分。於是還有一種更為平等的策略是二者一塊考慮,先映射到特征空間技術分享。再構建圖。此時有連接關系的就不一定是4/8鄰域了,因為有技術分享對邊。因此假設考慮全部邊的連接關系的話,太恐怖了!原文是對每一個像素點找10個歐氏距離近期的點即10近期鄰。構建圖。當然。第二種方法不是固定鄰居數目,而是限定距離範圍。

技術分享


那麽類內距離技術分享的解釋就和直觀了。類內最短的距離,那麽會以這條邊為半徑,在特征空間構成一個超球體,只是會和別人有相交。

技術分享相同還是兩個類直接的最短距離。

找10-NN太累,原文採用近似算法ANN《Approximate nearest neighbor searching》來找10近鄰。快。

剩下的和上面一樣,可是有一點我沒明確,就是技術分享的更新,比方上圖。肯定是用綠色這條線更新,那麽技術分享的意義就不再是包括集合全部點的最短半徑了,求解?

結果例如以下:能夠看到被欄桿分開的草地也連在一塊了,以下的花朵也屬於同一個類別

技術分享


技術分享

圖像切割—基於圖的圖像切割(OpenCV源代碼註解)

下個星期寫Mean shift,敬請期待



圖像切割—基於圖的圖像切割(Graph-Based Image Segmentation)