数字图像处理——车牌识别(matlab)

article/2025/9/21 10:36:50

本次大报告利用MATLAB函数功能,设计和实现了一个车牌识别系统。车牌识别系统的基本原理为:将手机拍摄到的包含车辆牌照的图像输入到计算机中进行预处理,再对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,然后将其逐个与创建的字符模板进行匹配,匹配成功后输出车牌号码的数字。车牌识别的工作流程如下图:

图1 车牌识别流程图

一、 图像预处理
预处理的具体操作是规整大小、噪声滤波、规整为统一大小便于后续处理的参数设置,提高定位精确度以及识别正确率。规整大小函数为imresize(I,[row,col])
接着进行图像平滑滤波。RGB图像的平滑滤波,需要将R、G、B三个色道分别提取出来,分别滤波。这里采用3x3的中值滤波算子,对三个色道分别滤波,然后使用cat函数将三色道整合起来。
代码

%% 加载图片
I=imread('Lisence.jpg');
figure(1),imshow(I);title('original image');%显示车牌原图%% RGB 转 Gray
I1=rgb2gray(I);
figure(2),subplot(121),imshow(I1);title('gray image');
figure(2),subplot(122),imhist(I1);title('the histogram of the picture');%% 使用 roberts 算子进行边缘检测
I2=edge(I1,'roberts',0.18,'both');% select the threshold=0.18
figure(3),imshow(I2);title('roberts operator edge detection image');%% 腐蚀操作
se=[1;1;1];
I3=imerode(I2,se);%对图像进行腐蚀操作,即膨胀的反操作
figure(4),imshow(I3);title('corrosion image');%% 平滑图片
se = strel('rectangle',[25,25]);
I4 = imclose(I3,se);%图形聚类、填充图形
figure(5),imshow(I4);title('smoothing image');%% pick out the small objects
I5=bwareaopen(I4,2000);%remove the part smaller than 2000
figure(6),imshow(I5);title('remove the small objects');

图2 载入图片

在这里插入图片描述

在这里插入图片描述

二、 车牌定位
车牌定位依据的是车牌蓝色底色的特点,即颜色区分法,因此,确定车牌底色的蓝色RGB值范围非常重要。先打开一幅车牌图片,查看下车牌底色的RGB值。车牌底色为蓝色,因此B值较高,R和G值较小,初步考虑车牌底色RGB范围应是:R<=RT, G<=GT, B>=BT (RT,GT,BT分别为RGB三色道的颜色阈值)从网络上查询相应资料,并实际取点查看RGB色值,最终确定的判断门限。
在这里插入图片描述
代码

