车牌定位的算法主要分为三类:

  • 基于边缘
  • 基于颜色
  • 基于机器学习

参考链接:
常用车牌定位算法浅析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


车牌识别笔记:从图像中定位并裁剪车牌照相关推荐

  1. OCR算法:车牌识别在停车系统中的工作原理

    车牌识别在停车场系统中的工作原理 1.车辆查看:可采用埋地线圈查看.红外查看.雷达查看技术.道闸视频查看等多种办法感知车辆的通过,并触发图像搜集抓拍. 2.图像搜集:通过高清摄像抓拍主机对通行车辆进行 ...

  2. QuaggaJS在给定图像中定位条形码的工作原理

    QuaggaJS在给定图像中定位条形码的工作原理 一.介绍 二.步骤 1. 创建图像的二进制表示 2. 将图像切成网格(20 x 15个单元) 3. 提取每个细胞的骨架 4. 组件标记 5. 确定组件 ...

  3. Python实现条码识别:从图像中自动检测和识别条形码

    Python实现条码识别:从图像中自动检测和识别条形码 在现代零售业中,条形码是一项必不可少的技术.它们提供了一种快速.准确和可靠的方法来追踪和管理库存.随着计算机视觉技术的发展,我们可以利用Pyth ...

  4. 毕业设计 - 题目:基于机器视觉的图像矫正 (以车牌识别为例) - 图像畸变校正

    文章目录 0 简介 1 思路简介 1.1 车牌定位 1.2 畸变校正 2 代码实现 2.1 车牌定位 2.1.1 通过颜色特征选定可疑区域 2.1.2 寻找车牌外围轮廓 2.1.3 车牌区域定位 2. ...

  5. 论文笔记--网络新闻图像中人脸标注技术的研究-2011

    论文信息: 硕士论文-网络新闻图像中人脸标注技术的研究-2011-哈尔滨工业大学-刘胜宇 文末附人脸标注相关论文下载地址 文章目录 摘要 技术 数据集 实验结果 结论 参考文献(部分) 关于图像标注 ...

  6. CNN如何识别一幅图像中的物体

    让我们对卷积神经网络如何工作形成更好直观感受.我们先看下人怎样识别图片,然后再看 CNNs 如何用一个近似的方法来识别图片. 比如说,我们想把下面这张图片识别为金毛巡回犬. 一个需要被识别为金毛巡回犬 ...

  7. 图像五值化与基于三值图像的车牌识别(1)

    庆祝2011年新年 张忠义 海口愚佬会教育科技有限公司 全文下载 www.yulaohui.com/color5_2/ 摘 要:      图像五值化是通过公式Y =(R+G)/2,将RGB空间映射到 ...

  8. opencv实现车牌识别之车牌号定位_1

    转载文章:http://blog.csdn.net/u011630458/article/details/43604689 简介 按照在哪里跌倒就在哪里爬起来的精神,本章继续做车牌号的检测识别.所有步 ...

  9. C++毕业设计——基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现(毕业论文+程序源码)——车牌定位和识别系统

    基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现,文章末尾附有本毕业设 ...

最新文章

  1. 如何设计出优秀的Restful API?
  2. FlashDevelop+aswing开发AS2程序
  3. 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variabl
  4. myloader原理解析
  5. linux yum下载RPM包后再安装LAMP环境
  6. 机器翻译软件从实验室走向市场
  7. php放量文档,成交量放量过顶买入法(图解)
  8. php screw.so扩展下载,CentOS下安装php加解密工具php
  9. Android 开发常用ADB命令集合
  10. 有道翻译js解密(1)
  11. html5css3背景下雪,HTML5 CSS3下雪奥运五环背景动画特效
  12. steam错误代码100怎么办
  13. 小程序直传阿里云OSS 踩坑
  14. Ant Design 与 Ant Design Pro
  15. 22考研初试410数一145上岸上海交通大学819经验分享
  16. 百度api文字转语音效果
  17. 如何使用微信、支付宝提现免手续费
  18. easyui表格自动换行
  19. 首尾相连数组的最大子数组和
  20. 数据人之苦,你造吗?(转自知乎)

热门文章

  1. css\css3\html5综合实验案例
  2. 解决拍照按钮为英文问题
  3. iconfont 转换为图标字体
  4. win10文件夹无法打开,双击闪屏
  5. 最新CNC数控机床数据采集方案大全,数据采集大全,机床开发资料大全
  6. 华为OD机试 - 机器人走迷宫(Python)| 递归的使用
  7. 紫光云与智能事业群赋能城市数字化 助力数字中国
  8. UVA 356 - Square Pegs And Round Holes
  9. KL15和汽车钥匙档位
  10. 旧笔记本电脑自制nas_将旧笔记本电脑变成Windows 8平板电脑