继续这个主题:
What are good algorithms for vehicle license plate detection?
我开发了我的图像处理技术,尽可能地强调车牌,总体来说我很满意,这里有两个样本。
现在是最困难的部分,实际上是检测车牌。我知道有一些边缘检测方法,但我的数学很差,所以我无法将一些复杂的公式转换成代码。
到目前为止,我的想法是遍历图像中的每个像素(基于img宽度和高度的循环)从这个比较每个像素与颜色列表,从中检查算法以查看颜色是否保持区分车牌白色和黑色文本。如果这恰好是真的,那么这些像素将被内置到内存中的新位图中,然后在停止检测到该模式后执行OCR扫描。
我很欣赏这方面的一些意见,因为它可能是一个有缺陷的想法,太慢或太密集。
谢谢
答案 0 :(得分:5)
你的方法是“看看颜色是否区分牌照白色和文字的黑色”基本上是搜索像素强度从黑色变为白色的区域,反之亦然。边缘检测可以完成基本相同的事情。但是,实现自己的方法仍然是一个好主意,因为您将在此过程中学到很多东西。哎呀,为什么不两个都做,并将你的方法的输出与一些现成的边缘检测算法的输出进行比较?
在某些时候,你会想要一个二进制图像,比如对应于“非字符”标签的黑色像素,以及对应于“is-a-character”标签的白色像素。也许最简单的方法是使用阈值函数。但是,只有在某些方面已经强调了角色时,这才会奏效。
正如你在其他帖子中提到的那样,你可以使用黑帽算子来做到这一点,结果如下:
如果您使用Otsu的方法(自动确定全局阈值水平)对上面的图像进行阈值处理,则可以得到:
有几种方法可以清理该图像。例如,您可以找到连接的组件并丢弃那些太小,太大,太宽或太高而无法成为角色的组件:
由于图像中的字符相对较大且完全连接,因此该方法效果很好。
接下来,您可以根据邻居的属性过滤剩余的组件,直到您拥有所需的组件数(=字符数)。如果你想识别这个角色,你可以计算每个角色的特征并将它们输入到分类器中,该分类器通常是用监督学习构建的。
当然,上述所有步骤只是一种方法。
顺便说一句,我使用OpenCV + Python生成了上面的图像,这是计算机视觉的一个很好的组合。
答案 1 :(得分:3)
颜色和外观一样好,在阴影和光线条件下会带来很多挑战。真的取决于你想让它变得多么健壮,但现实世界的案例必须处理这些问题。
我已经对道路录像进行了研究(请参阅我的个人资料页面并查看此处sample),并发现现实世界的道路镜头在光线条件下非常嘈杂,并且您的颜色可能会从布朗变化白色为黄色背号牌。
大多数算法使用线检测并尝试找到宽高比在可接受范围内的方框。
我建议你对这个问题进行文献综述,但这是在1993年实现的(如果我没记错的话),所以会有成千上万的文章。
这是一个非常科学的领域,所以只是一个算法无法解决它,你需要进行大量的前/后处理步骤。
简而言之,我的建议是使用Hough变换来查找线条,然后尝试寻找可以创建可接受的宽高比的矩形。
哈里斯特征检测可以提供重要的边缘,但如果汽车是浅色的,这将无法工作。
答案 2 :(得分:1)
如果您有大量样本,可以尝试检查由Paul Viola和Michael Jones开发的人脸检测方法。这对于人脸检测很有用,也许它可以在车牌检测中做得很好(特别是如果与其他方法结合使用的话)