我有超过 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% 以上的准确率。
如果您想要更数学的方法,请检查维基百科的相关性并尝试实现更好的技术:
关于c# - 如何检查两个图像是否相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37136177/