【问题标题】:OpenCV and c++ ; compare two binary images and get an output (result )OpenCV 和 c++ ;比较两个二进制图像并获得输出(结果)
【发布时间】:2011-10-20 15:40:48
【问题描述】:

我想比较两个二进制图像并得到一个输出结果。

我该怎么做??

我可以使用 cvSobel() 来做到这一点吗?

二进制图像有白色边缘,有没有办法计算白色像素什么的???

谢谢!

【问题讨论】:

  • 请澄清比较的意思。
  • 我真的不明白你想要做什么。比较两个图像的期望结果是什么?一个图像?一个号码?当然,您可以使用 sobel 过滤器来查找边缘。你想比较两个图像的边缘吗?您是否要进行卷积以检测 egdes 是否相互重叠?

标签: c++ image opencv binary edge-detection


【解决方案1】:

尝试 cv::compare: http://opencv.willowgarage.com/documentation/cpp/operations_on_arrays.html#cv-compare

cv::Mat img1 = ...
cv::Mat img2 = ...
cv::Mat result = ...

int threshold = (double)(img1.rows * img1.cols) * 0.7; 

cv::compare(img1 , img2  , result , cv::CMP_EQ );
int similarPixels  = countNonZero(result);

if ( similarPixels  > threshold ) {
   cout << "similar" << endl;
}

【讨论】:

    【解决方案2】:

    这是我根据以下论文编写的函数。 (应该检查我的代码!将不胜感激!) 需要关注的论文:A J Baddeley:二进制图像的错误度量

    另外作者还有一个统计包,代码可以在里面找到。它被称为“spatstat”www.spatstat.org。要使用 spatstat,首先从 http://www.r-project.org/ 下载 R-Stat。误差度量可用作称为“deltametric”的函数。要查看帮助文件,请输入 help(deltametric)。

    代码说明: 这个函数的输入两个文件名,应该是二进制图片文件!返回值是 Baddeley 错误度量值。 还应该包括 OpenCV 标头和命名空间!

    float baddeleyerror (const char * a_file, const char* b_file)
    {
    Mat A,B,Adist,Bdist,Z;
    double c=5;
    double p=2;
    double nelem;
    double minval, maxval;
    
    A=imread(a_file,0);
    B=imread(b_file,0);
    
    nelem=A.rows*A.cols;
    
    A=A>1;
    B=B>1;
    distanceTransform(A,Adist,CV_DIST_L1,3);
    distanceTransform(B,Bdist,CV_DIST_L1,3);
    
    min(Adist, c, Adist);
    min(Bdist, c, Bdist);
    
    minMaxLoc(Adist, &minval, &maxval, 0, 0);
    Adist.convertTo(Adist, CV_8UC1, 255/maxval, 1);
    
    minMaxLoc(Bdist, &minval, &maxval, 0, 0);
    Bdist.convertTo(Bdist, CV_8UC1, 255/maxval, 1);
    
    pow(abs(Adist-Bdist),p,Z);
    
    return (pow(sum(Z).val[0]/nelem, 1/p));
    }
    

    【讨论】:

      【解决方案3】:

      为什么不使用直接比较? (逐个像素) 无论如何,Sobel 都会带你 O(pixels),因此比较像素与像素不会改变复杂性。

      【讨论】:

        猜你喜欢
        • 2015-05-20
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多