车牌识别算法实现及其代码实现之一:车牌区域检测

本文地址:http://blog.csdn.net/shanglianlm/article/details/78005815

本文主要处理汽车车牌的识别过程,包括三个步骤,一:车牌区域检测,本文利用车牌的颜色和形状特征确认并获取汽车的车牌位置,二:字符分割,将获取到的汽车车牌按不同字符进行切割,三:车牌识别,最后利用神经网络对切割的字符进行识别达到最终的车牌识别。

一 车牌区域检测
1 首先读入我们要识别的车辆图片,灰度化后,我们使用robert算子对其进行边缘检测;如下图
车牌识别算法实现及其代码实现之一:车牌区域检测_第1张图片

代码如下:

file='2.jpg';
I=imread(file);
I1=rgb2gray(I);
I2=edge(I1,'roberts',0.08,'both');

2 接着我们对图像进行腐蚀,除去图像中一些不必要的信息,然后我们再对图像进行闭合操作使其区域平滑。

车牌识别算法实现及其代码实现之一:车牌区域检测_第2张图片
代码如下:

se=[1;1;1];
I3=imerode(I2,se);
se=strel('rectangle',[40,40]);%生成一个矩阵
I4=imclose(I3,se);  %闭运算

由此,我们根据图像的形状可以获取到这些信息。
3 这里我们主要处理小型汽车,即车牌规格为: 440×140 蓝底白字白框线,因此我们获取图像中的蓝色区域,同时腐蚀再闭合,与我们第二步中得到的图像求并,但是我们可以还留存一些小的无用区域,我们还需要对获得的图像进行过滤,去掉小的结构,即得到我们所要获取的车牌区域,如下图
车牌识别算法实现及其代码实现之一:车牌区域检测_第3张图片

代码如下:

I5=removeByColor(I4,I,'12');
I6=bwareaopen(I5,2000);

4 最终获得的车牌区域如下
这里写图片描述

代码如下:

[a,b]=find(I6>0);
I7 = I1(unique(a),unique(b));
I8 = I(unique(a),unique(b),:);

5 获取到的图像可能会有一定的倾斜,我们还需要对其校正,我们可以使用Radon transform在0-180度上找到图像可能最大的倾斜角度, 然后对图像校正,如上图。

其他代码如下:
获取颜色线索

 function im = removeByColor(image,I,removedColor)
        % image: 灰度图 x*y
        % I: 原始图像 x*y*3
        % removedColor:要移除的颜色 1 蓝色、2 黄色、3 白色、4 黑色 默认蓝黄 12
        if nargin < 3
            removedColor = '12';
        end
        %大型汽车 440×140 黄底黑字黑框线 
        %小型汽车 440×140 蓝底白字白框线
        diff_Y=0; diff_B=0;
        
        %获取蓝色
        Image_B=I;
        IR = Image_B(:,:,1);IG = Image_B(:,:,2);IB = Image_B(:,:,3);
        XYB=~((IB-IR)>diff_B&(IB-IG)>diff_B);  % 提取蓝色条件是B分量与G、R分量差值大于设定
        IR(XYB)=255; IG(XYB)=255; IB(XYB)=255;  % 使得非蓝色区域变为灰色
        Image_B(:,:,1)=IR; Image_B(:,:,2)=IG; Image_B(:,:,3)=IB;
        
        Image_B_gray=rgb2gray(Image_B);
        stre=[1;1;1];
        Image_B_erode=imerode(Image_B_gray,stre);
        stre=strel('rectangle',[20,20]);%生成一个矩阵
        Image_B_new=imclose(Image_B_erode,stre);  %闭运算
        
        thresh = graythresh(Image_B_new);     %自动确定二值化阈值
        bw_Image_B = im2bw(Image_B_new,thresh);       %对图像二值化
        im = (~bw_Image_B)ℑ
    end

最后显示

figure(1),
subplot(3,3,1),imshow(I),title('原图');hold on;
subplot(3,3,2),imshow(I1),title('灰度图');hold on;
subplot(3,3,3),imshow(I2),title('robert算子边缘检测');hold on;
subplot(3,3,4),imshow(I3),title('腐蚀后图像');hold on;
subplot(3,3,5),imshow(I4),title('平滑图像的轮廓');hold on;
subplot(3,3,6),imshow(I5),title('加入颜色线索');hold on;
subplot(3,3,7),imshow(I6),title('从对象中移除小对象');hold on;
subplot(3,3,8),imshow(I7),title('车牌对象');hold on;
subplot(3,3,9),imshow(I8),title('获取到的车牌');hold on;

你可能感兴趣的:(Machine,Learning,Code)