找到牌照中每个角色的边界框

时间:2011-09-28 10:38:33

标签: c# emgucv

我使用emgu和c#来读取图像中的牌照。边缘检测后,我想找到其中每个字符的边界框,并使用神经网络识别字符。我该怎么做? 感谢

1 个答案:

答案 0 :(得分:2)

因为您可以检测到牌照,所以最简单的方法是查找分界线。我担心我只能从谷歌图片推测伊朗车牌(如果这是你的使用)但是在每个字母之后有一个休息和白色或黄色区域。

查找单个字母的边界框:

您可以查看列的总和以及黄色或白色的峰值,并将其作为分割点。或者你只能将黑色成分或书写相加,在理想的情况下,你将从0开始找到黑色成分,然后返回0,你有你的信。这里可能需要一些适应性很强的统计数据。

[编辑] 从图像中分割牌照。首先查看每列的总和,您会注意到255 *车牌图像高度的峰值。使用此作为您的阈值,找到这些峰的中间,并且您有一个表示字母边缘的点。您可以使用此数据对图像进行分段。

现在,峰值可能在统计上难以可靠地划分,它们不应该只是以防万一。反转图像,使白色为黑色,黑色为白色。在这种情况下再次取列的总和,峰值是字母的位置,现在您寻找从0到> 1的变化,并等到您再次找到0。记录发生这种情况的x位置将为您提供您的信件位置。如果需要,我会给你代码总和的代码,但谷歌也会得到你所需要的统计数据,只需翻译步骤。

另一种方法

将图像划分为单独的正方形或区域以及学生的喜爱的另一种方法是简单地在牌照上扫描面具。因此,您将第一个投资回报率(0,0,100,100)输入您的神经网络(NN),然后沿y轴(0,1,100,100)移动一个。你继续这个直到你读完所有数据。你显然冒着过度检测NN的风险,因为它可以对同一个字母进行多次分类,因此当你对一个字母进行分类时,你总是可以跳过20个像素左右来删除错误的分类。

显然,您需要缩小车牌图像的尺寸,以便更快地使用此方法。我已经看到使用9乘9阵列的准确OCR但是你需要更大的使用你最好的判断20x20应该足够但看看。

[编辑] 效率

哪一个更好?这得看情况。它们都可以工作(取决于NN转换),但是找到单个字母的边界框所涉及的方法很难可靠地设置。通过掩模扫描将所有数据馈送到NN中通常非常可靠,但是效率非常低。如果您处理20 * 20个图像,其中有400个数据点可以输入NN,您必须按照车牌宽度-20来计算。这将为您提供循环中的最大迭代次数。

NN可能需要很长时间才能训练,但也会执行大量数据(取决于NN)。分割每个字母的方法效率更高,因为您在NN上的确非常少,并且可以将更准确的数据提供给您的NN。

您面临的问题是,如果您使用已经内置于EMGU OCR识别中的OCR引擎非常快。正如您将能够在EMGU示例中看到的,确定最佳方法的唯一方法是编写和比较所有3种方法。如果您只需要一个有效的,那么请使用NN,并在那里获得匹配记录,作为您的字母ROI,因为您仍然会知道车牌上的X位置。

对不起,我不能给你一个更直接的答案,哪个最好,但有两个因素会影响事情。

我希望其中一些方法有所帮助,

非常感谢 克里斯