簡體   English   中英

GrabCut算法會發生什么

[英]What happens in GrabCut Algorithm

我想知道以下代碼中實際上發生了什么。

cv::Rect rectangle(x,y,width,height);

    cv::Mat result; 
    cv::Mat bgModel,fgModel;


    cv::grabCut(image,  
                    result,  
                    rectangle,
                    bgModel,fgModel, 
                    1,       
                    cv::GC_INIT_WITH_RECT);


    cv::compare(result,cv::GC_PR_FGD,result,cv::CMP_EQ);

    // Generate output image
    cv::Mat foreground(image.size(),CV_8UC3,cv::Scalar(255,255,255));
    image.copyTo(foreground,result); 

據我所知,當我們在矩形外部定義矩形時,會將其視為已知背景,將內部視為未知前景。

然后bgmodelfgmodel是高斯混合模型,分別保留前景像素和背景像素。

我們將參數傳遞為1表示,我們要求將像素划分為單獨的像素,進程僅運行一次。

我不明白的是

cv::compare(result,cv::GC_PR_FGD,result,cv::CMP_EQ);

以上方法實際上發生了什么。

如果有人可以解釋,那將是很大的幫助。 感謝名單。

我發現這本書告訴我們該代碼將result的像素值與GC_PR_FGD值進行比較。 等於的像素不會觸摸,它刪除的所有其他像素。 這里是引文:

輸入/輸出分割圖像可以具有四個值之一:

  • cv :: GC_BGD,用於肯定屬於背景的像素(例如,在我們的示例中,矩形外部的像素)
  • cv :: GC_FGD,用於肯定屬於前景的像素(在我們的示例中沒有)
  • cv :: GC_PR_BGD,用於可能屬於背景的像素
  • cv :: GC_PR_FGD用於可能屬於前景的像素(在我們的示例中為矩形內像素的初始值)。

通過提取值等於cv :: GC_PR_FGD的像素,我們得到了分割的二進制圖像:

 // Get the pixels marked as likely foreground cv::compare(result,cv::GC_PR_FGD,result,cv::CMP_EQ); // Generate output image cv::Mat foreground(image.size(),CV_8UC3, cv::Scalar(255,255,255)); image.copyTo(foreground, // bg pixels are not copied result); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM