在视觉c中比较两个图像的有效方法是什么? 还有哪种格式的图像必须存储。(bmp,gif,jpeg .....)? 请提供一些建议
答案 0 :(得分:2)
你的问题在复杂性方面打开了一堆蠕虫。
如果你想比较两个图像以检查它们 是否相同,那么你需要在文件上执行md5(删除可能会扭曲你的结果的可能的metainfos)。
如果你想比较他们看是否相同,那么这完全是一个完全不同的故事。 “看起来相同”的含义非常宽松(例如,它们是完全相同的图像,但存储有两种不同的文件格式)。为此,您需要高级算法,这将为您提供两个图像相同的概率。不是该领域的专家,我会执行以下“我脑子里发明的”算法:
此算法应对颜色漂移和图像旋转不敏感。也许还缩放(你对该区域进行标准化)。但我重申:不是专家,可能会好得多,它可能会让小猫哭泣。
答案 1 :(得分:2)
如果您要比较的图片具有与众不同的特征,那么PCA是一个很好的方法。你需要什么格式的文件的问题确实无关紧要;你需要将它作为一组数字加载到程序中并进行分析。
答案 2 :(得分:2)
我做了类似的事情来检测来自MJPEG流的移动,并仅在移动发生时记录图像。
对于每个解码图像,我使用以下方法与之前的图像进行比较。
然后只需要调整两个阈值。
我使用System.Drawing.Bitmap进行了比较,但由于我的源图像是jpg,因此存在一些伪像。
如果您打算自己动手,这是一种比较差异的简单方法。
答案 3 :(得分:0)
如果你想确定2个图像在感知上是否相同,我相信最好的方法是使用图像哈希算法。您可以计算两个图像的哈希值,并且您可以使用哈希值来获得它们匹配的置信度。
我获得了一些成功的是pHash,虽然我不知道在Visual C中使用它有多容易。搜索“Geometric Hashing”或“Image Hashing”可能会有所帮助
答案 4 :(得分:0)
严格识别的测试很简单:只需将源图像A中的每个像素与图像B中的相应像素值进行比较。如果所有像素都相同,则图像相同。
但我想不想要这种严格的身份。您可能希望图像“相同”,即使某些转换已应用于图像B.这些转换的示例可能是:
e.g。打印图像并再次扫描可能包括以上所有内容。
简而言之,您必须决定要将哪些转换视为“相同”,然后找到对这些转换不变的图像度量。 (或者,您可以尝试恢复翻译,但如果转换从图像中删除信息,则不可能,例如模糊或剪裁图像)