1. 程式人生 > >利用OpenCV的Grabcut()函式實現影象的前景與背景的分割-並對Grabcut()作詳細介紹

利用OpenCV的Grabcut()函式實現影象的前景與背景的分割-並對Grabcut()作詳細介紹

Graphcut是一種基於圖論的分割方法,在計算機視覺領域中應用於前景分割、醫學處理、紋理分割及立體視覺等方面,類似於PS中的摳圖功能。基本圖論的分割技術是影象分割領域中新的研究熱點,該方法基於能量優化演算法,將影象分割問題轉換為圖的最小割優化問題。

Grabcut是Graphcut演算法的改進,Graphcut是一種直接基於圖切演算法的影象分割技術,僅僅需要確認前景與背景輸入,該演算法就可以完成背景與前景相似督導賦權圖,並通過最優切割來實現影象分割。Grabcut演算法可以不需要使用者互動,僅僅需要輸入包含目標前景的區域就可以完成前景與前景的分離。

Graphcut的目標和背景模型是灰度直方圖,Grabcut採用的是RGB三通道混合高斯模型;Graphcut的能量最小化分割是能通過一次計算實現的,而Grabcut是根據分割模型引數更新完成學的學習過程;Graphcut需要使用者輸入前景與背景區域點集,而Grabcut只需要提供含有背景的區域畫素集就可以完成分割。

上面三段話純屬裝逼,實際上,只是對Grabcut演算法和Graphcut演算法大致的介紹,要說為什麼是那樣,我現在也說不清楚,如果想了解詳細原理,可以參考相關論文和下面這三篇博文

OpenCV中提供了Grabcut函式用於實現Grabcut操作,原型如下:

void grabCut(InputArray image, InputOutputArray mask, Rect rect, InputOutputArray bgdModel, InputOutputArray fgdModel, int iterCount, int mode)