持续 - 车牌识别技术

11

延续这个主题:

有哪些好的算法可用于车牌检测?

我已经开发了我的图像处理技术,尽可能强调车牌,并且总体上感到满意,以下是两个示例。

alt text

alt text

现在来到最困难的部分,实际检测车牌。我知道有一些边缘检测方法,但我的数学水平很差,所以无法将一些复杂的公式翻译成代码。

我目前的想法是遍历图像中的每个像素(基于图片宽度和高度的for循环),从中将每个像素与颜色列表进行比较,然后检查算法是否保持将颜色区分为车牌白色和文本黑色。如果确实如此,这些像素将被构建成内存中的新位图,然后一旦停止检测到该模式,将执行OCR扫描。

如果这个想法存在缺陷、速度慢或效率低,我希望能够获得一些意见。

谢谢


3
当我经过你的机器时,你会给我开罚单吗? - DOK
哈哈,不,这只是一个大学项目,幸运的是我可以选择要测试的图片 :) - Ash
3个回答

5
你的“查看颜色是否保持区分车牌白色和黑色文字”方法基本上是搜索像素强度从黑色到白色反复变化的区域。边缘检测可以实现基本相同的功能。然而,实现自己的方法仍然是一个好主意,因为这样你会在过程中学到很多知识。为什么不两者都做,然后将你的方法输出与某些现成的边缘检测算法进行比较呢?
在某些时候,你可能想要拥有一个二进制图像,例如黑色像素对应于“非字符”标签,而白色像素对应于“是字符”标签。也许最简单的方法是使用阈值函数。但是,只有在字符已经以某种方式被强调的情况下,这种方法才能有效地工作。
正如其他帖子中提到的那样,你可以使用黑帽运算符来完成这项工作,其结果类似于以下内容:
如果你使用Otsu的方法(自动确定全局阈值级别)对上面的图像进行阈值处理,你会得到以下结果:
有几种方法可以清理该图像。例如,你可以找到连接的组件并丢弃那些太小、太大、太宽或太高而无法成为字符的组件:
由于你的图像中的字符相对较大且完全连接,因此该方法效果很好。
接下来,你可以基于邻居的属性过滤剩余的组件,直到获得所需数量的组件(=字符数)。如果你想识别字符,那么你可以为每个字符计算特征并将其输入分类器,通常使用监督学习构建。
当然,上述所有步骤只是其中一种方法。
顺便说一下,我使用OpenCV + Python生成了上面的图像,这是计算机视觉的绝佳组合。

感谢您的回复,非常感激。OpenCV看起来确实很棒,但我宁愿从中学到一些东西,而不是仅仅调用几个库函数。您给了我一些信心去真正尝试一下。简单地反转我的图像也可以产生非常好的结果,所以在完成这些图像处理方法之后,我可能会继续使用它。 :) - Ash

3
颜色,无论看起来多好,都会在阴影和光线条件下带来很大的挑战。这取决于你想要让它有多健壮,但真实世界的情况必须处理这些问题。
我已经对道路录像进行了研究(请查看我的个人资料页面,并在此处查看示例),发现真实世界的道路录像在光线条件方面非常嘈杂,你的颜色可以从棕色变成白色,用于黄色背号牌。
大多数算法使用线检测并尝试找到一个长宽比在可接受范围内的框。
我建议您对该主题进行文献综述,但这是在1993年就已经实现了(如果我记得正确的话),因此将会有成千上万的文章。
这是一个相当科学的领域,所以仅凭算法是无法解决问题的,您需要进行大量的预/后处理步骤。
简而言之,我的建议是使用霍夫变换来查找线条,然后尝试寻找可以创建可接受长宽比的矩形。
哈里斯特征检测可以提供重要的边缘,但如果汽车颜色浅色,则无法使用。

谢谢回复,我可能还是会尝试上面描述的方法,因为我真的找不到关于Hough变换方法的伪代码。无论如何,谢谢! - Ash
你不必自己实现霍夫变换 - 使用OpenCV即可,尽管我曾经为了一个作业而这样做。我认为如果你需要进行严肃的计算机视觉工作,你必须考虑使用OpenCV,它非常容易使用并实现了霍夫变换和许多其他有用的功能,并且速度非常快。 - Aliostad
是的,我本来想避免使用库,但看来我没有太多选择。 - Ash
抱歉打扰您,但您认为我描述的方法实施起来是毫无意义的吗?只是应用程序将使用我个人选择的图像,而不是来自视频源。 - Ash
抱歉回复晚了。请尽管探索那条路线,虽然我认为成功的可能性会受到限制。这至少会让您更加熟悉计算机视觉的挑战。早在2004-2005年,我正在寻找算法来进行聪明的图像处理。我做得越多,越发现我需要不仅仅是一个算法,这就是我在2006年报名参加DSIP兼职课程的原因,最终在2008年完成了学业。这种东西真的需要非常科学的工具,只能在C++库中找到。 - Aliostad
再次感谢,是的,我完全理解你的意思,我从来没有追求过完美。如果这是为商业系统或其他什么东西,我甚至会考虑我的想法。一旦我取得了一些进展,我会更新这个帖子。 - Ash

1
如果你有很多样本,可以尝试使用Paul Viola和Michael Jones开发的人脸检测方法。它对于人脸检测非常好用,也许结合其他方法后能够很好地进行车牌检测。

我不明白为什么这个被踩了,基本上Tomasz是对的,有一篇很好的文章介绍了一个使用viola和jones对象检测实现的系统嵌入式DSP平台上的实时车牌识别。在opencv中的示例可以在这里找到。 - Mantas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接