clc,clear,close all

% ==============测定算法执行的时间,开始计时=================

%=====================读入图片===============================

[fn,pn,fi]=uigetfile('*.jpg','选择图片');

%函数的调用方法:function [FileName,PathName,FilterIndex] = uigetfile(FilterSpec,dialogTitle,DefaultName)

% FileName:返回的文件名

% PathName:返回的文件的路径名

% FilterIndex:选择的文件类型

% FilterSpec:文件类型设置

% DialogTitle:打开对话框的标题

% DefaultName:默认指向的文件名

I=imread([pn fn]);figure,imshow(I);title('原始图像'); % 显示原始图像

chepailujing=[pn fn];  % 这个就是包括了车牌图像的所有路径,包括文件名

I_bai=I; % 图像复制一次

[PY2,PY1,PX2,PX1]=caitu_fenge(I); % 确定车牌的的边界值

% figure,imshow(I);

% I=rgb2hsv(I);

% [PY2,PY1,PX2,PX1]=caitu_tiqu(I,I_bai); % 用HSI模型识别蓝色,用rgb模型识别白色

%================分割车牌区域=================================

%===============车牌区域根据面积二次修正============

[PY2,PY1,PX2,PX1,threshold]=SEC_xiuzheng(PY2,PY1,PX2,PX1);

%==============更新图片=============================

Plate=I_bai(PY1:PY2,PX1:PX2,:);%使用caitu_tiqu

%==============考虑用腐蚀解决蓝色车问题=============

bw=Plate;figure,imshow(bw);title('车牌图像');%hsv彩图提取图像

%==============这里要根据图像的倾斜度进行选择这里选择的图片20090425686.jpg

bw=rgb2gray(bw);figure,imshow(bw);title('灰度图像');

%================倾斜校正===========================

qingxiejiao=rando_bianhuan(bw);%计算倾斜角

bw=imrotate(bw,qingxiejiao,'bilinear','crop');%imrotate图像旋转函数,选择倾斜角度数

% imrotate 参数含义:'bilinear’双线性的'bicubic’双三次的

% 'crop’输出的图像B和输入的图像A保持一致的尺寸,裁剪旋转的图像至合适的大小

figure,imshow(bw);title('倾斜校正');% 取值为负值向右旋转

%==============================================

bw=im2bw(bw,graythresh(bw));

% figure,imshow(bw);将图像转换成二值图像,graythresh 能用来自动计算变量 level

% 将灰度图像 I 转换为二进制图像。

% 输出图像 BW 将输入图像中亮度值大于 level 的像素替换为值1 (白色),其他替换为值0(黑色)。

% 你指定 level 在 [0,1]之间,不用管输入图像的等级。

% 函数graythresh 能用来自动计算变量 level 。如果你不指定 level ,im2bw 使用 0.5。

%bwmorph作用是对二值图像进行形态学的操作

figure,imshow(bw);

bw=bwmorph(bw,'hbreak',inf); % figure,imshow(bw);

% figure,imshow(bw);

%inf表示这种情况下该操作被重复执行直到图像不再发生变化为止。

%hbreak 移除H连通的像素

% 1 1 1                          1 1 1

% 0 1 0            变成          0 0 0

% 1 1 1                          1 1 1

bw=bwmorph(bw,'spur',inf); % figure,imshow(bw);title('擦除之前');

% figure,imshow(bw);

% 移除刺激(孤立)像素。比如:

% 0? 0? 0? 0 ? ? ? ? ? ? ? ? ? 0? 0? 0? 0

% 0? 0? 0? 0 ? ? ? ? ? ? ? ? ? 0? 0? 0? 0

% 0? 0? 1? 0 ? ? ? 变成 ? ? ? ? ?0? 0? 0? 0

% 0? 1? 0? 0 ? ? ? ? ? ? ? ? ? 0? 1? 0? 0

% 1? 1? 0? 0 ? ? ? ? ? ? ? ? ? 1? 1? 0? 0

bw=bwmorph(bw,'open',5);%figure,imshow(bw);title('闭合运算');

% figure,imshow(bw);

%open 执行形态学开操作(先腐蚀后膨胀)

bw = bwareaopen(bw, threshold);%threshold 来自SEC_xiuzheng

%1 matlab函数bwareaopen──删除小面积对象

% 格式:BW2 = bwareaopen(BW,P,conn)

% 作用:删除二值图像BW中面积小于P的对象

figure,imshow(bw);title('擦除');

%==================加入进度条==================

% h=waitbar(0,'程序运行中,请稍等......')

% for i=1:10008

%     waitbar(i/5000,h)

% end

% close(h);

%wavplay(wavread('程序运行中.wav'),22000);

%===============================================

bw=~bw;figure,imshow(bw);title('擦除反色'); % 颜色反转

%=====对图像进一步裁剪,保证边框贴近字体========

bw=touying(bw);figure;imshow(bw);title('Y方向处理');

bw=~bw;

bw = bwareaopen(bw, threshold);

bw=~bw;

figure,imshow(bw);title('二次擦除');

[y,x]=size(bw);%对长宽重新赋值

%================文字分割=======================

