续 – 车牌检测

继续这个主题:

什么是车牌检测的好算法?

我已经开发了我的图像处理技术,以尽可能地强调车牌,总体而言我很满意,这里有两个样本。

替代文字

替代文字

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

到目前为止,我的想法是循环遍历图像中的每个像素(对于基于img宽度和高度的循环)。从每个像素与颜色列表进行比较,从中检查算法以查看颜色是否保持区分许可证盘子白色,和黑色的文字。 如果这恰好是真的,则这些像素被内置到内存中的新位图中,然后一旦停止检测到该模式就执行OCR扫描。

我很欣赏这方面的一些意见,因为它可能是一个有缺陷的想法,太慢或太密集。

谢谢

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

在某些时候,你会想要一个二进制图像,比如说对应于“非字符”标签的黑色像素,以及对应于“is-a-character”标签的白色像素。 也许最简单的方法是使用阈值函数。 但是,如果已经以某种方式强调了角色,那只会很好。

正如你在其他post中提到的那样,你可以使用黑帽算子来做到这一点,结果是这样的:

黑帽操作后的图像

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

替代文字

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

替代文字

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

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

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

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

颜色和外观一样好,在遮阳和光线条件下会带来很多挑战。 真的取决于你想要多大程度的强大,但现实世界的案例必须处理这些问题。

我已经对道路录像进行了研究(请参阅我的个人资料页面并查看此示例 )并发现现实世界的道路镜头在光线条件下非常嘈杂,并且您的颜色可以从棕色变为白色以获得黄色背景 -数板。

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

我建议你做一个关于这个主题的文献综述,但这是在1993年实现的(如果我没记错的话),所以会有成千上万的文章。

这是一个非常科学的领域,所以只是一个算法无法解决它,你将需要许多前/后处理步骤。

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

哈里斯特征检测可以提供重要的边缘,但如果汽车是浅色的,这将无法工作。

如果您有大量样本,可以尝试检查由Paul Viola和Michael Jones开发的人脸检测方法。 这对于人脸检测很有用,也许它可以在车牌检测中做得很好(特别是如果与其他方法相结合)