在汽车牌照识别中,主要是将牌照部分突出显示出来,去除其他的无效干扰信息。车牌区域的识别是基于以下思想的:分析图像,使用pixval函数来获得牌照的背景色的红、绿、蓝分量亮度值和坐标;通过统计算法找出车牌的范围;通过修剪得到最终图像。

Matlab代码:

clc
clear
filename='car.jpg'; %图片的路径
I=im2gray(filename);%调用自编函数读取图像,如果为彩色图像自动转化为灰度图象;
tic   %计时开始
[height,width]=size(I);         %预处理                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              I_edge=zeros(height,width);  %产生h*w的double类零矩阵
for i=1:width-1                %对每一列进行遍历 I_edge(:,i)=abs(I(:,i+1)-I(:,i));%每列的值赋为原图像中左右两列相减的绝对值(即梯度)
endI_edge=(255/(max(max(I_edge))-min(min(I_edge))))*(I_edge-min(min(I_edge)));% 归一化处理(0~255)
[I_edge,y1]=select(I_edge,height,width); %%%调用select函数,用以选择图像的某个区域BW2 = I_edge;%
%%%%%%%%%%%%%%%%一些形态学处理
SE=strel('rectangle',[10,10]);%创建10*10的建构元素
IM2=imerode(BW2,SE);%腐蚀
IM2=bwareaopen(IM2,20);%删除小面积
IM3=imdilate(IM2,SE);%膨胀%先腐蚀再膨胀,进行了开运算,消除小物体
%%%%%%%%%%%%%%%%%%投影以粗略估计车牌位置
p_h=projection(double(IM3),'h');                %调用projection函数,水平方向
if(p_h(1)>0)p_h=[0,p_h];
end
p_v=projection(double(IM3),'v');                %调用projection函数,垂直方向
if(p_v(1)>0)p_v=[0,p_v];
end
%%%%%%
p_h=double((p_h>5));%水平方向
p_h=find(((p_h(1:end-1)-p_h(2:end))~=0));
len_h=length(p_h)/2;
%%%%%
p_v=double((p_v>5));%垂直方向
p_v=find(((p_v(1:end-1)-p_v(2:end))~=0));
len_v=length(p_v)/2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%粗略计算车牌候选区
k=1;
for i=1:len_hfor j=1:len_vs=IM3(p_h(2*i-1):p_h(2*i),p_v(2*j-1):p_v(2*j));if(mean(mean(s))>0.1)p{k}=[p_h(2*i-1),p_h(2*i)+1,p_v(2*j-1),p_v(2*j)+1];k=k+1;endend
end
k=k-1;
%%%%%%%%%%%%%%进一步缩小车牌候选区
for i=1:kedge_IM3=double(edge(double(IM3(p{i}(1):p{i}(2),p{i}(3):p{i}(4))),'canny'));[x,y]=find(edge_IM3==1);p{i}=[p{i}(1)+min(x),p{i}(2)-(p{i}(2)-p{i}(1)+1-max(x)),...p{i}(3)+min(y),p{i}(4)-(p{i}(4)-p{i}(3)+1-max(y))];p_center{i}=[fix((p{i}(1)+p{i}(2))/2),fix((p{i}(3)+p{i}(4))/2)];p_ratio(i)=(p{i}(4)-p{i}(3))/(p{i}(2)-p{i}(1));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%对上面参数和变量的说明:p为一胞元,用于存放每个图像块的左上和右下两个点的坐标;
%存放格式为:p{k}=[x1,x2,y1,y2];x1,x2分别为行坐标,y1,y2为列坐标
%p_center为一胞元,用于存放每个图像块的中心坐标,p_center{k}=[x,y];x,y分别为行,列坐标
%p_ratio为一矩阵,用来存放图像块的长宽比例
%%%%%%%%%%合并临近区域%%%%%%%
%如果有多个区域则执行合并
if k>1n=0;ncount=zeros(1,k);for i=1:k-1%%%需要调整if条件中的比例%%%需要调整%检查是否满足合并条件if(abs(p{i}(1)+p{i}(2)-p{i+1}(1)-p{i+1}(2))<=height/30&&abs(p{i+1}(3)-p{i}(4))<=width/15)p{i+1}(1)=min(p{i}(1),p{i+1}(1));p{i+1}(2)=max(p{i}(2),p{i+1}(2));p{i+1}(3)=min(p{i}(3),p{i+1}(3));p{i+1}(4)=max(p{i}(4),p{i+1}(4));  %向后合并n=n+1;ncount(n)=i+1;endend%如果有合并,求出合并后最终区域if(n>0)d_ncount=ncount(2:n+1)-ncount(1:n);   %避免重复记录临近的多个区域。index=find(d_ncount~=1);m=length(index);for i=1:mpp{i}=p{ncount(index(i))};  %重新记录合并区域的比例pp_ratio(i)=(pp{i}(4)-pp{i}(3))/(pp{i}(2)-pp{i}(1));     endp=pp;   %更新区域记录p_ratio=pp_ratio;   %更新区域比例记录clear pp;clear pp_ratio;   %清除部分变量end
end
k=length(p);   %更新区域个数
%%%%%%%%%%%%%%合并结束%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%根据区域比例判断是否为车牌区域%%%%%%%%%%%%
m=1;T=0.6*max(p_ratio);
for i=1:kif(p_ratio(i)>=T&p_ratio(i)<20)p1{m}=p{i};m=m+1;end
end
p=p1;clear p1;
k=m-1;   %更新区域数
%%%%%%%%%%%判定结束%%%%%%%%%%%%%%%%%%%%%toc                                  %计时结束clear edge_IM3;clear x; clear y;     % 清空部分变量%%%%%%%%%%%%%%%%显示
figure(1)
imshow(I);title('原始图像')
figure(2)
imshow(IM2);title('腐蚀后图像')
figure(3)
imshow(IM3);title('灰度膨胀后图像')%%%%%%%%%%%%%%%%%显示
figure(4)
for i=1:ksubplot(1,k,i);index=p{i};imshow(I(index(1)-2:index(2),index(3):index(4)));title('车牌图像')
end
%存储车牌图像
if(k==1)imwrite(I(index(1)-2:index(2),index(3):index(4)),'cp.jpg');
End              %将指定的图象文件转化为灰度图象其中的各个子函数介绍如下。
1.I=im2gray(filename)将指定的彩色图像转化为灰度图像。
%将指定的图象文件转化为灰度图象
function I=im2gray(filename)colortype=imfinfo(filename);      %用于获取位图相关信息colortype=colortype.ColorType;   %获取图象颜色类型%类型判断
switch(colortype)case 'truecolor'    %如果是彩图I=rgb2gray(imread(filename));   %imread读取数据,把彩图转化为灰度图像case  'indexed'                         %如果是索引图[I,map]=imread(filename);I=ind2gray(I,map);     %索引图像转化为灰度图像Otherwise                        %其他类型I=imread(filename);
end
clear filename;clear colortype;   %清除变量
%%%%%%%图像格式用处和区别:%1. 彩图(true color)表示为一个3通道矩阵,可以最自由的表现色彩,需要的空间最大,也是现在各种数码相机最常见的输出格式,比如一般jpg图像导入matlab看都是3通道矩阵。
%2. 灰度图表示为一个矩阵,是图像处理最常用的默认图像类型,这是因为它是一个最简单的二维数据结构,适于做数学运算。如果试验新算法的时候,一定先在灰度图像上做,做好了再考虑往彩图推广。
%3. 索引图(indexed)由索引矩阵和color map两部分组成。其中索引矩阵也是一个普通的二维矩阵,只不过其中的每一个数值不代表灰度,而代表color map中的一个index。而图像的显示效果,由color map决定:它是彩色的,图像就是彩色的,;它是灰度的,图像就是灰度的。当然,一般还是用来表示彩色啦。这种方式比真彩图的颜色表达能力弱,不过更省空间,像早期的256色图就是这种格式。
%4. 二值图一般不独立出现。它更像是一种数学处理的结果,凡是对图像的像素进行了二分类,分类结果都可以用二值图表示:比如图像分割。
2.[y,y1]=select(ImageData,h,w)用以选择图像的某个区域。
function [y,y1]=select(ImageData,h,w)%取得最佳阈值将图像二值化thr=0.5;delta=0.05;y=(ImageData>=thr*mean(max(ImageData)));
BW2=bwareaopen(y,10);     %删除小面积对象
SE=strel('square',15);    %创建15*15正方形
IM2=imdilate(BW2,SE);     %膨胀灰度,二值,压缩二值图像BW2,返回IM2
IM3=imerode(IM2,SE);      %将IM2图像实现图像腐蚀灰度,返回腐蚀图像IM3%1.开运算(先腐蚀后膨胀的过程):利用它可以消除小物体,在纤细点处分离物体,平滑较大物体边界,但同时并不明显改变原来物体的面积。OPEN(X,B)
%2.闭运算(先膨胀后腐蚀的过程):利用它可以填充物体内细小空洞,连接临近物体、平滑其边界,但同时并不明显改变原来物体的面积。CLOSE(X,B)
average=sum(sum(IM3))/(h*w);     %将图像二值化
while(average<0.03||average>0.08)  if(average<0.03)thr=thr-delta;elsethr=thr+delta;endy=(ImageData>=thr*mean(max(ImageData)));%求向量元素的平均值BW2=bwareaopen(y,10);%再一次删除小面积IM2=imdilate(BW2,SE);%膨胀IM3=imerode(IM2,SE);%腐蚀average=sum(sum(IM3))/(h*w);%求灰度的平均值
end
y1=y;
y=IM3;3.y=projection(I,s)用于对图像的水平和垂直方向进行投影。
function y=projection(I,s)
if(s=='h')   %水平投影y=sum(I');
end
if(s=='v')   %垂直投影y=sum(I);
end


图1 彩色图像


图2 灰度处理后的原始图像


图3 腐蚀处理后图像


图4 灰度膨胀后图像


图5 最终处理得到的车牌图像

图像检测与处理技术在汽车牌照中的运用相关推荐

  1. c语言去除图像斑点,武汉理工-图像检测与处理技术-实验报告.doc

    学生学号 0121304940834实验课成绩学 生 实 验 报 告 书 实验课程名称图像检测与处理技术开 课 学 院机电工程学院指导教师姓名刘清元学 生 姓 名李勇学生专业班级测控1304 2015 ...

  2. 机器视觉检测技术在汽车行业中的应用

        最近在关注机器视觉这个领域,发现各种理论.算法讲了很多,但是在实际应用领域还在探索阶段.想做一个实际应用案例的系列.分享一篇机器视觉检测技术在汽车行业中的应用文章,论文发表在<电子测试& ...

  3. 于殿泓 图像检测与处理技术_图像检测与处理技术(21世纪高等学校仪器仪表及自动化类专业规划教材)...

    导语 本书是21世纪高等学校仪器仪表及自动化类专业规划教材,从图像检测与处理技术的整体知识框架出发,让读者对图像检测与处理技术的基本内容.背景以及相关的基础理论有深刻的理解.其中包括图像检测的物理基础 ...

  4. 于殿泓 图像检测与处理技术_二手图像检测与处理技术 于殿泓 计算机 西安电子科大学出版社...

    基本信息 书名:图像检测与处理技术 原价:18.(咨询特价) 作者:于殿泓 出版社:西安电子科技大学 出版日期:2006年12月1日 ISBN(咨询特价) 字数: 页码:231 版次:第1版 装帧:装 ...

  5. 基于OpenCV技术的汽车牌照的识别

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类 ...

  6. #140-(EZOI练习)[进制转换]汽车牌照

    Description 小 Y 最近发现街上的汽车越来越多了,作为汽车的重要标志--汽车牌照也是越来越不够用了,已经从以前的十进制发展到三十六进制了,以前的一个汽车牌照"苏 D88888&q ...

  7. 自动驾驶汽车视觉- 图像特征提取与匹配技术

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:william 链接:https://zhuanlan.zhihu.com/p/13330196 ...

  8. 图像检测技术的研究现状

    图像检测技术的研究现状 技术检测 图像处理知识库 · 2016-01-08 19:59 图像检测技术的研究现状 所谓图像检测,就是通过图像对感兴趣的特征区域(检测目标)进行提取的过程,其中图像是承载检 ...

  9. (2016)CT图像肺结节计算机辅助检测与诊断技术研究综述 学习笔记

    引言 肺结节 CAD系统可分成检测(CADe)和诊断(CADx)两部分,其中 CADe在胸腔 CT 图像中标记侯选结节,并将候选结节分割成结节和非结节,而 CADx为确定结节 的 良 恶 性 提 供 ...

最新文章

  1. 监控HP服务器cpu状态脚本
  2. java层 android_Android开发实践:Java层与Jni层的数组传递
  3. 剑指offer:63-66记录
  4. jdbc mysql 源码_【JDBC系列】从源码角度理解JDBC和Mysql的预编译特性
  5. 深入解析JQuery中的isPlainObject()使用方法
  6. Spring Boot(4)---入门:安装Spring Boot
  7. 15 年经验专家解读 IIoT 的挑战及应对思路!
  8. Why Ceph and how to use Ceph?
  9. 多字符串查找算法:kmp与step
  10. c语言转化音乐格式转换器安卓版,音频提取格式转换APP
  11. 和秋叶一起学PPT之段落排版与字体(课时四、五)
  12. 十大抽奖软件推荐 抽奖软件排行榜 在线抽奖软件有哪些
  13. 量化投资学sql还是mysql_新人如何学习量化投资
  14. JDK环境变量的两种配置方法——以JDK8和JDK10为例
  15. 数据库基础-update语句详解
  16. 人脸预处理:人脸检测+人脸对齐
  17. vue+css3 旋转木马效果
  18. Back Propagation Derivation
  19. C++ MFC打开图片并进行简单算法处理
  20. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十四)具体单板的GPIO操作方法

热门文章

  1. 面试 - 阿里华为资深HR面试套路全揭晓
  2. 2023重庆邮电大学计算机考研信息汇总
  3. 手机APP界面设计尺寸笔记
  4. C++ QT开发人机象棋(搜索算法)
  5. 10种绝对不能娶的IT女孩
  6. 萤石把直播嵌在html中,直播组件流程使用说明
  7. 除了高通和博通,还有哪些Wi-Fi6路由器芯片方案可选
  8. MySQL省市区自联表,拿走不谢!!!
  9. 新手微信小程序制作教程步骤详解!
  10. Markdown中插入公式