在我的项目中,我需要与图像进行比较。一张图片显示渲染模型,另一张图片是照片,其中显示了模型中表示的真实对象。我真正想要的是:
- 该算法必须比较两个图像并返回一个描述相似性的数字。比方说,数字越小,图像就越好。
- 两个图像都表示为二进制图像,其中仅包含真实渲染图像/照片的轮廓/边缘。
- 照片中的对象比渲染图像多得多。所以我只想检查渲染对象的视点是否与照片中真实对象的视点几乎相同。 (示例:一辆汽车被建模,因此它近似于一辆真车。我从一个特殊的位置和方向拍摄了一张真车的照片。现在我想检查一下,如果我的虚拟相机的位置和方向看着渲染车几乎相同,比我现实生活中的相机的位置和方向)。解决方案只是将渲染图像的白色像素与照片的像素(作为边缘图像)进行比较。其他像素不感兴趣。
- 图像比较的返回值应该越小,虚拟相机的方向和位置越适合真实相机的方向和位置。
我尝试计算两幅图像的欧几里得距离,但只有当像素彼此完全吻合时,结果才好。现在我正在寻找替代品。
直到现在我都考虑使用归一化互相关,但我真的不知道它是否适合我的任务。
问题是,归一化互相关是否值得一试,或者是否有更好的方法来解决我的问题!
算法应该尽可能快,因为我比较了很多图像。
非常感谢
感谢您的建议。我有点困惑,因为归一化互相关和 Haussdorff 距离似乎有助于在大图片中找到小模式。
问题是:这两种算法是否也适用于比较 2 张相同大小的图片?
这是必须比较的 2 张图像的示例。目前,我每秒比较大约 120 张图片对。
太糟糕了,我不能以新用户的身份发布图片。所以这是直接链接: http://s14.directupload.net/file/d/2674/t8qzbq9i_png.htm
最佳答案
以 Hausdorff 距离为起点进行实验怎么样?总体思路和c实现here .文章在这里:
Comparing images using the Hausdorff distance, by DP Huttenlocher - 1993.
关于image - 如何比较两个边缘图像(在 OpenCV 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7715407/