如何检查两个图像是一样的

时间:2016-05-10 10:43:06

标签: c# image bitmap

我有超过3000张图片,1500张小图片& 1500大图。 我想检查小图像是否与大图像相同,例如large image & small image

我使用以下代码检查图像但是对所有图像(相同与否)都返回错误结果可以帮助我解决这个问题吗?

    public static bool IsEqual(this BitmapImage image1, BitmapImage image2)
{
    if (image1 == null || image2 == null)
    {
        return false;
    }
    return image1.ToBytes().SequenceEqual(image2.ToBytes());
}

public static byte[] ToBytes(this BitmapImage image)
{
    byte[] data = new byte[] { };
    if (image != null)
    {
        try
        {
            var encoder = new BmpBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(image));
            using (MemoryStream ms = new MemoryStream())
            {
                encoder.Save(ms);
                data = ms.ToArray();
            }
            return data;
        }
        catch (Exception ex)
        {
        }
    }
    return data;
}

1 个答案:

答案 0 :(得分:2)

由于尺寸差异,您需要检查这些图像的相似程度。

要测量相似性,您需要一种相关技术。

我认为最好执行以下步骤:

  • 将大图像调整为小图像的大小
  • 从尺寸调整后的图像的相应x,y像素中减去小图像的每个x,y像素,并将绝对值相加(相对于RGB值)。
  • 将总数除以总像素数
  • 总和是相似度的度量。定义可接受“相似性”量的阈值。

你需要玩一下,因为你会得到一些错误。但是调整阈值可以使你获得90%以上的准确率。

如果您想要更多数学方法,请检查维基百科的相关性并尝试实施更好的技术:

https://en.wikipedia.org/wiki/Correlation_and_dependence

相关问题