c# - 如何检查两个图像是否相同

标签 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;
}

最佳答案

由于尺寸差异,您需要检查这些图像看起来有多相似。

要衡量相似性,您需要相关技术。

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

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

您需要尝试一下,因为您会收到一些错误。但调整阈值可以获得 90% 以上的准确率。

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

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

关于c# - 如何检查两个图像是否相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37136177/

相关文章:

java - 由于位图和空指针,应用程序在图像上传时崩溃

c# - AWS lambda 代理 Swagger 模板集成

c# - 全局静态变量不改变值

c# - 非连续范围的 Excel get_Range 错误

javascript - 尝试创建交替图像横幅,但它无法正常工作

android - 如何在android中组合覆盖位图和捕获的图像?

c# - c#中有没有用于字数统计的库函数?

javascript - 加载图像时显示加载 gif

javascript - laravel 在 javascript 中设置图像源路径错误

android - 带图像的动态壁纸