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

时间:2016-10-13 09:17:01

标签: opencv image-processing

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

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

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

示例:

A:

enter image description here

B:

enter image description here

4 个答案:

答案 0 :(得分:1)

您需要删除比例和旋转。

要移除旋转,请使用pca(可为您提供主轴),并旋转两个图像,使主轴沿x。 (使用剪切旋转)。要删除刻度,您可以简单地取一个边界框,或者如果那里有一点噪音,取区域并缩放一直到它相等。只需对像素中心进行缩放(有点icky,但很难很好地缩放二进制图像)。

我应该为二进制图像库提供一些支持。您可能会发现该材料很有用

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

3 /在调整后的图片上,您可以应用SIFTBRISKSURF功能来获取功能

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

请参阅以下链接了解更多详情:

scale and rotation Template matching