[原创]基于Blankfin平台的虹膜识别系统的实现
0赞
发表于 1/3/2012 1:23:49 PM
阅读(4011)
Blackfin 处理器包括一个具有 10 级 RISC MCU/DSP 流水线的高性能 16/32 位嵌入式处理器内核、用于实现最佳代码密度的可变长度 ISA 以及具有面向加速视频和多媒体处理的指令的全 SIMD 支持。
强大的处理功能非常适合进行图像处理,本人主要利用Blankfin完成了在虹膜识别中的虹膜定位功能,采用了动态轮廓模型(ACTIVE CONTOUR MODEL),完成后的用处非常广泛,机场码头,就连四六级考试都能用到。
目前存在的部分问题需要修正
1、当检测复杂图像时,效果较差。
2、格式较乱,注释少,仅供参考。
******程序流程
程序的大致流程是这样的:
1.程序读入数字图像后,程序自动调用FindCenter函数根据图像灰度的X,Y方向的投影信息找出瞳孔的大致中心,也就是它的伪圆心。
2.通过操作者点击鼠标右键触发SetPoints函数,程序自动在第一步的伪圆心周围生成N个等距离的snake点。
3.通过触发Auto选项,程序生成一个定时器(TIMER),在每一个WM_TIMER消息来临时调用SnakeAlgorithm函数。在SnakeAlgorithm函数中循环对每一个snake点调用MinEnergyPoint,在每一个点周围的范围内寻找能量最小值的点。
4.当snake轮廓线与虹膜内边缘吻合后,通过对snake点考察,当稳定的点数占到总点数的一定比例后,定时器被终止。最后计算出snake的形心。
程序的大致流程是这样的:
1.程序读入数字图像后,程序自动调用FindCenter函数根据图像灰度的X,Y方向的投影信息找出瞳孔的大致中心,也就是它的伪圆心。
2.通过操作者点击鼠标右键触发SetPoints函数,程序自动在第一步的伪圆心周围生成N个等距离的snake点。
3.通过触发Auto选项,程序生成一个定时器(TIMER),在每一个WM_TIMER消息来临时调用SnakeAlgorithm函数。在SnakeAlgorithm函数中循环对每一个snake点调用MinEnergyPoint,在每一个点周围的范围内寻找能量最小值的点。
4.当snake轮廓线与虹膜内边缘吻合后,通过对snake点考察,当稳定的点数占到总点数的一定比例后,定时器被终止。最后计算出snake的形心。
******结果分析
实验选用的图像为8位灰度图,大小为640*480像素。图中红色的大圆为定位的虹膜内边界,绿色的圆点为大圆的圆心,即瞳孔的圆心。外面的近似为圆形的轮廓线表示进化后的SNAKE。
从图还可以看出,大部分点都已到达瞳孔边界,只有个别的点没有收敛到瞳孔边界,但已非常接近,因此并不影响圆心的定位。
从程序的各种运行的结果中,我发现当要处理的虹膜图像不清晰或者有明显的噪音点时,初始的伪圆心会离真正的中心较远,而且SNAKE的最终位置也会受到影响。因而图像的质量较大地影响了程序的效率与精确度。
为了提高虹膜定位的准确度,可以采用多次定位的方法,即在上一次SNAKE进化到边界后,求出虹膜的形心,再次以这个形心为下一次定位过程的伪圆心,以这个伪圆心再次设置SNAKE点,再次进化SNAKE,直到虹膜的圆心满足一定的要求,定位过程结束。
实验选用的图像为8位灰度图,大小为640*480像素。图中红色的大圆为定位的虹膜内边界,绿色的圆点为大圆的圆心,即瞳孔的圆心。外面的近似为圆形的轮廓线表示进化后的SNAKE。
从图还可以看出,大部分点都已到达瞳孔边界,只有个别的点没有收敛到瞳孔边界,但已非常接近,因此并不影响圆心的定位。
从程序的各种运行的结果中,我发现当要处理的虹膜图像不清晰或者有明显的噪音点时,初始的伪圆心会离真正的中心较远,而且SNAKE的最终位置也会受到影响。因而图像的质量较大地影响了程序的效率与精确度。
为了提高虹膜定位的准确度,可以采用多次定位的方法,即在上一次SNAKE进化到边界后,求出虹膜的形心,再次以这个形心为下一次定位过程的伪圆心,以这个伪圆心再次设置SNAKE点,再次进化SNAKE,直到虹膜的圆心满足一定的要求,定位过程结束。
目前正在进行编码,请大家期待我的悠悠假期,能有收获!!!