%% 车牌定位
[y,x,z]=size(I5);
myI=double(I5);
tic % begin timing
Blue_y = zeros(y,1); % generate a zero matrix of y*1
for i=1:yfor j=1:xif(myI(i,j,1)==1)Blue_y(i,1)=Blue_y(i,1)+1;endend
end
[temp, MaxY]=max(Blue_y);
PY1=MaxY;
while(Blue_y(PY1,1)>=5&&(PY1>1))PY1 = PY1-1;
end
PY2 = MaxY;
while(Blue_y(PY2,1)>=5&&(PY2<y))PY2 = PY2+1;
end
IY=I(PY1:PY2,:,:);%行方向车牌区域确定
%X方向
Blue_x=zeros(1,x);
for j=1:xfor i=PY1:PY2if(myI(i,j,1)==1)Blue_x(1,j)=Blue_x(1,j)+1;endend
endPX1 = 1;
while(Blue_x(1,PX1)<3&&(PX1<x))PX1=PX1+1;
endPX2=x;
while((Blue_x(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;
endPX1=PX1-1;
PX2=PX2+1;
dw=I(PY1:PY2-8,PX1:PX2,:);
t=toc;
figure(7),subplot(121),imshow(IY),title('Line direction areas');
figure(7),subplot(122),imshow(dw),title('positioning color images');

三、 车牌区域处理
对分割出的彩色车牌图像进行灰度转换、二值化、均值滤波、腐蚀膨胀以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像,对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。

在这里插入图片描述

四、 字符分割
在汽车牌照自动识别过程中,字符分割有承前启后的作用。它在前期牌照定位的基础上进行字符的分割,然后再利用分割的结果进行字符识别。字符识别的算法很多,因为字符之间间隔较大,不会出现字符粘连情况,所以此处理采用的方法为寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割。一般分割出来的文字要进行进一步处理,以满足下一步字符识别的需要。但是对于车牌的识别,并不需要太多的处理就已经可以达到正确识别的目的。在此只进行了归一化处理,然后进行后期处理。

在这里插入图片描述
代码

%% 字符分割与识别
% 车牌的进一步处理
imwrite(dw, 'dw.jpg');
a = imread('dw.jpg');%读取
b = rgb2gray(a);
imwrite(b,'gray_license_plate.jpg');
figure(8);subplot(321),imshow(b),title(车牌灰度图像);
g_max=double(max(max(b)));
g_min=double(min(min(b)));
T=round(g_max-(g_max-gmin)/3); %T为二值化的阈值 
[m,n]=size(b);
d=(double(b)>=T); %d=二值图像
imwrite(d,'binary_license_plate.jpg');
subplot(322),imshow(d),title('before filtering binary license plate');% 均值滤波前
% 滤波
h=fspecial('average',3);
% 建立预定义的滤波算子,average为均值滤波,模板尺寸为3x3
d=im2bw(round(filter2(h,d))); %使用指定的滤波器h对h进行d即均值滤波
imwrite(d,'after_average_license_plate.jpg');
% 对图像进行操作
% 膨胀或腐蚀
se = strel('square',3); % 使用一个3x3的正方形结果元素对象创建的图像进行膨胀
se = eye(2); %eye(n) returns the n-by-n identity matrix 单位矩阵
[m,n] = size(d);%返回矩阵b的尺寸信息,并存储在m,n中
if bwarea(d)/m/n >= 0.365 %计算二值图像中对象的总面积与整个面积相比是否大于0.365d=imerode(d,se); %如果大于0.365则图像进行腐蚀
elseif bwarea(d)/m/n <= 0.235 d = imdilate(d,se); %如果小于则实现膨胀操作
end
imwrite(d,'expansion_or_corrosion_the_license_plate.jpg');
subplot(324),imshow(d),title('expansion or corrosion the license plate');% 字符分割 
% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符,需要分割
% 首先创建子函数qiege和getword,然后调用子程序,将车牌的字符分割并且进行归一化
d = qiege(d);
[m,n]=size(d);
subplot(325),imshow(d),title(n);
k1=1;k2=1;s=sum(d);j=1;
while j~=nwhile s(j)==0j=j+1;endk1=j;while s(j)~=0 && j<=n-1j=j+1;endk2=j-1;if k2-k1>=round(n/6.5)[val,num]=min(sum(d(:,[k1+5:k2-5])));d(:,k1+num+5)=0; % 分割end
end
% 再分割
d=qiege(d);
% 切割出7个字符
y1=10;y2=0.25;flag=0;word1[];
while flag==0[m,n]=size(d);left=1;wide=0;while sum(d(:,wide+1))~=0wide=wide+1;endif wide<y1 %认为是左侧干扰d(:,[1:wide])=0;d=qiege(d);elsetemp=qiege(imcrop(d,[1,1,wide,m]));[m,n]=size(temp);all=sum(sum(temp));two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));if two_thirds/all>y2flag=1;word1=temp; % 第一个字符endd(:,[1:wide])=0;d=qiege(d);end
end[word2,d]=getword(d); % 分割第二个字符
[word3,d]=getword(d); % 分割第三个字符
[word4,d]=getword(d); % 分割第四个字符
[word5,d]=getword(d); % 分割第五个字符
[word6,d]=getword(d); % 分割第六个字符
[word7,d]=getword(d); % 分割第七个字符
figure(9);
subplot(271),imshow(word1),title('1');
subplot(272),imshow(word2),title('2');
subplot(273),imshow(word3),title('3');
subplot(274),imshow(word4),title('4');
subplot(275),imshow(word5),title('5');
subplot(276),imshow(word6),title('6');
subplot(277),imshow(word7),title('7');
[m,n]=size(word1);% 归一化大小为40x20
word1=imresize(word1,[40,20]);
word2=imresize(word2,[40,20]);
word3=imresize(word3,[40,20]);
word4=imresize(word4,[40,20]);
word5=imresize(word5,[40,20]);
word6=imresize(word6,[40,20]);
word7=imresize(word7,[40,20]);subplot(278),imshow(word1),title('1');
subplot(279),imshow(word2),title('2');
subplot(2,7,10),imshow(word3),title('3');
subplot(2,7,11),imshow(word4),title('4');
subplot(2,7,12),imshow(word5),title('5');
subplot(2,7,13),imshow(word6),title('6');
subplot(2,7,14),imshow(word7),title('7');%% 车牌识别
liccode=char(['0':'9', 'A':'Z', '苏豫陕鲁京辽浙']); %建立自动识别字符表
SubBw2=zeros(40,20);
l=1;
for I=1:7ii=int2str(I);t=imread([ii,'.jpg']);SegBw2=imresize(t,[40,20],'nearest');SegBw2=double(SegBw2)>20;if I==1  % 第一个汉字识别kmin=37;kmax=43;elseif I==2 %第二位A~Z字母识别kmin=11;kmax=36;else l>=3    % 第三位以后是字母或数字识别kmin=1;kmax=36;endfor k2=kmin:kmaxfname=strcat('字符模板\', liccode(k2), '.jpg');SamBw2=imread(fname);SamBw2=double(SamBw2)>1;for i=1:40for j=1:20SubBw2(i,jP)=SegBw2(i,j)-SamBw2(i,j);endend% 以上相当于两幅图相减得到第三幅图Dmax=0;for k1=1:40for l1=1:20if(SubBw2(k1,l1)>0 | SubBw2(k1,l1)<0)Dmax=Dmax+1;endendendError(k2)=Dmax;endError1=Error(kmin:kmax);MinError=min(Error1);findc=find(Error1==MinError);Code(l*2-1)=liccode(findc(1)+kmin-1);Code(l*2)='';l=l+1;
end
figure(10),imshwo(dw),title(['车牌号码', Code], 'Color', 'b');

五、 字符识别
模板匹配是图像识别方法中最具代表性的基本方法之一,它将从待识别的图像或者图像区域f(I, j)中提取的若干特征量与模板T(I, j)相应的特征量逐个进行比较,计算它们之间规格化的相互关联,其中互相关联 最大的一个就表示相似程度最高,可将图像归于此类,也可以计算图像与模板特征量之间的距离,用最小距离法判定所属类。
此处采用相减的方法来求得字符与模板中哪个字符最相似,然后找到相似度最大的输出。汽车牌照的字符一般有七个,大部分车牌第一位是汉字,代表车辆所属省份,紧接着其后的为字母和数字,车牌字符识别与一般文字识别的区别在于它的字符数有限,汉字共约50中,大写英文字母26个,数字10个。为了实验方便,结合本次设计所选汽车牌照的特点,只建立了7个数字、26个字母与10个数字的模板。其他模板设计的方法类似。
首先取字符模板,接着依次取待识别字符与模板进行匹配,将其与模板字符相减,得到的0越多那么就越匹配。把每一幅相减后的图的0值个数保存起来,即为识别出来的结果。

在这里插入图片描述

在这里插入图片描述

六、 优化
可以考虑使用HSV颜色空间系统,优化代码,添加图片亮度检测环节,判定图片情景的光照条件,依据光照强度的不同,匹配不同的颜色判断系统,进而优化定位判断;引入边缘检测环节,锁定检测的蓝色区域边界大致为长方形的判断为车牌区域以区分图像中的其他蓝色区域;形态学处理的时候进一步添加标准车牌的字符区与边框大小,边框比例,间隔大小,等参数,优化字符串区域提取环节;字符识别匹配环节中,可增加多套字符模板,添加不同角度的字符样板,多次匹配,提高识别正确率等。

参考:数字图像处理——基于matlab的车牌识别
参考:数字图像处理车牌识别课程设计


http://chatgpt.dhexx.cn/article/t4KE0mR5.shtml

相关文章

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

本文地址&#xff1a;http://blog.csdn.net/shanglianlm/article/details/78005815 本文主要处理汽车车牌的识别过程&#xff0c;包括三个步骤&#xff0c;一&#xff1a;车牌区域检测&#xff0c;本文利用车牌的颜色和形状特征确认并获取汽车的车牌位置&#xff0c;二&#x…

基于OpenCV 的车牌识别

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 车牌识别是一种图像处理技术&#xff0c;用于识别不同车辆。这项技术被广泛用于各种安全检测中。现在让我一起基于OpenCV编写Python代码来完成这一任务。 车牌识别的相关…

车牌号识别 python + opencv

&#xfeff;&#xfeff; 包括算法和客户端界面&#xff0c;只有2个文件&#xff0c;surface.py是界面代码&#xff0c;predict.py是算法代码&#xff0c;界面不是重点所以用tkinter写得很简单。 使用方法&#xff1a; 版本&#xff1a;python3.4.4&#xff0c;opencv3.4和nu…

车牌识别 字符识别

字符结构知识在车牌识别中的应用 来源&#xff1a;电子技术应用 作者&#xff1a;中国科学技术大学 宋建才 摘要&#xff1a;提出了一种完全基于结构知识的字符识别方法。该方法以字符的结构特点和笔画类型、数据及位置作为识别特片生成判定时&#xff0c;再利用判定树对汽车牌…

【深度学习实践】基于深度学习的车牌识别(python,车牌检测+车牌识别)

车牌识别具有广泛的应用前景&#xff0c;基于传统方法的车牌识别效果一般比较差&#xff0c;随着计算机视觉技术的快速发展&#xff0c;深度学习的方法能够更好的完成车牌识别任务。 本文提供了车牌识别方案的部署链接&#xff0c;您可以在网页上体验该模型的效果&#xff1a;车…

C++中文车牌识别检测系统源码

下载地址&#xff1a;C中文车牌识别检测系统源码 其目标是成为一个简单、高效、准确的非限制场景(unconstrained situation)下的车牌识别库。 相比于其他的车牌识别系统&#xff0c;EasyPR有如下特点&#xff1a; 它基于openCV这个开源库。这意味着你可以获取全部源代码&…

车辆检测+车牌识别

车辆检测算法使用YOLOv5实现 自建数据集训练的车辆检测模型&#xff0c;效果还是很棒的 车牌识别使用mtcnn实现车牌检测 lprnet实现车牌号码识别 两者都是pytorch框架 整合在一个工程中实现车辆检测和车牌识别 同时使用pyqt开发可视化界面

智能驾驶 车牌检测和识别(一)《CCPD车牌数据集》

智能驾驶 车牌检测和识别&#xff08;一&#xff09;《CCPD车牌数据集》 目录 智能驾驶 车牌检测和识别&#xff08;一&#xff09;《CCPD车牌数据集》 1. 前言 2.车牌号码说明 3.车牌数据集CCPD &#xff08;1&#xff09;车牌数据集CCPD说明 &#xff08;2&#xff09…

智能驾驶 车牌检测和识别(二)《YOLOv5实现车牌检测(含车牌检测数据集和训练代码)》

智能驾驶 车牌检测和识别&#xff08;二&#xff09;《YOLOv5实现车牌检测&#xff08;含车牌检测数据集和训练代码&#xff09;》 目录 智能驾驶 车牌检测和识别&#xff08;二&#xff09;《YOLOv5实现车牌检测&#xff08;含车牌检测数据集和训练代码&#xff09;》 1. 前…

在线合成车牌照片【模拟车牌,用于车牌识别项目测试】

1、服务发布地址&#xff1a; http://new.hdsxsc.com:10086/server.php?cphm冀DSX888&cpys0 2、传参说明&#xff1a; cphm&#xff1a;车牌号码【仅限合规的车牌号码规则】 cpys&#xff1a;车牌颜色&#xff1a; 0蓝色&#xff0c;1黄色&#xff0c;2白色&#xff0c…

车牌号码识别程序分享

本文参考博客使用opencv进行车牌提取及识别进行。程序部分为网上获取程序修改而来&#xff0c;并在其中加入了自己的注释和理解 采用pythonopencv进行程序编写。 课程设计内容分享 程序下载请前往https://download.csdn.net/download/chenkz123/10841956 一个典型的车辆牌照…

车牌图像识别

1.车牌预处理 车牌预处理过程的好坏直接影响到车牌图像进行后期处理过程&#xff0c;比如车牌字符分割等。车牌预处理也是尽可能的消除噪声&#xff0c;减少后期处理带来的不必要的麻烦。 输入的车牌是24Bit的BMP真彩色图像&#xff0c;车牌照有黄底黑字&#xff0c;蓝底白字…

基于python+OpenCV的车牌号码识别

基于pythonOpenCV的车牌号码识别 车牌识别行业已具备一定的市场规模&#xff0c;在电子警察、公路卡口、停车场、商业管理、汽修服务等领域已取得了部分应用。一个典型的车辆牌照识别系统一般包括以下4个部分&#xff1a;车辆图像获取、车牌定位、车牌字符分割和车牌字符识别 …

TensorFlow进阶:车牌号识别项目

终于算是闲下来点时间了&#xff0c;也不能算闲&#xff0c;该交的报告什么的算完事了。其他要交的东西现在还不急&#xff0c;然后考研的东西现在也不想看&#xff0c;再加上中午没睡好&#xff0c;下午也不想学习新的东西了&#xff0c;就抽出点时间把前段时间做的一个小项目…

数字图像处理--车牌识别

数字图像处理–车牌识别 主要内容 实现车牌识别 算法流程 本文中&#xff0c;车牌识别具体流程设计以及算法使用主要分为以下几步。 1、读取源车牌图像。 2、对原始车牌图像进行预处理&#xff1a;灰度化&#xff0c;运用基于几何运算的滤波器(开运算)消除毛刺噪声。 3、二…

数字图像处理——基于matlab的车牌号识别

希望大家有问题多多评论留言鸭 码字不易&#xff0c;老阿姨头发都没啦&#xff0c;小可爱们记得给三连鸭&#xff0c;么么哒。 &#xff08;只收藏&#xff0c;不点赞&#xff0c;好运连连会中断&#xff01;&#xff01;&#xff01;&#xff09; <--!&#xff08;源码资源…

【OpenCV实战】简洁易懂的车牌号识别Python+OpenCV实现“超详解”(含代码)

前面4篇博客介绍了OpenCV图像处理的基础知识&#xff0c;本篇博客利用前4篇的知识完成一个小项目——车牌号码识别。该篇博客的代码可以满足小区门禁车牌号的识别。本篇博客是前4篇博客知识的一个综合运用。感觉学会了这个可以实现一系列的图像识别任务。。。毕竟好多技巧都是共…

网络安全检测技术

一&#xff0c;网络安全漏洞 安全威胁是指所有能够对计算机网络信息系统的网络服务和网络信息的机密性&#xff0c;可用性和完整性产生阻碍&#xff0c;破坏或中断的各种因素。安全威胁可分为人为安全威胁和非人为安全威胁两大类。 1&#xff0c;网络安全漏洞威胁 漏洞分析的…

深度学习网络安全

Introduction 我们在社区中看到的大多数深度学习应用程序通常面向营销&#xff0c;销售&#xff0c;财务等领域。我们几乎从未阅读过文章或找到有关深度学习的资源用于保护这些产品和业务&#xff0c; 恶意软件和黑客攻击。 虽然像谷歌&#xff0c;Facebook&#xff0c;微软和…

网络安全法学习整理笔记

网络安全法 一、背景 概念 网络&#xff1a;是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息进行收集、存储、传输、交换、处理的系统。网络安全&#xff1a;是指通过采取必要措施&#xff0c;防范对网络的攻击、侵入、干扰、破坏和非法使用以及意…