【问题标题】:Compute similarity of 2 binary images计算 2 个二值图像的相似度
【发布时间】:2016-10-13 09:17:01
【问题描述】:

我有 2 张二值图像(黑白)。它们具有相同的内容,但在内容(文本)的旋转/翻译和缩放方面可能略有不同。

如何在 OpenCV 中获得 2 张图像相似度的简单度量?

操作需要尽可能快(实时)。

例子:

答:

乙:

【问题讨论】:

  • 一些示例图片可能会有所帮助
  • 尝试使用 SIFT 或 SURF 在图像中找到相同的点。然后计算一个仿射变换,将图像相互调整并计算差异幅度的总和
  • @meetaig 对我来说听起来一点也不简单;)
  • 是的,但是大部分功能已经在 opencv 中实现了。如果您了解图像相对于彼此的位移,您可以使用它。但是当您有一组坐标时,您可以使用getAffineTransform 直接获取您需要的变换;)
  • 获取两个文本的minAreaRect,将一个扭曲到另一个,计算absdiff,总结差异。这将是衡量差异的指标。这会相当快

标签: opencv image-processing


【解决方案1】:

您需要移除缩放和旋转。

要移除旋转,请使用为您提供主轴的 pca,然后旋转两个图像,使主轴沿着 x。 (使用剪切旋转)。要删除比例,您可以简单地取一个边界框,或者,如果那里有一点噪音,取面积并缩放一个,直到它相等。只需对像素中心进行采样以进行缩放(有点麻烦,但很难很好地缩放二值图像)。

我应该在二进制图像库中为此提供一些支持。您可能会发现这些材料很有帮助

http://malcolmmclean.github.io/binaryimagelibrary/

【讨论】:

    【解决方案2】:

    您可以使用LogPolarFFT registration algorithm 注册图像,然后使用相似性检查(PSNR or SSIM)进行比较。

    【讨论】:

      【解决方案3】:

      我能想到的一种方法是使用 SIFT/SURF 找到关键点,然后计算两个图像之间的 Homography 并根据计算出的 Homography 扭曲它们(以修复旋转和平移)。然后,您可以简单地根据 SAD 计算相似度。

      【讨论】:

        【解决方案4】:

        需要使用旋转和缩放不变的方法。在需要特征提取之前还需要基于阈值的区域分割。我建议按照以下步骤操作:

        1/二进制阈值&扫描线算法可用于分割特定文本行区域。

        2/ 分割后,您应该使用 warpAffine 变换调整旋转。看到这个example

        3/ 在调整后的图像上,您可以应用 SIFTBRISKSURF 特征来获取特征

        4/ 使用模板匹配方法匹配或生成相似度或距离分数。

        查看以下链接了解更多详情:

        scale and rotation Template matching

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-01
          • 2011-05-27
          • 1970-01-01
          • 1970-01-01
          • 2012-07-20
          • 2011-02-28
          • 2015-11-12
          相关资源
          最近更新 更多