FPGA|CPLD|ASIC论坛
直播中

fzhenyu

13年用户 42经验值
擅长:基础元器件
私信 关注
[资料]

【Artix-7 50T FPGA试用体验】模板匹配

目标是识别0-9的数字,这一块主要用 matlabmatlab用的不是很熟,具体可以参考百度“matlab字符识别“,说下思路。
1. 计划把 0-9的数字全部找一些(车牌上的),然后每个数在X ,Y 方向的投影数值保存下来,假如取8位宽 、,那么1个数字就是8bit*16的字符模板。


2. 把这些模板矩阵存入FPGA 的内部RAM中作为标准模板库。采用8×16 bit 大小的数组作为标准模板。然后总共10个数,都保存下来。


3. 可惜大学学的线性代数忘的差不多了,公式没记住,原理是提取待识别图像的矩阵数据 T[x,y]  若干特征向量和 之前最早保存的10个模板中的 矩阵 M[i,j]相应的特征量进行比较(要比较10次),计算他们之间的互相关量,互相关量最大的哪一个就是识别的数字(PS:有点后悔没好好学线性代数了),这个是模板匹配。


4.  在保存模板的时候,需要用到matlab软件,可以使用自带的HDL CODER或者XILINX的SYSTEM GENERATOR转成verilog,我转完发现很多地方还是需要修改,这个要注意。


5. 目前看,绝逼需要matlab转,直接用verilog编难度很大,主要matlab函数比较多,比如下面这些
这次用到的几个重要函数
归一化函数
I1=pretreatment(imread('BP/1.jpg'));   
//样本训练函数
train(net,P,T);
//测试函数
I=imread('CAR/0.jpg');
//字符分隔函数
[PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6]=StringSplit(DW);
//测试字符
PIN0=pretreatment(PIN0);
//匹配部分
T0= sim(net ,P0(:,i));   T1 = compet (T0)    d = find(T1 == 1) - 1;
我只是把几个重要的函数写取来,都是matlab里面的函数
需要完整的可以百度“matlab字符识别“可以搜到一堆


6. 用板子测试效果,效果不是很理想,中间有很多坑,有时间把遇到的问题也写一下。还有调试记录
    不过收获非常大,有时间要把线性代数看看了


7. 继续努力中。


回帖(2)

fzhenyu

2016-12-19 01:31:11
每个人取的模板矩阵的大小需要调试才能确定,我用的是 8*16bit。但是后来 发现投影函数 在 matlab 里面没找到,就干脆用matlab 的归一函数了。
不过字符分隔原理还是 投影在X轴,就是字符中间的间隔,投影到X轴上就是0(字符白色,背景黑色),按灰度值黑色就是0,所以垂直方向的灰度累加值是0,就可以分隔字符
举报

王栋春

2016-12-19 20:25:01
楼主分享的不错呀  期待最终分享
举报

更多回帖

发帖
×
20
完善资料,
赚取积分