ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

matlab模板匹配车牌识别

2021-04-12 17:59:49  阅读:238  来源: 互联网

标签:20 40 matlab SamBw2 end Dmax 车牌 模板


1 介绍基于模板匹配的车牌识别
1.1 依旧先对图像进行读入、灰度化、直方图均衡化,使用canny检测边缘、腐蚀定位。

对图像进行精定位,水平矫正滤波。

在模板匹配过程中,一套模板的准确率较低,可以考虑使用多套模板进行识别,牺牲速度换取精度。
多模板匹配的关键在于建立多套模板并且互不干涉。

文件:590m.com/f/25127180-489661017-f97ec8(访问密码:551685)

附模板匹配部分代码

%%%%%%%%%%%%%%%%%%%%%%%%%
%% 开始识别
%%%%%%%%%%%%%%%%%%%%%%%%%

liccode=char([‘0’:‘9’ ‘A’:‘H’ ‘J’:‘N’ ‘P’:‘Z’ ‘京津冀湘’ ‘u’]); %建立自动识别字符代码表
plate = char([‘京’ ‘A’:‘F’]);
for num=1:7
t=plate_word(:,:,num);
SegBw2=imresize(t,[40 20],‘nearest’); %实用最近邻插值法放大图像
if num1 %第一位汉字识别
kmin=35;
kmax=38;
elseif num
2 %第二位 A~Z 字母识别
kmin=11;
kmax=34;
else num>=3; %第三位以后是字母或数字识别
kmin=1;
kmax=34;
end
Error = 1000001:1000039;
for i=1:500
Error(i)=666666;
end

    for k2=kmin:kmax
        fname=strcat('模板\1\',liccode(k2),'.bmp');   
        SamBw2 = imread(fname);
        SamBw2=imresize(SamBw2,[40 20],'nearest');  %实用最近邻插值法放大图像
        SubBw2 = zeros(40,20);
        SegBw2 = double(SegBw2);
        SamBw2 = double(SamBw2);
        
        for  i=1:40
            for j=1:20
                SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);
            end
        end
               
       % 以上相当于两幅图相减得到第三幅图
            Dmax=0;
                for k1=1:40
                    for l1=1:20
                        if  ( SubBw2(k1,l1) ~=0 )
                            Dmax=Dmax+1;
                        end
                    end
                end
        Error(k2)=Dmax;
    end
    for k2=kmin:kmax
        fname=strcat('模板\2\',liccode(k2),'.bmp');   
        SamBw2 = imread(fname);
        SamBw2=imresize(SamBw2,[40 20],'nearest');  %实用最近邻插值法放大图像
        SubBw2 = zeros(40,20);
        SegBw2 = double(SegBw2);
        SamBw2 = double(SamBw2);           
        for  i=1:40
            for j=1:20
                SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);
            end
        end
               
       % 以上相当于两幅图相减得到第三幅图
            Dmax=0;
                for k1=1:40
                    for l1=1:20
                        if  ( SubBw2(k1,l1) ~=0 )
                            Dmax=Dmax+1;
                        end
                    end
                end
        Error(k2+100)=Dmax;
    end
   [~,index]=min(Error);
   
   if(index>200)
       index = index -200;
   elseif(index>100)
       index = index -100;
   end       
   plate(num) = liccode(index);        
end

以下内容无关:

-------------------------------------------分割线---------------------------------------------

LIS3DH是ST公司生产的MEMS三轴加速度计芯片,实现运动传感的功能。主要特性有:

宽工作电压范围:1.71 ~ 3.6V
功耗:低功耗模式2μA;正常工作模式、ODR = 50Hz时功耗11μA(要求SDO/SA0脚浮空或上拉)
测量范围:+/-2g ~ +/-16g
接口:I2C、三线制/四线制SPI
16 bit数据输出
两个可编程中断输出脚,用于自由落体和动作检测
6D/4D方向检测
内置AD支持3路外部信号输入
内置温度传感器
内置32-slot的10-bit FIFO存储器
自检测功能
封装:3 x 3 x 1 mm LGA-16

管脚定义

VCC:电源
Vdd_IO:数字接口供电电源
GND:地
RES:连接到地
NC:不连接
CS:I2C接口选择(CS=1);或SPI接口片选脚(CS=0)
SCL/SPC:I2C接口或SPI接口的时钟线
SDA/SDI/SDO:I2C接口或SPI接口数据线
SDO/SA0:I2C地址选择脚;或四线制SPI接口输出脚。浮空时为1。
INT1:中断信号输出,触发条件可中断
INT2:同上
ADC1、ADC2、ADC3:数模转换的模拟信号输入脚

与Arduino的连接
用工作于3.3V/8MHz版本的Arduino Pro Mini进行调试,可避免用UNO时接口电平转换的麻烦。采用I2C接口进行通讯。未利用INT1、INT2和FIFO的功能。

LIS3DH  Pro Mini 3.3V/8MHz

VDD <------> 3.3V

GND <------> GND

SCL <------> A5 (SCL)

SDA <------> A4 (SDA)

功能调试

  1. 根据应用手册,LIS3DH用于倾斜检测时,最好将测量范围设置为+/-2g。

  2. 设备上电后,需要约5ms的启动时间,之后自动进入低功耗模式。之后不同的模式间切换也需要少许的时间,与ODR有关。

  3. 存储结果的寄存器的值为有符号数(二补码)。应用笔记中“Example of acceleration data”中的示例表格,1g对应的高位寄存器值应为40h,资料应该是误写成了04h。

  4. 手册中的功耗数据只适用于SDO/SA0脚接电源、或者空接的情况。若该管脚接地,功耗会增加150μA;若通过下拉电阻接地,功耗则会更大。

测试代码
View Code
ODR更新频率设置为1Hz,通过串口打印三轴加速度测量结果,单位mg。

标签:20,40,matlab,SamBw2,end,Dmax,车牌,模板
来源: https://blog.csdn.net/weixin_43322764/article/details/115632361

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有