首页 > 解决方案 > 比较两个包含文本的相似图像

问题描述

我有几对人眼看起来相同的图像,但如果你放大并检查细节 - 它们的像素不同 - 主要是由于不同的渲染。

我正在寻找一种可以判断两个图像是否相同的算法。使用常规的逐像素比较是行不通的,因为存在差异,例如不同的抗锯齿不同的字母间距(这会导致像素偏移)。

另一种可能的情况是,在一个图像中,文本可以是斜体/下划线,而在第二个图像中则不是。

假设是:

以下是 2 个包含相同文本的图像示例,呈现方式略有不同:

在此处输入图像描述

在此处输入图像描述

这是两个不同图像的示例:

在此处输入图像描述

任何帮助将不胜感激!

标签: pythoncomputer-vision

解决方案


很高兴知道您正在运行此过程的目的。我的意思是,下面我建议可能使用 OCR;当然,如果您尝试构建自己的 OCR,我的建议将毫无意义(我预感到您可能正在尝试自动化某种浏览器呈现的 UI 接口)。

您可以通过预阈值或PSNR计算来补偿不同的抗锯齿。这假设字母的位置完全相同。

如果间距不同(甚至更多,如果您有不同的字距并且锯齿不同,那么我认为您最好的选择是分别对两个图像进行 OCR 并比较生成的文本;否则您将不得不分割每个文本行,然后在每个字母处重新对齐图像。基本上,您从图像 1 中获取一个垂直切片,宽度为 1 到 3 个像素;然后获取图像 2 上五个相同大小的不同切片的 PSNR 值,与从 -2 到 +2 的偏移量对齐(比如说);最小 PSNR 将为您提供以下字母的偏移调整和匹配的可靠性。

问题是,如果字母真的不同,您将不再能够可靠地计算图像偏移量,因此您将能够分辨出“HELLO”和“HILLS”不同,但无法量化差异,因为您将失去同步并且无法比较两个 L。除非您尝试使用更大的偏移量重新同步(从 -2 到 +X,其中 X 是较宽字母的宽度,可能是“W”),但这会很昂贵并且仍然容易出错(例如,如果比较“ 13”与字母“B”,或“LI”与“U”,“I.”与“L”等)。


推荐阅读