在Python中使用模板字符识别车牌字符

时间:2021-02-28 20:55:39

标签: python-3.x image-processing character detection image-recognition

对于大学项目,我必须识别车牌上的字符。我必须使用 python 3 来做到这一点。我不允许使用 OCR 函数或使用使用深度学习或神经网络的函数。我已经达到了能够从车牌中分割字符并将它们转换为统一格式的程度。这里有几个分段字符的例子。 Segmented Characters

分割字符的格式非常依赖于输入。但是,我可以使用 opencv 轻松将其转换为统一尺寸。此外,我有一组模板字符和数字,可用于预测它是什么字符/数字。

Same Size Numbers

Same Size Letters

因此我需要一个度量来表达分割字符和参考图像之间的相似性。这样,我可以说相似度得分最高的参考图像与分割的字符匹配。我尝试了以下方法来计算相似度。

对于这些操作,我确保参考字符和分段字符具有相同的尺寸。

  • 按位异或运算符
  • 反转参考字符并逐个像素地比较它们。如果像素匹配,则增加相似度分数,如果像素不匹配,则减少相似度分数。
  • 使用'imagehash'对分段字符和参考字符进行散列。因此比较哈希值,看看哪些最相似。

这些方法都不能成功地为我提供对所有字符的准确预测。大多数字符通常被正确预测。但是,该程序始终会混淆 8-B、D-0、7-Z、P-R 等字符。

有人知道如何预测分段字符吗? IE。定义更好的相似度得分。

编辑:不幸的是,此分配不允许使用 cv2.matchTemplate 和 cv2.matchShapes...

1 个答案:

答案 0 :(得分:0)

比较两幅图像的一般程序包括从两幅图像中提取特征并进行后续比较。您在前两种方法中实际所做的是将每个像素的值视为一个特征。因此,相似性度量是在非常高维空间上的距离计算。然而,这种方法会受到噪声的影响,这需要非常大的数据集才能获得可接受的结果。

出于这个原因,通常会尝试降低空间维度。第三种方法我不熟悉,不过好像是往这个方向走的。

降低空间维度的一种方法是定义一些对您面临的问题有意义的自定义特征。

字符分类问题的一种可能性是定义测量输入图像对字符的策略子形状(上水平线、下水平线、图像上半部分的圆圈、对角线等)。 您可以定义一组最小的形状,这些形状组合在一起可以生成每个字符。然后,您应该通过测量原始图像对该特定形状的响应(,将输入图像的信号整合到形状内)来为每个形状检索一个特征。最后,您应该通过在这个较小的特征空间中取最近的参考点来确定图像所属的类。

相关问题