续 - 车牌检测

Posted

技术标签:

【中文标题】续 - 车牌检测【英文标题】:Continued - Vehicle License Plate Detection 【发布时间】:2011-06-11 06:11:55 【问题描述】:

从这个线程继续:

What are good algorithms for vehicle license plate detection?

我开发了我的图像处理技术来尽可能地强调车牌,总的来说我很满意,这里有两个示例。

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

到目前为止,我的想法是遍历图像中的每个像素(基于 img 宽度和高度的循环)由此将每个像素与颜色列表进行比较,由此检查算法以查看颜色是否保持区分在车牌白色和文字的黑色之间。如果发生这种情况,这些像素会被构建到内存中的新位图中,那么一旦停止检测到这种模式,就会执行 OCR 扫描。

我很感激对此的一些意见,因为这可能是一个有缺陷的想法,太慢或太密集。

谢谢

【问题讨论】:

当我开车经过你们的一台机器时,你们会给我一张交通罚单吗? 哈哈,这只是一个 uni 项目,幸运的是我可以选择我测试的图像 :) 【参考方案1】:

您的“查看颜色是否不断区分车牌白色和文本的黑色”的方法基本上是寻找像素强度从黑色变为白色的区域,反之亦然。边缘检测可以完成基本相同的事情。但是,实现自己的方法仍然是一个好主意,因为您将在此过程中学到很多东西。哎呀,为什么不两者都做,并将您的方法的输出与一些现成的边缘检测算法的输出进行比较?

在某些时候,您会想要一个二值图像,例如黑色像素对应于“非字符”标签,白色像素对应于“是字符”标签。也许最简单的方法是使用阈值函数。但这只有在角色已经以某种方式强调的情况下才会有效。

正如您在另一个帖子中提到的那样,您可以使用黑帽运算符来执行此操作,结果如下:

如果您使用 Otsu 方法(自动确定全局阈值级别)对上面的图像进行阈值处理,您会得到:

有几种方法可以清理该图像。例如,您可以找到连接的组件并丢弃那些太小、太大、太宽或太高而不能成为角色的组件:

由于图像中的字符相对较大且完全连接,因此此方法效果很好。

接下来,您可以根据邻居的属性过滤剩余的组件,直到您拥有所需数量的组件(= 字符数)。如果您想识别字符,您可以计算每个字符的特征并将它们输入到分类器,该分类器通常使用监督学习构建。

当然,上述所有步骤只是一种方法。

顺便说一句,我使用 OpenCV + Python 生成了上面的图像,这是计算机视觉的绝佳组合。

【讨论】:

感谢您的回复,非常感谢。 OpenCV 看起来确实很棒,但我宁愿从中拿走一些东西,也不愿调用几个库函数呵呵。你给了我一些信心去真正去做。简单地反转我的图像也会产生非常好的结果,所以一旦我完成了这些图像处理方法,我可能会离开:)。【参考方案2】:

颜色,尽管看起来不错,但在阴影和光照条件下会带来相当多的挑战。真的取决于你想让它变得多么健壮,但现实世界的案例必须处理这些问题。

我对道路镜头进行了研究(请参阅我的个人资料页面并在此处查找sample)并发现现实世界的道路镜头在光线条件下非常嘈杂,并且您的颜色可能会从棕色变为白色黄色的后车牌。

大多数算法都使用线检测并尝试找到宽高比在可接受范围内的框。

我建议您对该主题进行文献综述,但这是在 1993 年完成的(如果我没记错的话),因此会有数千篇文章。

这是一个相当科学的领域,因此仅靠算法无法解决它,您将需要大量的前/后处理步骤。

简而言之,我的建议是使用霍夫变换来查找线条,然后尝试查找可以创建可接受的纵横比的矩形。

Harris 特征检测可以提供重要的边缘,但如果汽车是浅色的,这将不起作用。

【讨论】:

为答复干杯,我仍然可以试一试上面描述的方法,因为我真的找不到任何关于霍夫变换方法的伪代码。无论如何,谢谢! 您不必自己去实现 hough - 使用 OpenCV,尽管我曾经为作业这样做过。我认为如果你需要做严肃的计算机视觉,你必须考虑使用 OpenCV,它非常易于使用并实现了 Hough,以及许多其他有用的东西,而且速度非常快。 是的,我想远离使用库,但我想我别无选择。 很抱歉打扰您,但是您认为我描述的方法没有实施意义吗?只是该应用程序将使用我个人选择的图像,而不是来自视频源。 抱歉回复晚了。无论如何都要调查那条路线,尽管我认为成功是有限的。它至少会让您更加熟悉计算机视觉的挑战。早在 2004-5 年,我就在寻找算法来做聪明的图像处理。我做得越多,我就越意识到我需要的不仅仅是一个算法,这就是我在 2006 年报名参加 DSIP 的兼职课程的原因,我设法在 2008 年完成。这类东西真的需要非常科学的工具你只能在 C++ 库中找到。【参考方案3】:

如果您有很多样本,您可以尝试检查 Paul Viola 和 Michael Jones 开发的人脸检测方法。这对人脸检测很有用,也许它可以很好地用于车牌检测(尤其是与其他方法结合使用时)

【讨论】:

我不明白为什么这被否决了,基本上 Tomasz 是对的,有一篇很好的文章介绍了使用 viola 和 jones 对象检测实现的系统Real-Time License Plate Recognition on Embedded DSP-Platform。 opencv 中的示例here

以上是关于续 - 车牌检测的主要内容,如果未能解决你的问题,请参考以下文章

智能驾驶 车牌检测和识别《YOLOv5实现车牌检测(含车牌检测数据集和训练代码)》

智能驾驶 车牌检测和识别《YOLOv5实现车牌检测(含车牌检测数据集和训练代码)》

智能驾驶 车牌检测和识别《Android实现车牌检测和识别(可实时车牌识别)》

智能驾驶 车牌检测和识别《Android实现车牌检测和识别(可实时车牌识别)》

智能驾驶 车牌检测和识别《C++实现车牌检测和识别(可实时车牌识别)》

智能驾驶 车牌检测和识别《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码)》