ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Matlab-简单的车牌识别并分割(学习笔记)

2020-06-01 22:37:00  阅读:819  来源: 互联网

标签:figure title imshow 笔记 xy Matlab 图像 车牌


Matlab-简单的车牌识别并分割(学习笔记)

因为团队考核遇到题目,费了不少时间完成,将学习的过程记录下来吧。车牌识别分为4个步骤,第一是定位蓝色车牌区域;第二是旋转图像;第三是剪切蓝色车牌图像;第四是分割字符并输出到屏幕。

第一步:定位蓝色车牌区域

%% 定位蓝色车牌区域
f=imread('D:\Myron\个人\照片\5.jpg');
fg=rgb2gray(f);
gray=3*f(:,:,3)-f(:,:,1)-f(:,:,2);
figure,imshow(gray),title('保留蓝色色域');
level=graythresh(gray); %利用Ostu法获取图像的阈值
bw=im2bw(gray,level); %根据Ostu法分割车牌图像
% figure,imshow(bw),title('二值化后的图像');
bw1=bwareaopen(bw,500);%删除面积小于500的区域
% figure,imshow (bw1),title ('删除小面积区域后的图像') ;
se=strel('cube',15);%创建一个边长为15的正方形
bw2=imclose(bw1,se);%闭运算连使整个车牌区域连接在一起
% figure,imshow(bw2),title('进行闭运算后的车牌');`

第二步:旋转图像
在此步骤中我们使用radon变换,具体如何实现可查看其他大牛的详细解释,在这里就不详细描述了,毕竟学习是一个自己探索真理的过程,fighting!

%% 车牌矫正(利用radon变换)
theta=0:179;
r=radon(bw2,theta);
[m,n]=size(r);
c=0;
for i=1:m
    for j=1:n
        if r(1,1)<r(i,j)
            r(1,1)=r(i,j);
            c=j;
        end
    end
end
rot=90-c;
fx=imrotate(f,rot,'crop');
% figure;imshow(fx);title('旋转后的图像');

第三步:剪切蓝色车牌图像
在实现过程中遇到了regionprops函数,真是非常的友好。下面的字符分割我也是使用了这个函数,非常的简洁。

%% 剪切定位车牌区域
s1=regionprops(bw2,'BoundingBox','Centroid') ; %获取车牌矩形区域,即二值图中值为1的矩形框
xy=s1(1).BoundingBox;%获取车牌矩形区域左上角坐标及矩形的长和宽, xy(1)为矩形框左上角的y坐标,xy(2)为矩形框左上角的x坐标
fcrop=f(round(xy(2)):round(xy(2)+xy(4)),round(xy(1)):round(xy(1)+xy(3)),:) ;
% figure,imshow (fcrop),title('定位剪切后的蓝色车牌图像');

第四步:分割字符并输出到屏幕
想用利用regionprops函数进行字符分割,就必须保证每一个车牌字符通过形态学处理后都分别为单独的连通区域,由于我的车牌干扰因素比较多,形态学处理也略微复杂了一些,对于其他干扰因素较少的图像来说,简单处理后就可以使用此函数。然后通过for循环挨个输出。

%% 分割字符
fgray=rgb2gray(fcrop);
level2=graythresh(fgray);
bw3=im2bw(fgray,level2);
% figure;imshow(bw3);title('定位剪切后的二值图像');
se2=strel('line',2,90);
se3=strel('cube',4);
se4=strel('disk',1);
bw3o=bwareaopen(bw3,30);
figure;imshow(bw3o);title('删除小于20面积后的图像');
bw3oe=imerode(bw3o,se4);
figure;imshow(bw3oe);title('二值图像腐蚀后')
bw3oc =imclose(bw3oe,se2);
figure;imshow(bw3oc);title('二值图像闭运算后');
bw4=imclearborder(bw3oc);
figure;imshow(bw4);
bw4d=imdilate(bw4,se3);
bw4d=imdilate(bw4d,se3);
figure;imshow(bw4d);title('膨胀后的图像');
bw5=bwareaopen(bw4d,400);
figure;imshow(bw5);title('删除小于400后的图像');  
s2=regionprops(bw5,'BoundingBox','Centroid');
for i=1:length(s2)
    xy=s2(i).BoundingBox;
    bw6=fcrop(floor(xy(2)):floor(xy(2)+xy(4)),floor(xy(1)):floor(xy(1)+xy(3)),:);
    subplot(1,7,i);imshow(bw6);title(num2str(i));
end

#偷个懒,直接全部一起奉上。嘻嘻
在这里插入图片描述

#原图像
在这里插入图片描述

这次的考核也算是侥幸过关,加入团队,接下来的日子里多多努力吧!希望在看的你们也可以为了选择想要的生活而不断前进,披荆斩棘,最终到达山巅。

#最后附上旅游时拍下的美丽重庆夜景图
在这里插入图片描述

标签:figure,title,imshow,笔记,xy,Matlab,图像,车牌
来源: https://blog.csdn.net/new_sstudent/article/details/106452003

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有