计算 2 个二值图像的相似度

Posted

技术标签:

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

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

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

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

例子:

答:

乙:

【问题讨论】:

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

【讨论】:

以上是关于计算 2 个二值图像的相似度的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV二值图像案例分析精选 | 第二期

求助,如何对两幅二值图像进行相似度匹配

图像类型分类

python图像处理(二值化)

python图像处理(二值化)

如何用matlab计算二值化图中白色区域的像素点个数