一、简介

1 在进行图像处理任务之前,首先要明确处理对象和处理流程\ 处理对象: 新能源车牌和蓝色车牌\ 处理流程:\ \ 2 由于要对蓝色和新能源车牌进行识别,而且新能源车牌是渐变色,所以直接通过设定阈值的方法去识别两种车牌并没有单独识别蓝色车牌的可靠性高。这里,我根据车牌字符的特征进行车牌位置定位:\ 2.1 根据字符特征初步找出车牌位置\ \ 2.2 根据车牌长宽比进行初步筛选\ 我们可以用最小外接矩形算法框出上一步已选出的区域,然后根据车牌长宽比设定阈值,将满足阈值的矩形筛选出来,当然但还是会存在一部分干扰区域。

2.3 对矩形内像素进行颜色统计\ 通过对初步筛选后剩余区域分别进行像素的颜色统计,我们即可准确找出车牌位置,与此同时车牌的类型(新能源或蓝牌)也可以在这里判断出来

3 倾斜校正\ 这一步是为后面垂直投影法分割字符和模板匹配做准备

简单来讲,使用霍夫线算法检测车牌上下边框所在直线,计算这条直线倾斜角度,之后对车牌进行旋转即可。当然复杂点的方法可以具体看我的源程序,具体效果如下图:\

4 二值化、形态学处理、字符识别\ 4.1 二值化和形态学处理这里就不在赘述,很多博客已经讲的非常清晰\ 4.2 字符分割\ 在这里需要对字符进行准确的分割,在分割之前还是可能会有干扰,需要再次分割出车牌字符的准确位置。这里我的方法是:先向左投影,设定阈值,切割出上下边界,同理在切割出左右边界。但是这只适用于车牌边框明显的情况下,所以我不建议你使用这个方法,慎用!!!\ \ 到这里就可以使用垂直投影法进行字符分割,这里需要注意的是新能源车牌有八位,蓝牌有七位\ 分割结果如下图所示:\ \ 4.3 字符识别\ 这里使用模板匹配,因为新能源车牌字符和蓝牌字符不一致,所以要制作两套字符模板。另外需要注意的是,根据《中华人民共和国机动车号牌》序号编码规则,26个英文字符中“I“、”O“不能使用,所以不存在"1"和"I"、"0"和"O"字符混淆的问题

二、源代码

