1

我正在开发一个软件项目,我必须将一组“输入”图像与另一组“源”图像进行比较,并找出它们之间是否存在匹配。不能以任何方式编辑/修改源图像;可以缩放/裁剪输入图像以找到匹配项。图像可以是任何尺寸的 BMP、JPEG、GIF、PNG、TIFF。

一个限制:我不允许使用任何外部库。ImageMagick 是一个例外,可以使用。

我打算使用 Java/Python。该软件纯粹基于命令行。

我正在阅读 SO 和一些常见的图像比较算法。我打算采取两种方法。1. 我可以使用直方图/桶来找出被比较的 2 个图像的 RGB 值。
2. 使用 SIFT/SURF 找到关键点描述符,并找到它们之间的欧式距离,并根据结果距离输出结果。

比较的 2 个图像可以是不同的格式。一个直观的想法是,在分析/比较之前,必须将 2 个图像转换为通用格式。我认为应该将图像转换为质量较低的图像,例如,如果 2 个输入图像是 BMP 和 JPEG,则将 BMP 转换为JPEG。这可以被认为是一个预处理步骤。

我的问题:是否需要将图像转换为通用格式?可以比较两张不同格式的图像吗?如果它们必须在比较之前进行转换,我假设从较高质量(BMP)到较低质量(JPEG)的比较是否正确?如果有人可以建议一些图像转换算法,那也会很有帮助。

编辑
如果在源图像中找到图案图像,则称找到匹配。例如,源图像由一个足球场和一名球员组成。如果图案图像包含的玩家与源图像中的玩家完全一样,那么它是匹配的。

4

1 回答 1

2

不,不需要转换为磁盘上的通用格式,而且可能没有帮助。如果您从图像中提取特征描述符(例如 SIFT/SURF),那么原始图像如何存储在磁盘上就无关紧要了。特征描述符对于小的压缩伪影应该是不变的。


多一点...

假设您有一个 BMP,它是源数据集中对象 X 的图像。

然后,在您的输入/查询数据集中,您有另一个对象 X 的图像,但它已保存为 JPEG。

您不知道在产生这些图像的编码过程中是如何引入什么噪声的。有光照差异、大气效果、镜头效果、传感器噪声、色调映射、色域映射。其中一些因图像而异,另一些因相机而异。所有这些都是在图像保存到相机存储之前完成的。是的,也存在 JPEG 压缩伪影,但假设 BMP 的质量“更高”,然后通过 JPEG 压缩对其进行降级将无济于事。也许 BMP 在保存为 BMP 之前甚至已经经过 JPEG 压缩。

于 2013-01-30T22:32:06.457 回答