两个图像之间的差异

时间:2013-05-17 10:40:30

标签: c# opencv image-processing emgucv

使用this图片作为参考我想找到this图片底部的脏点。

我能够将第二张图像转换为相同的比例和方向,现在尝试使用absdiff找到该点,但由于图像不完全匹配,我在diff image上有边缘。

我认为不是在具有相同坐标的像素之间存在差异,而是需要找到像n乘n像素的区域中的最小差异。所以问题是:OpenCV是否有针对该问题的内容和/或是否有更好的解决方案?

编辑:使用thresholderode的解决方案:

public static Image<Bgr, Byte> Diff(Image<Bgr, Byte> image1,
                                    Image<Bgr, byte> image2,
                                    int erodeIterations=2)
{
    return Diff(image1, image2, new Bgr(50, 50, 50), erodeIterations);
}

public static Image<Bgr, Byte> Diff(Image<Bgr, Byte> image1, 
                                    Image<Bgr, byte> image2,
                                    Bgr thresholdColor,
                                    int erodeIterations)
{

    var diff = image1.AbsDiff(image2);
    diff = diff.ThresholdToZero(thresholdColor);
    diff = diff.Erode(erodeIterations);
    return diff;
}

2 个答案:

答案 0 :(得分:3)

不确定OpenCV,但解决这个问题应该不难。对齐这两个图像,找到您已经完成的差异图像。在差异图像上使用NxN滑动窗口,并计算窗口内显着不同的像素数,即忽略多达10个灰度级的差异。在整个图像中找到这些总和的最大值,这应该突出显示您需要的内容。

答案 1 :(得分:1)

你可以创建一个相似性图,其中每个像素将被分配直方图比较值,该值是在聚焦于每个像素的n×b区域上计算的。