當前位置:編程學習大全網 - 源碼下載 - grabcut算法

grabcut算法

本文轉自 《圖像分割之(三)從 Graph Cut 到 Grab Cut》

GrabCut是Graph Cut的改進版,是叠代的Graph Cut。OpenCV中的GrabCut算法是依據《"GrabCut" - Interactive Foreground Extraction using Iterated Graph Cuts》這篇文章來實現的。該算法利用了圖像中的紋理(顏色)信息和邊界(反差)信息,只要少量的用戶交互操作即可得到比較好的分割結果。

OK,那看了效果,我們會想,上面這些效果是怎麽達到的呢?它和Graph Cut有何不同?

(1)Graph Cut的目標和背景的模型是灰度直方圖,Grab Cut取代為RGB三通道的混合高斯模型GMM;

(2)Graph Cut的能量最小化(分割)是壹次達到的,而Grab Cut取代為壹個不斷進行分割估計和模型參數學習的交互叠代過程;

(3)Graph Cut需要用戶指定目標和背景的壹些種子點,但是Grab Cut只需要提供背景區域的像素集就可以了。也就是說妳只需要框選目標,那麽在方框外的像素全部當成背景,這時候就可以對GMM進行建模和完成良好的分割了。即Grab Cut允許不完全的標註(incomplete labelling)。

我們采用RGB顏色空間,分別用壹個K個高斯分量(壹取般K=5)的全協方差GMM(混合高斯模型)來對目標和背景進行建模。於是就存在壹個額外的向量k = {k1, . . ., kn, . . ., kN},其中kn就是第n個像素對應於哪個高斯分量,kn∈ {1, . . . K}。對於每個像素,要不來自於目標GMM的某個高斯分量,要不就來自於背景GMM的某個高斯分量。

Graph Cut的算法是壹次性最小化的,而Grab Cut是叠代最小的,每次叠代過程都使得對目標和背景建模的GMM的參數更優,使得圖像分割更優。我們直接通過算法來說明。

(1)用戶通過直接框選目標來得到壹個初始的trimap T,即方框外的像素全部作為背景像素TB,而方框內TU的像素全部作為“可能是目標”的像素。

(2)對TB內的每壹像素n,初始化像素n的標簽αn=0,即為背景像素;而對TU內的每個像素n,初始化像素n的標簽αn=1,即作為“可能是目標”的像素。

(3)經過上面兩個步驟,我們就可以分別得到屬於目標(αn=1)的壹些像素,剩下的為屬於背景(αn=0)的像素,這時候,我們就可以通過這個像素來估計目標和背景的GMM了。我們可以通過k-mean算法分別把屬於目標和背景的像素聚類為K類,即GMM中的K個高斯模型,這時候GMM中每個高斯模型就具有了壹些像素樣本集,這時候它的參數均值和協方差就可以通過他們的RGB值估計得到,而該高斯分量的權值可以通過屬於該高斯分量的像素個數與總的像素個數的比值來確定。

(1)對每個像素分配GMM中的高斯分量(例如像素n是目標像素,那麽把像素n的RGB值代入目標GMM中的每壹個高斯分量中,概率最大的那個就是最有可能生成n的,也即像素n的第kn個高斯分量):

(4)重復步驟(1)到(3),直到收斂。經過(3)的分割後,每個像素屬於目標GMM還是背景GMM就變了,所以每個像素的kn就變了,故GMM也變了,所以每次的叠代會交互地優化GMM模型和分割結果。另外,因為步驟(1)到(3)的過程都是能量遞減的過程,所以可以保證叠代過程會收斂。

(5)采用border matting對分割的邊界進行平滑等等後期處理。

(1)編輯:人為地固定壹些像素是目標或者背景像素,然後再執行壹次2.2中步驟(3);

(2)重操作:重復整個叠代算法。(可選,實際上這裏是程序或者軟件摳圖的撤銷作用)

總的來說,其中關鍵在於目標和背景的概率密度函數模型和圖像分割可以交替叠代優化的過程。

  • 上一篇:狗狗幣是什麽
  • 下一篇:有壹首歌的歌詞其中有壹句是彩虹橋的故事,采果果
  • copyright 2024編程學習大全網