21夜间车牌识别(matlab程序)

您所在的位置:网站首页 图像识别车牌把1识别成i 21夜间车牌识别(matlab程序)

21夜间车牌识别(matlab程序)

2024-07-14 05:15| 来源: 网络整理| 查看: 265

1.简述

      

简单说一下实现思路:

读取图片,转灰度,计算灰度直方图,估算阈值(这里的阈值计算很重要,经过阈值算法,选取一个最恰当的阈值),之后二值化。显示图像即可。

实现目标

输入一张车牌图片,实现车牌定位,字符切割和字符识别三步骤。同时可以根据需要,做成库外识别,语音播报,出入库等功能。

设计步骤:

所设计的车牌识别的流程包括图像预处理,车牌分割,字符分割,及字符识别。详见matalb程序。

 

程序讲解

1)第一部分为图像的预处理。

此部分借鉴了别人的程序,将灰度图像以sobel算子检测边缘;再对边缘图像进行腐蚀,去除掉细的,间断的边缘;对剩下的区域进行闭合以填充图像,此时可以看到车牌区域形成了一个大的连通域;调用bwareaopen函数去掉小的连通域,此时整个二值图像只b剩下了车牌区域为1。如下图所示:

 

fb7cdc56f13d663cf102ed5e42fbd3ae.png

 

 

第二部分为车牌的提取

此部分的工作为将上一步的白色区域取出,其对应的就是车牌区域。设计思路如下:首先将二值图像f中所有为1的点的坐标放入数组location_of_1中,对这些坐标遍历计算,寻找x坐标与y坐标之和最大的点a与最小的点b,a即为车牌的左上角,b为车牌的右下角。通过这两个坐标将车牌分割出来,并对灰度车牌图像以OTSU算法进行自适应二值化分割。最终效果如下:

 

80db0d5bbe9d5473929c1bdaf63c2706.png

 

 

 

第三部分为字符分割

此部分的工作是将车牌里的7个字符分别提取出来。方法如下:对该二值图从左向右像按列z遍历,计算每一列之和,没有白点的列和为0,有白点的列和非零,转换为逻辑1,记录下所有列和在0与1转换的列,即为需要切割的列,共有14列,可切出7个字符。切割出单个字符后,放入char_(i)中,并切割掉每个字符的上下的空白区域,完成精确切割,效果如下:

 

 

7c54ff222e9ca98e47ccfc9da0432f6b.png

 

 

 

第四部分为字符的识别

识别的方法主要有模板匹配字符识别算法,统计特征匹配算法,神经网络字符识别算法和支持向量机模式识别算法。由于分割的字符效果较好,为明显畸变,模k板维数低(32*16),且因为时间关系,这里采用了模板匹配识别算法。该程序把切割出的字符与库里的汉字和字符的模板做减法运算,找到差别点最少的模板为对应模板,输出该模板对应的字符,最后识别出其为“京JX9168”。如下:

5c7c8cb3f8a852e3dd666e00b7b9bf40.png

2.代码

 

clear all clc PS=imread('1.jpg');  subplot(1,2,1); imshow(PS)                                              title('原图') p=rgb2gray(PS); subplot(1,2,2) imshow(p) title('原灰度图')

[m,n]=size(p);   GP=zeros(1,256);        for k=0:255 GP(k+1)=length(find(p==k))/(m*n);   end figure subplot(1,2,1); bar(0:255,GP,'g')                           title('原灰度直方图')

max_index=[]; for i=3:length(GP)-2 if((GP(i)>=GP(i+1))&(GP(i)>=GP(i-1)))&((GP(i+1)>=GP(i+2))&(GP(i-1)>=GP(i-2))) max_index(end+1)=i-1; end end possible=GP(max_index); [max_value,index]=max(possible); TT=max_index(index)-2;

[m,n]=size(p); R=zeros(m,n); for i=1:m     for j=1:n         if p(i,j)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3