有一天,王老师说,他的车牌识别率可以达到86%(当然,不知道是以什么标准,在怎样的环境下,识别怎样的车牌),我总觉得我能用我的方法做得再好一点。试着写了下面这一个简单的字符分割Script,出来结果后才发现自己是多么幼稚阿··· 这笨方法只能当作入门了。
先说明,这是一个最简单的车牌字符分割程序,结果连我自己都觉得惨不忍睹··· 太打击了。
正如前文提到的,传统LPR通常要求在识别任务前先做一个字符分割。应该算是整个LPR程序中最简单的一步了。只是,就连这么简单的步骤也需要我们的很多考虑,需要牺牲大量的脑细胞来得到个还算说得过去的办法。你看完就知道了。
程序大概分为3步:1、灰度化/二值化/直方图均衡化/归一化大小; 2、去噪; 3、分割。
由于使用MATLAB作为平台,第一步几乎可以以一句话完成。这里不做过多陈述:
bgs_img = filter2(fspecial('average',2),im2bw(histeq(rgb2gray(ori_img)),0.8));
而对于去噪一步,需要花一点心思。不要以为去噪就是传统的高斯、中值滤波之类的东西,在自然环境中,干扰是无穷无尽的。对于我们的车牌识别程序,干扰我们的通常会有光照、车牌上的污点等等,这些干扰通常会使用普通图像处理手段来解决,比如用高斯等平滑滤波,用直方图均衡化等。然而,还有另外一些干扰也要引起我们的注意,就是车牌的边沿、螺丝等等,这些是几乎每个车都有的问题,因此解决这种问题更显得程序的通用性。
给出一个网上摘录下来的车牌(好牌号呀!),我们可以看到,尽管车牌已经比较完美地定位(切割)了出来,但是对于提取纯字符任务来说,我们还面临着边沿、螺丝、空隙等挑战。
在这里尝试采用比较常见的统计手段来解决这个问题:
在得到二值化图像之后,我们可以得到一个二值矩阵(这不废话),当某位置的值等于0的时候,表示该像素点为全黑,反之,则该像素点为纯白。然后我们可以对此二值矩阵分别对行、列进行求和统计。
下一页是代码摘要和详解


近期评论