UP目录
一、理论基础
车牌识别技术是利用计算机等辅助设备进行的自动汽车牌照自动识别就是在装备了数字摄像设备和计算机信息管理系统等软硬件平台的基础之上,通过对车辆图像的采集,采用先进的图像处理、模式识别和人工智能技术,在图像中找到车牌的位置,提取出组成车牌号码的全部字符图像,再识别出车牌中的文字、字母和数字,最后给出车牌的真实号码。
车牌识别系统(LPR)在现代交通检测和管理部门中发挥着举足轻重的作用。车牌识别系统主要包括车牌定位、字符分割和字符识别三部分。由于车牌定位的准确与否将会直接影响到车牌识别的结果,因此,车牌定位是LPR的一项关键技术。常见的车牌定位技术主要有:边缘检测法、投影法、神经网络法、数学形态学法、基于彩色图像的定位算法[6]。边缘检测法对车牌图像边框的连续性要求较高;神经网络方法计算量大,且要求车牌尺寸基本不变,否则必须对神经网络进行重新训练;基于形态学的方法受噪声影响比较大;基于彩色图像的定位算法适应性差,对于偏色以及背景颜色干扰等情况无法做出有效处理。
由于存在许多外在的干扰,背景信息往往比车牌信息更加复杂,给目标搜索带来巨大的困难,单一的定位方法已经无法保证其有效性。为此,本文提出了一种综合的定位算法,对预处理的图像进行形态学的高帽变换后,利用边缘检测得到连通区域进行粗定位,然后结合Hough变换和车牌的先验知识进行车牌的精定位,该算法充分利用了车牌的字符信息,能够快速而准确地提取出车牌区域。
形态学是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质的形状特征,如边界和连通区域等。同时像细化、像素化和修剪毛刺等技术也常应用于图像的预处理和后处理中,成为图像增强技术的有力补充。形态学的基本思想是利用一种特殊的结构元来测量或提取输入图像中相应的形状或特征,以便进一步进行图像分析和目标识别。
在经阈值处理提取出目标区域的二值图像之后,区域边缘可能并不理想,这时可以使用腐蚀或膨胀操作对区域进行“收缩”或“扩张”。腐蚀和膨胀是两种最基本也是最重要的形态学运算, 它们是很多高级形态学处理的基础, 很多其他的形态学算法都是由这两种基本运算复合而成。
1.1 结构元素
结构元素在算子参数中的名称为 StructElement,在腐蚀与膨胀操作中都需要用到。结构元素是类似于“滤波核”的元素,或者说类似于一个“小窗”,在原图上进行“滑动”,这就是结构元素,
可以指定其形状和大小。结构元素一般由0和1的二值像素组成。结构元素的原点相当于“小窗”的中心,其尺寸由具体的腐蚀或膨胀算子指定,结构元素的尺寸也决定着腐蚀或者膨胀的程度。结构元素越大,被腐蚀消失或者被膨胀增加的区域也会越大。
1.2 腐蚀
腐蚀操作是对所选区域进行“收缩”的一种操作,可以用于消除边缘和杂点。腐蚀区域的大小与结构元素的大小和形状相关。其原理是使用一个自定义的结构元素,如矩形、圆形等,在二值图像上进行类似于“滤波”的滑动操作,然后将二值图像对应的像素点与结构元素的像素进行对比,得到的交集即为腐蚀后的图像像素。
腐蚀:对核范围内的像素,只要有一个是非前景,则设置为背景;比如对于3*3的核函数,如果当前像素的3*3邻域内像素全是前景则保留,否者设置为背景;常用于去除较小噪声,分离物体。
1.3 膨胀
膨胀:对二值化物体边界点进行扩充,将与物体接触的所有背景点合并到该物体中,使边界向外部扩张。如果两个物体间隔较近,会将两物体连通在一起。对填补图像分割后物体的空洞有用。而膨胀就是求局部最大值的操作,核B与图形卷积,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素。这样就会使图像中的高亮区域逐渐增长。
膨胀:对核范围内的像素,只要有一个是前景,则设置为前景;比如对于3*3的核函数,如果当前像素的3*3邻域内像素有一个是前景则当前像素设置为前景,否者设置为背景;通常膨胀会用在腐蚀之后,腐蚀会去除小的噪声,但也会把前景变瘦,而膨胀则会再变胖。
膨胀与腐蚀能够实现以下作用:
1.消除噪声
2.分割出独立的图像元素,在图像中连接相邻的元素
3.寻找图像中的明显的极大值区域或者极小值区域
4.求出图像的梯度
需要注意之处: 腐蚀和膨胀都是对图像的白色部分(高亮部分)而言。膨胀是图像中的高亮部分进行膨胀,类似于领域扩张,效果图拥有比原图更大的高亮区域;腐蚀是原图的高亮部分被腐蚀,类似于领域被蚕食,效果图拥有比原图更小的高亮区域。
从数学的角度来说,膨胀和腐蚀操作就是将图像与核进行卷积,核可以是任意形状和大小的。
二、核心程序
.......................................
hold on
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2),boundary(:,1),'w','LineWidth',2)
end
% 找到每个连通域的质心
stats = regionprops(L,'Area','Centroid');
for k = 1:length(B)
% 获取一条边界上的所有点
boundary = B{k};
% 计算边界周长
delta_sq = diff(boundary).^2;
perimeter = sum(sqrt(sum(delta_sq,2)));
% 获取边界所围面积
area = stats(k).Area;
% 计算匹配度
metric = 27*area/perimeter^2;
% 要显示的匹配度字串
metric_string = sprintf('%2.2f',metric);
% 标记出匹配度接近1的连通域
if metric >= 0.9 && metric <= 1.1
centroid = stats(k).Centroid;
plot(centroid(1),centroid(2),'ko');
% 提取该连通域所对应在二值图像中的矩形区域
goalboundary = boundary;
s = min(goalboundary, [], 1);
e = max(goalboundary, [], 1);
goal = imcrop(I4,[s(2) s(1) e(2)-s(2) e(1)-s(1)]);
end
% 显示匹配度字串
text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','g','FontSize',14,'FontWeight','bold');
end
UP37
三、测试结果
标签:像素,形态学,腐蚀,区域,matlab,图像,膨胀,车牌 From: https://www.cnblogs.com/matlabfpga/p/17031972.html