花了两个星期的时间,终于把一个简单的模式识别程序移植到开发板上了。程序是现成的,以前用VC实现的。在移植过程中,中间走了一些弯路,花费了不少时间。
程序很简单,用模板匹配法实现数字5和非5的识别,最终显示出来。关于特征值的选取,我一开始把图像分成了5*5个区域,用每个区域的像素值当做特征值。原来VC上,就是这么分的,连阈值我都是直接照搬原程序。实验的时候发现,即使同一个数字,每次从摄像头读取后的像素值差别比较大,毕竟不是读BMP图片。最后改用比值做特征值,分成3*4个区域,区域分的太多反而会受误差影响较大。重新训练选取阈值,最后的结果差强人意,可以大致区分出5和其他数字,但有时也会失败。
程序过程如下:
1. 初始化。从摄像头中读图并二值化存入对应数组。由于摄像头的数据直接放在DDR2中,所以从摄像头读数就是从DDR2对应的地址读数。
2. 把二值化的图像显示出来。就是把二值化的图像数据放到DDR2中。
3. 对图像进行边界扫描。这是为了下一步标准化做准备。上边界确定方法如下:
//从上往下扫描,找到上边界
tmp=(Uint8 *)sample;
for (i=10;i<height;i++) //