如何比较两个边缘图像(在OpenCV中)?

时间:2011-10-10 15:51:09

标签: image image-processing opencv compare

在我的项目中,我需要与图像进行比较。一个图像显示渲染模型,另一个图像是照片,其中显示了在模型中表示的真实对象。我真正想要的是:

  • 算法必须比较两个图像并返回一个描述相似性的数字。假设数字越低,图像就越合适。
  • 两个图像都表示为二进制图像,仅包含真实渲染图像/照片的轮廓/边缘。
  • 照片中的对象比渲染图像多得多。所以我只想检查渲染对象的视点是否与照片中真实对象的视点几乎相同。 (例如:一辆汽车被建模,因此它接近真实的汽车。我从一个特殊的位置和方向拍摄真实汽车的照片。现在我想检查一下,我的虚拟摄像机的位置和方向是否看着渲染车与现实生活相机的位置和方向几乎相同。解决方案仅是将渲染图像的白色像素与照片的像素(作为边缘图像)进行比较。其他像素并不有趣。
  • 图像比较的返回值应该越小,我的方向和虚拟相机的位置就越适合真实相机的方向和位置。

我试图计算两幅图像的欧几里德距离,但结果只有当像素完全相互适合时才会有效。现在我正在寻找替代品。

到目前为止,我考虑使用规范化的互相关,但我真的不知道它是否适合我的任务。

问题是,如果规范化的互相关值得尝试,或者有更好的方法来解决我的问题!

算法应该尽可能快,因为我比较了很多图像。

非常感谢


感谢您的建议。我有点困惑,因为标准化的交叉相关和Haussdorff距离似乎有利于在大图中找到一个小图案。

问题是:两种算法是否也适合比较相同尺寸的2张图片?

以下是必须比较的2张图片的示例。目前我正在比较大约120张图片 - 每秒一次。

太糟糕了,我不能以新用户的身份发布图片。所以这是直接链接: http://s14.directupload.net/file/d/2674/t8qzbq9i_png.htm

2 个答案:

答案 0 :(得分:4)

如何以Haussdorff距离作为起点进行试验?总体思路和实施here。文章:

  

Comparing images using the Hausdorff distance,DP Huttenlocher - 1993年。

答案 1 :(得分:1)

您还可以退房cosine similarity。我在检测视频流中的剪辑场景时非常成功地使用了它。基本上,您将整个图像视为一维向量,并继续进行余弦相似性度量。基本上,小角度意味着紧密匹配,而大值意味着存在不匹配。阈值需要对您的数据集进行一些调整,但它可能有效,而且速度非常快。

归一化的互相关应该更加稳健,但需要更多时间。由于您提到需要处理不同的姿势,您还应该查看特征检测和提取解决方案。看看opencv的matcher_simple.cppmatching_to_many_images.cpp样本。这些技术对比例和旋转差异有一定的容忍度。

希望这有用!