Java教程

matlab模板匹配车牌识别

本文主要是介绍matlab模板匹配车牌识别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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。

这篇关于matlab模板匹配车牌识别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!