续 - 车牌检测

Ash*_*Ash 9 c# gdi+ image object-detection computer-vision

继续这个主题:

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

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

替代文字

替代文字

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

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

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

谢谢

car*_*eri 5

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

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

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

黑帽操作后的图像

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

替代文字

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

替代文字

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

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

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

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