fenge=shuzifenge(bw,qingxiejiao);

[m,k]=size(fenge);

%==========显示分割图像结果=====================

figure;

for s=1:2:k-1

subplot(1,k/2,(s+1)/2);imshow(bw( 1:y,fenge(s):fenge(s+1)));

end

title('分割后的图像');

%================ 给七张图片定位================桂AV6388

han_zi  =bw( 1:y,fenge(1):fenge(2));

zi_mu   =bw( 1:y,fenge(3):fenge(4));

zm_sz_1 =bw( 1:y,fenge(5):fenge(6));

zm_sz_2 =bw( 1:y,fenge(7):fenge(8));

shuzi_1 =bw( 1:y,fenge(9):fenge(10));

shuzi_2 =bw( 1:y,fenge(11):fenge(12));

shuzi_3 =bw( 1:y,fenge(13):fenge(14));

%================================识别====================================

%======================把修正数据读入==============================

xiuzhenghanzi =   imresize(han_zi, [110 55],'bilinear');

xiuzhengzimu  =   imresize(zi_mu,  [110 55],'bilinear');

xiuzhengzm_sz_1=  imresize(zm_sz_1,[110 55],'bilinear');

xiuzhengzm_sz_2 = imresize(zm_sz_2,[110 55],'bilinear');

xiuzhengshuzi_1 = imresize(shuzi_1,[110 55],'bilinear');

xiuzhengshuzi_2 = imresize(shuzi_2,[110 55],'bilinear');

xiuzhengshuzi_3 = imresize(shuzi_3,[110 55],'bilinear');

%============ 把0-9 , A-Z以及省份简称的数据存储方便访问============

hanzishengfen = duquhanzi(imread('cpgui.bmp'),imread('cpguizhou.bmp'),imread('cpjing.bmp'),imread('cpsu.bmp'),imread('cpyue.bmp'));

%因数字和字母比例不同。这里要修改

shuzizimu=duquszzm(imread('0.bmp'),imread('1.bmp'),imread('2.bmp'),imread('3.bmp'),imread('4.bmp'),...

imread('5.bmp'),imread('6.bmp'),imread('7.bmp'),imread('8.bmp'),imread('9.bmp'),...

imread('10.bmp'),imread('11.bmp'),imread('12.bmp'),imread('13.bmp'),imread('14.bmp'),...

imread('15.bmp'),imread('16.bmp'),imread('17.bmp'),imread('18.bmp'),imread('19.bmp'),...

imread('20.bmp'),imread('21.bmp'),imread('22.bmp'),imread('23.bmp'),imread('24.bmp'),...

imread('25.bmp'),imread('26.bmp'),imread('27.bmp'),imread('28.bmp'),imread('29.bmp'),...

imread('30.bmp'),imread('31.bmp'),imread('32.bmp'),imread('33.bmp'));

zimu  = duquzimu(imread('10.bmp'),imread('11.bmp'),imread('12.bmp'),imread('13.bmp'),imread('14.bmp'),...

imread('15.bmp'),imread('16.bmp'),imread('17.bmp'),imread('18.bmp'),imread('19.bmp'),...

imread('20.bmp'),imread('21.bmp'),imread('22.bmp'),imread('23.bmp'),imread('24.bmp'),...

imread('25.bmp'),imread('26.bmp'),imread('27.bmp'),imread('28.bmp'),imread('29.bmp'),...

imread('30.bmp'),imread('31.bmp'),imread('32.bmp'),imread('33.bmp'));

shuzi = duqushuzi(imread('0.bmp'),imread('1.bmp'),imread('2.bmp'),imread('3.bmp'),imread('4.bmp'),...

imread('5.bmp'),imread('6.bmp'),imread('7.bmp'),imread('8.bmp'),imread('9.bmp'));

%============================识别结果================================================

i=1;%shibiezm_sz该函数识别数字有问题

jieguohanzi  = shibiehanzi(hanzishengfen,xiuzhenghanzi);shibiejieguo(1,i) =jieguohanzi;  i=i+1;

jieguozimu   = shibiezimu(zimu,xiuzhengzimu);           shibiejieguo(1,i) =jieguozimu;   i=i+1;

jieguozm_sz_1= shibiezm_sz(shuzizimu,xiuzhengzm_sz_1);  shibiejieguo(1,i) =jieguozm_sz_1;i=i+1;

jieguozm_sz_2= shibiezm_sz(shuzizimu,xiuzhengzm_sz_2);  shibiejieguo(1,i) =jieguozm_sz_2;i=i+1;

jieguoshuzi_1= shibieshuzi(shuzi,xiuzhengshuzi_1);      shibiejieguo(1,i) =jieguoshuzi_1;i=i+1;

jieguoshuzi_2= shibieshuzi(shuzi,xiuzhengshuzi_2);      shibiejieguo(1,i) =jieguoshuzi_2;i=i+1;

jieguoshuzi_3= shibieshuzi(shuzi,xiuzhengshuzi_3);      shibiejieguo(1,i) =jieguoshuzi_3;i=i+1;

%==========================对话框显示显示=============================================

shibiejieguo;

msgbox(shibiejieguo,'识别结果');

