车牌识别笔记:从图像中定位并裁剪车牌照
车牌定位的算法主要分为三类:
- 基于边缘
- 基于颜色
- 基于机器学习
参考链接:
常用车牌定位算法浅析https://blog.csdn.net/weixin_43958974/article/details/84886649.
图像处理基本算法 车牌识别与定位
https://blog.csdn.net/aihao_diy/article/details/72628427
基本思路是提取车牌的特征然后根据特征进行筛选。
主函数代码:
close all;
clc
[fn,pn,fi] = uigetfile('*.jpg','请选择所要识别的图片');
I = imread([pn fn]); % 读取图像 参数为图像名称和图像路径
figure,imshow(I);
title('原始图像'); %显示原始图像 %------车牌定位,并得到车牌的上边界PY1、下边界PY2、左边界PX1、右边界 PX2
[PY2,PY1,PX2,PX1] = Dingwei_Chepai(I); % 1.定位车牌边界%------车牌修正,将车牌轮廓稍微扩张 % 2.修正边界
[PY2,PY1,PX2,PX1,threshold] = Xiuzheng_Chepai(PY2,PY1,PX2,PX1);%------框选出车牌信息,得到车牌图像
bw = I(PY1:PY2,PX1:PX2,:); % 3.裁剪车牌照figure,imshow(bw);
title('车牌图像');
1.车牌定位
图像有RGB三层矩阵,每种车牌的底色具有各自特殊的RGB值,例如程序中使用的蓝底车牌的典型RGB值为 R = 28,G = 63, B = 138;
当RGB值接近时则认为可能是车牌,将该点像素赋值为255,否则0;利用颜色特征可以获取二值图像,可以去除大部分的其他物体,但是会有很多的干扰。
[PY2,PY1,PX2,PX1] = Dingwei_Chepai(I); %定位车牌边界
代码实现
// 上下左右边界值
function [PY2,PY1,PX2,PX1] = Dingwei_Chepai(I)
[y,x,z]=size(I); % 行数/列数/RGB层数
myI=double(I); % 将I数据转换成双精度型
Y_threshlow=5; %提取彩图的质量因子
X_firrectify=5; %干扰因子 transaction
%====================== Y 方向============================
Blue_y=zeros(y,1); % 创建y列向量,统计蓝色像素点
for i=1:yfor j=1:xif((myI(i,j,1)<=48)&&((myI(i,j,2)<=100)&&(myI(i,j,2)>=40))...&&((myI(i,j,3)<=200)&&(myI(i,j,3)>=80)))%蓝色像素的判断条件:R<=48; 40<=G<=100; 80<=B<=200% R:28 G:63 B:138Blue_y(i,1)= Blue_y(i,1)+1; % 1. 统计每行蓝色像素点数 end end
end
baisebili=0; % 白色比例
changkuanbi=0; %窗口比例
k=0; % 表示进入次数
while(~((baisebili>=0.12)&&(baisebili<=0.5)&&(changkuanbi>=0.20)&&(changkuanbi<=0.6))) if (k==0) %第一次进来[temp, MaxY]=max(Blue_y);% temp表示最多的点数,MaxY表示最多点数所在的行if temp<=20 %若蓝色像素小于这个值,不符合msgbox('车牌定位出错','warning'); % 对话框提示endPY1=MaxY; %将有最多蓝色像素点的行赋值给PY1 while ((Blue_y(PY1,1)>=Y_threshlow)&&(PY1>1)) % 2.寻找图片上边界PY1=PY1-1;end PY2=MaxY; %将有最多蓝色像素点的行赋值给PY2while ((Blue_y(PY2,1)>=Y_threshlow)&&(PY2<y)) % 3.寻找图片下边界PY2=PY2+1;end
%==============X 方向===============================X_threshhigh=(PY2-PY1)/11; %X方向长度%决定了提取的彩图的质量,适当提高可抗干扰,但是小图会照成剪裁太多Blue_x=zeros(1,x); % 创建x行向量,统计蓝色像素点for j=1:xfor i=PY1:PY2 % 由于已经确定Y方向范围,因此在此处只需要处理PY1:PY2阶段if((myI(i,j,1)<=65)&&((myI(i,j,2)<=100)&&(myI(i,j,2)>=40))...&&((myI(i,j,3)<=160)&&(myI(i,j,3)>=90))) % ??%蓝色像素的判断条件:R<=65; 40<=G<=100; 90<=B<=160% R:28 G:63 B:138Blue_x(1,j)= Blue_x(1,j)+1; % 1. X方向蓝色象素点统计 end end end[~, MaxX]=max(Blue_x); % MaxX表示最多点数所在的行PX1=MaxX-6*(PY2-PY1); % 2. 寻找X方向左边界if PX1<=1PX1=1;endwhile ((Blue_x(1,PX1)<=X_threshhigh)&&(PX1<x)) % 阈值: X_threshhigh=(PY2-PY1)/11;PX1=PX1+1;end %确定出X方向车牌起点 PX2=MaxX+6*(PY2-PY1); % 3. 寻找X方向右边界if PX2>=xPX2=x;endwhile ((Blue_x(1,PX2)<=X_threshhigh)&&(PX2>PX1)) %阈值PX2=PX2-1;end %确定出X方向车牌终点%========================================================= a=PY2-PY1+1; % 宽度b=PX2-PX1+1; % 长度White=0; %存储白色区域色素点for i=PY1:PY2for j=PX1:PX2if (std([myI(i,j,1) myI(i,j,2) myI(i,j,3)],1,2)<=22)...&&(myI(i,j,1)>=90)&&(myI(i,j,1)<=255) White= White+1; % 白色像素点统计 elseend end end baisebili=White/(a*b); % 白色像素区域比例changkuanbi=a/b; % 宽高比k=k+1;
%===========================蓝色区域不是车牌区域=================elseif (k~=0)Blue_y(PY1:PY2,1)=0;[temp, MaxY]=max(Blue_y);if temp<=20msgbox('车牌定位出错','warning'); endPY1=MaxY; %PY1:存储车牌上边界值while ((Blue_y(PY1,1)>=Y_threshlow)&&(PY1>1))%找到图片上边界 阈值为5PY1=PY1-1; end PY2=MaxY;while ((Blue_y(PY2,1)>=Y_threshlow)&&(PY2<y))%阈值为5PY2=PY2+1; %PY2:存储车牌上边界值endPY1; PY2;
%==============2次寻找X方向===============================X_threshhigh=(PY2-PY1)/15;Blue_x=zeros(1,x); % 进一步确定X方向的车牌区域for j=1:xfor i=PY1:PY2if((myI(i,j,1)<=45)&&((myI(i,j,2)<=90)&&(myI(i,j,2)>=20))...&&((myI(i,j,3)<=160)&&(myI(i,j,3)>=80))) Blue_x(1,j)= Blue_x(1,j)+1; end end end[~, MaxX]=max(Blue_x);PX1=MaxX-6*(PY2-PY1);if PX1<=1PX1=1;end while ((Blue_x(1,PX1)<=X_threshhigh)&&(PX1<x))%阈值PX1=PX1+1;end %确定出X方向车牌起点 PX2=MaxX+6*(PY2-PY1);if PX2>=xPX2=x;endwhile ((Blue_x(1,PX2)<=X_threshhigh)&&(PX2>PX1))%阈值PX2=PX2-1;end
%========================================================= a=PY2-PY1+1;b=PX2-PX1+1;White=0;for i=PY1:PY2for j=PX1:PX2if (std([myI(i,j,1) myI(i,j,2) myI(i,j,3)],1,2)<=16)...&&(myI(i,j,1)>=90)&&(myI(i,j,1)<=255)White= White+1; % 白色象素点统计 end end end baisebili=White/(a*b);changkuanbi=a/b;k=k+1; end
end
%========================================================
Y_firrectify=fix((PY2-PY1)/5); %取整 车牌区域修正系数
PY1=PY1-Y_firrectify;%对车牌区域的修正,向上
PY2=PY2+Y_firrectify;%对车牌区域的修正,向下
PX1=PX1-X_firrectify;% 对车牌区域的修正
PX2=PX2+X_firrectify;% 对车牌区域的修正,end
2.车牌边界修正
由于上步中有对车牌区域的修正,对大部分图像足够,此步骤也可以省略。
作为进一步地边界修正,在接下来操作中可使车牌区域的可读性更大
代码如下:
// 边界修正
function [PY2,PY1,PX2,PX1,threshold] = Xiuzheng_Chepai(PY2,PY1,PX2,PX1)S = (PY2-PY1)*(PX2-PX1); %% 获得车牌面积
if S <= 25000 threshold = 50;Y_secrectify = 3;X_secrectify = 3;
elseif S>25000&&S<=45000 threshold=100;Y_secrectify=-3;X_secrectify=3;
elseif S>45000&&S<=80000threshold=200;Y_secrectify=-3;X_secrectify=3;
elseif S>80000&&S<=150000threshold=300;Y_secrectify=-10;X_secrectify=-10;
elseif S>150000&&S<=400000threshold=600;Y_secrectify=-10;X_secrectify=-10;
elsethreshold=1800;Y_secrectify=-10;X_secrectify=-10;
end
PY1=PY1-Y_secrectify;%对车牌区域的进一步修正
PY2=PY2+Y_secrectify;%对车牌区域的进一步修正
PX1=PX1-X_secrectify;%对车牌区域的进一步修正
PX2=PX2+X_secrectify;%对车牌区域的进一步修正
end
车牌识别笔记:从图像中定位并裁剪车牌照相关推荐
- OCR算法:车牌识别在停车系统中的工作原理
车牌识别在停车场系统中的工作原理 1.车辆查看:可采用埋地线圈查看.红外查看.雷达查看技术.道闸视频查看等多种办法感知车辆的通过,并触发图像搜集抓拍. 2.图像搜集:通过高清摄像抓拍主机对通行车辆进行 ...
- QuaggaJS在给定图像中定位条形码的工作原理
QuaggaJS在给定图像中定位条形码的工作原理 一.介绍 二.步骤 1. 创建图像的二进制表示 2. 将图像切成网格(20 x 15个单元) 3. 提取每个细胞的骨架 4. 组件标记 5. 确定组件 ...
- Python实现条码识别:从图像中自动检测和识别条形码
Python实现条码识别:从图像中自动检测和识别条形码 在现代零售业中,条形码是一项必不可少的技术.它们提供了一种快速.准确和可靠的方法来追踪和管理库存.随着计算机视觉技术的发展,我们可以利用Pyth ...
- 毕业设计 - 题目:基于机器视觉的图像矫正 (以车牌识别为例) - 图像畸变校正
文章目录 0 简介 1 思路简介 1.1 车牌定位 1.2 畸变校正 2 代码实现 2.1 车牌定位 2.1.1 通过颜色特征选定可疑区域 2.1.2 寻找车牌外围轮廓 2.1.3 车牌区域定位 2. ...
- 论文笔记--网络新闻图像中人脸标注技术的研究-2011
论文信息: 硕士论文-网络新闻图像中人脸标注技术的研究-2011-哈尔滨工业大学-刘胜宇 文末附人脸标注相关论文下载地址 文章目录 摘要 技术 数据集 实验结果 结论 参考文献(部分) 关于图像标注 ...
- CNN如何识别一幅图像中的物体
让我们对卷积神经网络如何工作形成更好直观感受.我们先看下人怎样识别图片,然后再看 CNNs 如何用一个近似的方法来识别图片. 比如说,我们想把下面这张图片识别为金毛巡回犬. 一个需要被识别为金毛巡回犬 ...
- 图像五值化与基于三值图像的车牌识别(1)
庆祝2011年新年 张忠义 海口愚佬会教育科技有限公司 全文下载 www.yulaohui.com/color5_2/ 摘 要: 图像五值化是通过公式Y =(R+G)/2,将RGB空间映射到 ...
- opencv实现车牌识别之车牌号定位_1
转载文章:http://blog.csdn.net/u011630458/article/details/43604689 简介 按照在哪里跌倒就在哪里爬起来的精神,本章继续做车牌号的检测识别.所有步 ...
- C++毕业设计——基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现(毕业论文+程序源码)——车牌定位和识别系统
基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现,文章末尾附有本毕业设 ...
最新文章
- 如何设计出优秀的Restful API?
- FlashDevelop+aswing开发AS2程序
- 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variabl
- myloader原理解析
- linux yum下载RPM包后再安装LAMP环境
- 机器翻译软件从实验室走向市场
- php放量文档,成交量放量过顶买入法(图解)
- php screw.so扩展下载,CentOS下安装php加解密工具php
- Android 开发常用ADB命令集合
- 有道翻译js解密(1)
- html5css3背景下雪,HTML5 CSS3下雪奥运五环背景动画特效
- steam错误代码100怎么办
- 小程序直传阿里云OSS 踩坑
- Ant Design 与 Ant Design Pro
- 22考研初试410数一145上岸上海交通大学819经验分享
- 百度api文字转语音效果
- 如何使用微信、支付宝提现免手续费
- easyui表格自动换行
- 首尾相连数组的最大子数组和
- 数据人之苦,你造吗?(转自知乎)