``` %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % resize的目标尺寸650*X % 调参 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear;

se1 = strel('rectangle',[15 15]); %创建一个平坦的矩形结构 se2 = strel('rectangle',[12 20]); %创建一个平坦的矩形结构 se3 = strel('rectangle',[12 15]); imgraw=imread('C:\Users\lenovo\Desktop\licenseplate\0.png'); %读取图

% se1 = strel('rectangle',[15 25]); %创建一个平坦的矩形结构 % se2 = strel('rectangle',[10 25]); %创建一个平坦的矩形结构 % se3 = strel('rectangle',[14 19]); % imgraw=imread('E:\matlab workspace\licenseplate\车牌2.jpg'); %读取图像

[m,~]=size(imgraw); times = 650/m; img=imresize(imgraw,times,'nearest'); g= fspecial('gaussian',[5,5],1); %高斯滤波器 gimg = imfilter(img, g, 'replicate'); %图像滤波 grayimg=rgb2gray(gimg); %转为灰色图像
open = imopen(gray
img,se1); %图像开操作 subimg = imsubtract(grayimg,open); %图像相减 BWimg = imbinarize(subimg); %使用Otsu方法确定全局阈值进行二值化 edgeimg = edge(BWimg,'canny'); edgeimg1 = imclose(edgeimg,se2); %图像闭操作 edgeimg2 = imopen(edgeimg1,se3); %图像开操作

%%%%%%%%%%%%%%%%%%%%%%%%%%%使用车牌长宽比进行判断%%%%%%%%%%%%%%%%%%%%%%%%%%%

[B,L] = bwboundaries(edgeimg2,'noholes');
num
rect = 0; %符合要求的矩形数量 matrixrect = {}; %符合要求的矩形的坐标元胞矩阵 for k = 1:length(B) boundary = B{k}; c = boundary(:,2); r = boundary(:,1); [rectx,recty,area,perimeter] = minboundrect(c,r,'a'); %rectx,recty为逆时针排列 width = round(sqrt((recty(1)-recty(2))^2+(rectx(1)-rectx(2))^2)); leth = round(sqrt((recty(2)-recty(3))^2+(rectx(2)-rectx(3))^2)); if width > leth temp = width; width = leth; leth = temp; end ratio = leth / width; if ratio >2.5 && ratio <4.5 numrect = numrect + 1; matrixrect{num_rect} = [rectx,recty]; end
end

subplot(451); imshow(img); title('原始图像'); subplot(452); imshow(gimg); title('高通滤波后图像'); subplot(453); imshow(grayimg); title('灰度图像'); subplot(454); imshow(open); title('图像开操作'); subplot(455); imshow(subimg); title('图像相减'); subplot(456); imshow(BWimg); title('图像二值化'); subplot(457); imshow(edgeimg); title('图像边缘'); subplot(458); imshow(edgeimg2); title('图像开闭操作'); subplot(459); imshow(img); title('原图框出车牌'); hold on for k = 1:numrect rect = matrixrect{k}; rx = rect(:,1); ry = rect(:,2); line(rx,ry,'Color','red'); end

%%%%%%%%%%%%%%%%%%%%%%%%%%%判断颜色、二次判断车牌%%%%%%%%%%%%%%%%%%%%%%%%%%%

p=0; %计算满足颜色条件的次数 color = 'no'; for o=1:numrect z=matrixrect{o}; mid1x=(z(1,1)+z(2,1))/2; mid1y=(z(1,2)+z(2,2))/2; mid2x=(z(3,1)+z(4,1))/2; mid2y=(z(3,2)+z(4,2))/2; green=0;blue=0; hsv= rgb2hsv(img); %RGB转换为HSV img_count = (abs(ceil(mid2x+0.601)-floor(mid1x+0.601)))*(abs(ceil(mid2y+0.001)-floor(mid1y+0.001))); subplot(4,5,10); imshow(hsv);

for i=ceil(mid1y+1):floor(mid2y-1)if mid2x==mid1xfor j=floor(mid2x+1):ceil(mid1x+1)h = hsv(i,j,1);s = hsv(i,j,2);v = hsv(i,j,3);if 0.40< h && h <= 0.46 &&  s>0.4 && s<=1 && v>0.3 && v<1green = green+1;elseif 0.56<h && h<=0.72 && s>0.4 && s<=1 && v>0.4 && v<1blue =blue +1;                endend       elsefor j=ceil(mid2x+1):floor(mid1x-1)h = hsv(i,j,1);s = hsv(i,j,2);v = hsv(i,j,3);if 0.40< h && h <= 0.46 &&  s>0.4 && s<=1 && v>0.3 && v<1green = green+1;elseif 0.56<h && h<=0.72 && s>0.4 && s<=1 && v>0.4 && v<1blue =blue +1;                endendend
end
if green*2 >= img_count && green>bluecolor = 'green';p=p+1;b=z;   %满足条件的元胞
elseif blue*2 >= img_count && blue>greencolor = 'blue';p=p+1;b=z;   %满足条件的元胞
end

end

if (color == 'blue')&&(p == 1) flag = 0; style = '识别到的是蓝色'; elseif (color == 'green')&&(p == 1) flag = 1; style = '识别到的是新能源'; end function image=cutting(img,flag) %获取图片大小 [row,col] = size(img); %设定边界 img(:,col)=1; img(:,1)=1; %图像取反,方便后续处理,根据黑色判断边界 all = sum(~img); %行向量 %figure('NumberTitle','off','Name','投影'),bar(a),title('投影'); left = 1; right = 1; count1 =0; %记录字符个数 for i = 1:col-1 %从左到右扫描 if all(i)==0&&all(i+1)~=0 %左侧边界 left = i; end if all(i)~=0&&all(i+1)==0 %右侧边界 right=i; else right =0; %左右两侧均为黑色边框 end if right~=0 count1 = count1+1; leftbound(count1) = left; %存放左边界 rightbound(count1) = right; %存放右边界 end
end for i = 1:count1 %??? if leftbound(i)boundary(count2) = rightbound(i); leftboundary(count2) = left_bound(i); count2 = count2+1; end end ```

三、运行结果