%================导出文本==========================

fid=fopen('Data.xls','a+');

fprintf(fid,'%s\r\n',shibiejieguo,datestr(now));

fclose(fid);

%================读出声音==========================

duchushengyin(shibiejieguo);

%================读取计时==========================

t=toc;

%==================================================

matlab中caitu_tiqu,源码交流=图像处理 车牌号码识别[Tested]相关推荐

  1. [转载]MATLAB技术论坛【源码交流】汇总

    原文地址:MATLAB技术论坛[源码交流]汇总 作者:风雪夜归人 过已知三点做圆MATLAB源代码 http://www.matlabsky.com/thread-290-1-1.html 椭圆(圆) ...

  2. 图像转置的MATLAB和OpenCV源码

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 注意,图像转置和图像旋转是两回事,图像转置只是把 ...

  3. java 自定义arraylist_Java 中模仿源码自定义ArrayList

    Java 中模仿源码自定义ArrayList 最近看了下ArrayList的源码,抽空根据ArrayList的底层结构写了一个功能简单无泛型的自定义ArrayLsit,帮助自己更好理解ArrayLis ...

  4. linux ssh rpm包,RHEL6(CentOS6)中使用源码包编译生成RPM的基本方法:升级OpenSSH篇

    RHEL6(CentOS6)中使用源码包编译生成RPM的基本方法:升级OpenSSH篇 具体过程请见代码~ # cp openssh-7.1p1.tar.gz /root/rpmbuild/SOURC ...

  5. c++调用mysql存储过程_C++中ADO调用MySQL存储过程失败,诡异的语法异常,求解中,附源码...

    C++中ADO调用mysql存储过程失败,诡异的语法错误,求解中,附源码 不管怎么调整,死活都出现下面的错误 C++ADO代码我实在找不到什么错误了,难道是MySQL有什么问题,或者有其他需要注意的地 ...

  6. 如何在eclipse中查看源码

    在eclipse中查看源码 作为一个java开发的程序员,特别是初学者的java程序员.有时候我们很有必要查看java本身的一些工具类的源码,但是在这之前需要进行一项设置才能顺利的查看得到我们JKD自 ...

  7. linux安装pgsql源码包解压,在Linux(centos)中使用源码安装pgRouting

    目录 一.解压pgRouting 二.配置PostgreSQL的环境变量 三.编译源代码 四.测试 由于pgRouting依赖于PostGIS和PostgreSQL,所以阅读本文之前,务必请先阅读: ...

  8. 深入理解 Node.js 中 EventEmitter源码分析(3.0.0版本)

    events模块对外提供了一个 EventEmitter 对象,即:events.EventEmitter. EventEmitter 是NodeJS的核心模块events中的类,用于对NodeJS中 ...

  9. Spring中AOP源码剖析

    Spring中AOP源码剖析 关键词 aop的增强发生在后置处理器中(没有循环依赖) 最终增强是通过 递归调用 ,层层增强 一.环境准备 1.1 bean和接口 public class AopBea ...

最新文章

  1. 执行高性能任务的强大桌面计算机是,用于高性能任务的强大的桌面计算机是一个______。...
  2. Qt QLabel 显示gif动图
  3. python编写登录接口与三级菜单小程序
  4. kpc v0.8.3发布,跨框架的组件库解决方案
  5. 注解 @Scheduled
  6. c++中函数放在等号右边_如何从C或C++中的函数返回多个值?
  7. android 标题图标,android 中 actionbar 常用方法。设置标题,隐藏图标等
  8. 基于Hbase的用户评分协同过滤推荐算法
  9. python处理mysql数据结构_python环境下使用mysql数据及数据结构和二叉树算法(图)...
  10. 《转》Ubuntu 12.04常用的快捷键
  11. 爬虫软件python功能_Python 网络爬虫程序详解
  12. php什么程度算学会,十天学会PHP - 序1,学会的标准是什么?(20180820-1)
  13. 浅谈C++ STL中的优先队列(priority_queue)
  14. 实践案例丨ACL2020 KBQA 基于查询图生成回答多跳复杂问题
  15. layer php弹出层,layer官方演示与讲解(jQuery弹出层插件)
  16. 流畅的python 数据模型
  17. 代码文件夹带有红色感叹号_接口测试平台代码实现7:菜单的开发
  18. 扬州工业机器人外壳设计排名_世界十大工业机器人制造商公布,排名第一的竟是……...
  19. lisp方格网法计算土方量_CAD计算土方方量插件
  20. swift-集成touch id功能 指纹验证

热门文章

  1. 实战为上!深入解析20个运维命令
  2. 计算机word模块试题,计算机word考试试题1(附答案)
  3. 使用Arduino的DIY自平衡机器人
  4. 信息安全导论 实验一 古典密码学
  5. 設計模式之Visitor
  6. 毕业设计-基于MATLAB的含噪语音信号降噪处理系统
  7. android面试自我介绍范文,2022年Android技术下半场在哪
  8. codeforce_div3_round527_ABCDEF
  9. H3C CE3000系列交换机插入千兆光模块后发现光模块可发光但端口指示灯不亮
  10. Linux下查看CPU核数