使用GrabCut初始化中心的矩形,等于图像尺寸的50%

Initialize rectangle in the center which is equal to 50% of the image size using Grabcut

本文关键字:图像 于图像 初始化 GrabCut 使用      更新时间:2023-10-16

我尝试在下面的论文中实现想法:BICOS:BI级共段方法用于图像分类,但我对以下要求感到困惑: grabcut在此处在中心的矩形(图像大小的50%,除非另有说明)和其余的矩形。图像大小的50%。请帮我。我使用OpenCV库中的C 代码。

好吧,他们假设感兴趣的图是由一个矩形界定的:

Rect(Point(image.width/4, image.height/4), Point(image.width*3/4, image.height*3/4);

或图像的一半的区域的矩形(1/root2 size);再次以图像中心点为中心。

然后可以在该矩形内调用grabcut算法。

如果图形在某种程度上接近边界,则他们手工选择矩形(有监督的启动)。由于目的是用grabcut结果训练SVM,因此自动化不是必须的。

纸张应该更清楚。从上下文来看,它可能是指定义包含分段对象的感兴趣区域(ROI)的矩形。ROI外的像素被标记为"明显的背景"。众所周知,Grabcut要求您指定图像的区域,这些区域指定明显的背景像素,可能的前景像素,明显的前景像素,可能的前景像素。将所有这些数据作为grubcut函数在OpenCV中的参数提供。另外,这是cv::Rect的文档。

我不知道作者如何选择矩形的大小。具有图像大小的50%的矩形大小意味着什么?矩形的尺寸可能等于图像尺寸的1/2。您可以通过电子邮件将论文的作者发送电子邮件并要求澄清。

要选择您可以使用ROI。但是,如果要绘制框或矩形,则可以使用矩形或行函数。这是绘制矩形框50%图像的简单代码。

int main(int argc, char *argv[])
{
    Mat src = imread("Desert.jpg");
    Mat src_original = src.clone();
    cv::Size sz = src.size();
    int block_size = 16;
    int x_cord_roi = sz.width/4;
    int y_cord_roi = sz.height/4;
    int width_roi = sz.width/2;
    int height_roi = sz.height/2;
    imshow("My_Win_Ori", src_original);
    Mat roi(src, Rect(x_cord_roi, y_cord_roi, width_roi, height_roi));
   // rectangle( src, Point(x_cord_roi, y_cord_roi), Point( x_cord_roi + width_roi, y_cord_roi + height_roi),
   //        Scalar(255 ), -1,8 );
    int thickness = 2;
    int lineType = 8;
    line( src, Point( x_cord_roi, y_cord_roi), Point(x_cord_roi + width_roi, y_cord_roi), Scalar( 0, 0, 0 ), thickness, lineType );
    line( src, Point( x_cord_roi, y_cord_roi), Point(x_cord_roi, y_cord_roi + height_roi), Scalar( 0, 0, 0 ), thickness, lineType );
    line( src, Point( x_cord_roi + width_roi, y_cord_roi), Point(x_cord_roi +width_roi , y_cord_roi + height_roi), Scalar( 0, 0, 0 ), thickness, lineType );
    line( src, Point( x_cord_roi, y_cord_roi + height_roi), Point(x_cord_roi + width_roi, y_cord_roi + height_roi), Scalar( 0, 0, 0 ), thickness, lineType );
    imshow("My_Win", src);
    waitKey(0);
    getchar();
    return 0;
}