【车牌识别】基于模板匹配算法实现新能源车牌识别matlab源码相关推荐

  1. gadecod matlab,【预测模型】基于遗传算法优化BP神经网络房价预测matlab源码

    一.简介 1 遗传算法概述 遗传算法(Genetic Algorithm,GA)是进化计算的一部分,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法 ...

  2. 【情感识别】SVM语音情感识别(带面板)【含GUI Matlab源码 876期】

    ⛄一.SVM语音情感识别简介 0 引 言 语音情感识别是当前研究热点,在人机交互(Human-Computer Interaction,HCI)领域的应用价值日益突显.在今天的HCI系统中,机器可以通 ...

  3. 【交通标志识别】BP神经网络雾霾天气交通标志识别(带面板)【含GUI Matlab源码 1771期】

    ⛄一.BP神经网络交通标志识别简介 道路交通标志用以禁止.警告.指示和限制道路使用者有秩序地使用道路, 保障出行安全.若能自动识别道路交通标志, 则将极大减少道路交通事故的发生.但是由于道路交通错综复 ...

  4. 基于KNN-凸包提取轮廓点(matlab源码及示例)

    KNN凸包算法提取平面点云轮廓点结果如下: 其可以很好地将轮廓点进行提取出,且为有序点云 源码下载网站: 基于KNN凸包算法提取二维点云边缘点,其提取的边缘点为有序点云-数据集文档类资源-CSDN下载

  5. 【汉字识别】基于贝叶斯网络实现汉字识别含Matlab源码

    ​1 简介 2 部分代码 clc,clear,closefor i=1:5 imp=imread(['.\字库',num2str(i),'.jpg']); create_database(imp,i) ...

  6. 【人脸识别】LPP人脸特征提取【含GUI Matlab源码 1491期】

    ⛄一.简介 理论知识参考文献:基于局部特征提取人脸识别方法优化研究 ⛄二.部分源代码 function varargout = spectacles_lpp_classification(vararg ...

  7. 【信号处理】基于小波变换的音频水印嵌入提取matlab源码

    较早利用分块DCT的水印技术,他们的水印方案是用一个密钥随机的选择图像的一些分块,在频域的中频上稍稍改变一个三元组来隐藏二进制序列信息.这种方法对有损压缩和低通滤波是稳健的.Cox等[提出了着名的基于 ...

  8. 【语音识别】基于VQ特定人孤立词语音识别matlab 源码

    一.简介 VQ(Vector Quantization)是一个常用的压缩技术,本文主要回顾: 1)VQ原理 2)基于VQ的说话人识别(SR,speaker recognition)技术 〇.分类问题 ...

  9. 【元胞自动机】基于元胞自动机的人口疏散仿真matlab源码

    1 简介 为了消除礼堂的安全隐患,制定 行之有效的应急预案,有必要对礼堂人群疏散运动进行研究,掌握礼堂人群疏散的一般特点和规律.采用基于二维元胞自动机模型对某高校礼堂发生人群疏散运动进 行仿真,找出影 ...

  10. 【图像修复】基于滤波实现损坏图像修复含Matlab源码

    1 简介 图像在获取,传输和存储的过程中由于各种原因引起图像质量的下降,需要对图像进行复原.本文对图像复原技术,高斯噪声,椒盐噪声进行介绍,探讨二维中值滤波算法和MATLAB下算法的仿真实验,同时分析 ...

最新文章

  1. DIY三通道程控直流电源
  2. std::cout char + int
  3. 我的世界1.13的服务器网站,我的世界1.13纯净版
  4. 低碳生活:充电电池及充电器
  5. RDBMS 与 非RDBMS
  6. Cloud一分钟 | 误删生产数据库血案,顺丰高级工程师被开除;阿里巴巴暂停美国云计算扩张?阿里云总裁正式回应:“不会减少投入”...
  7. MAC OS X Yosemite安装与试用
  8. 长远锂科:拟发行可转债募资不超32.5亿元
  9. android ffmpeg 解码,如何在Android用FFmpeg解码图像
  10. HTML5快速设计网页
  11. 干货|看怎么肢解堆垛机!
  12. Python中scipy.signal.stft函数详解
  13. 激光发生器的防浪涌防静电保护
  14. python将字母全部变为小写_将一个Python列表全部转换为小写或大写
  15. OpenCV—HSV色彩空间基础知识
  16. 如何使浏览器打开时,默认的文档模式就是标准模式
  17. 阿里云centos 7下kubeadm方式安装kubernetes 1.14.1集群(包含解决墙以及各种坑的问题)
  18. 国家计算机病毒中心发现篡改IE的恶意木马
  19. 心物各东西:基因,文化和心灵
  20. CAD中的标注文字如何沿弧线排列?

热门文章

  1. HTML简单制作一个网页
  2. phyton list排序
  3. 了解Linux操作系统的网络参数以及配置步骤(包括IP地址的更改配置)
  4. ssl证书显示错误怎么办。
  5. css和html实现梦幻西游页面特效
  6. 一步步打造自己的通用上拉加载布局
  7. 计算机为动态分区无法安装系统,磁盘动态分区形式的电脑怎么重装系统win10
  8. python函数之plot函数(一)
  9. lsof恢复被rm -rf命令删除的文件
  10. 2020第十一届11月蓝桥杯大赛软件类B组C/C++省赛题解