gpt4 book ai didi

c# - 如何检查图像是否是另一个图像的缩放版本

转载 作者:太空狗 更新时间:2023-10-30 01:11:04 24 4
gpt4 key购买 nike

我正在寻找一种简单的方法来检查图像是否是另一个图像的缩放版本。它不必非常快,只是应该“相当”准确。并用 .NET 编写。而且是免费的。

我知道,一厢情愿:-)

我很确定,即使没有尝试过,将较大的图像转换为较小的比例并比较校验和是行不通的(尤其是如果较小的版本是使用其他软件然后 .NET 完成的)。

下一个方法是缩小和比较像素。但首先,使用 bool 比较结果在所有像素上运行循环似乎是一个非常糟糕的主意,我确信会有一些像素偏离一点左右......

想到任何图书馆吗?回到大学的时候,我们有一些 MPEG7 类(class),所以我正在考虑使用色调分布、亮度等“统计数据”的组合。

关于该主题的任何想法或链接?

谢谢,克里斯

最佳答案

我认为这将是您的最佳解决方案。首先检查纵横比。如果图像大小不同,则将图像缩放为 2 中较小的一个。最后,对 2 个图像进行哈希比较。这比进行像素比较要快得多。我在其他人的帖子中找到了哈希比较方法,并调整了此处的答案以适合。对于一个我将不得不比较 5200 多张图像的项目,我试图想出最好的方法来自己做这件事。阅读此处的一些帖子后,我意识到我已经拥有了所需的一切,因此我想分享一下。

public class CompareImages2
{
public enum CompareResult
{
ciCompareOk,
ciPixelMismatch,
ciAspectMismatch
};

public static CompareResult Compare(Bitmap bmp1, Bitmap bmp2)
{
CompareResult cr = CompareResult.ciCompareOk;

//Test to see if we have the same size of image
if (bmp1.Size.Height / bmp1.Size.Width == bmp2.Size.Height / bmp2.Size.Width)
{
if (bmp1.Size != bmp2.Size)
{
if (bmp1.Size.Height > bmp2.Size.Height)
{
bmp1 = (new Bitmap(bmp1, bmp2.Size));
}
else if (bmp1.Size.Height < bmp2.Size.Height)
{
bmp2 = (new Bitmap(bmp2, bmp1.Size));
}
}

//Convert each image to a byte array
System.Drawing.ImageConverter ic = new System.Drawing.ImageConverter();
byte[] btImage1 = new byte[1];
btImage1 = (byte[])ic.ConvertTo(bmp1, btImage1.GetType());
byte[] btImage2 = new byte[1];
btImage2 = (byte[])ic.ConvertTo(bmp2, btImage2.GetType());

//Compute a hash for each image
SHA256Managed shaM = new SHA256Managed();
byte[] hash1 = shaM.ComputeHash(btImage1);
byte[] hash2 = shaM.ComputeHash(btImage2);

//Compare the hash values
for (int i = 0; i < hash1.Length && i < hash2.Length && cr == CompareResult.ciCompareOk; i++)
{
if (hash1[i] != hash2[i])
cr = CompareResult.ciPixelMismatch;

}
}
else cr = CompareResult.ciAspectMismatch;
return cr;
}
}

关于c# - 如何检查图像是否是另一个图像的缩放版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3422278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com