|
楼主 |
发表于 2018-11-24 08:58:02
|
显示全部楼层
本帖最后由 hwtechnew 于 2018-11-24 18:49 编辑
生物识别技术有很多方式,但是万变不离其宗,把一套算法消化就不错了,其它都是扩展
随着计算机技术的发展,现在各种识别方式都出现了,几年前还看到一套耳朵识别(估计只能用于识别大象)
目前市场还流行人脸识别,这是必然的,因为这个所有人都容易理解
所有识别的核心还是图像处理,图像处理的核心还是算法,算法的核心还是数学模型,再顶尖我也不懂啦,可以一同交流
生物识别都是这么几个步骤:
1,采集样本
A: 指纹: 光学折射采集(大部分考勤机),半导体电容采集(IPHONE)
B:指静脉: 使用近红外光成像采集
C:虹膜: 采用摄像头采集
D:人脸: 采用摄像头采集
2,分析样本特征
从采集的图像里提取特征,从采集到提取特征就是算法
这个就是前面提供的算法产生的
算法基本原理示意图如下
白色标记就是指纹特征点,每个人的位置都不同的,分为分叉,交合,断点
下面是个简化的库,有兴趣同学可以把这个源码库套入自己工程编译
/* 图像对象 */
#include "image.h"
/* 浮点域对象 */
#include "floatfield.h"
/* 文件对象 */
#include "file.h"
/* 处理细节 */
#include "minutia.h"
/* 直方图对象 */
#include "histogram.h"
/* 图像处理操作 */
#include "imagemanip.h"
/* 匹配算法 */
#include "matching.h"
调用示例
//memcpy(gImgData,ImgData,IMAGE_SIZE);
FvsImage_t image;
FvsImage_t mask;
FvsFloatField_t direction;
FvsFloatField_t frequency;
FvsByte_t* buffer;
FvsMinutiaSet_t minutia;
mask = ImageCreate();
image = ImageCreate();
direction = FloatFieldCreate();
frequency = FloatFieldCreate();
minutia = MinutiaSetCreate(5000);//节点集合
if (mask!=NULL && image!=NULL && direction!=NULL && frequency!=NULL)
{
FvsError_t ret = FvsOK;
ret = ImageSetSize(image, my_bmp_high , my_bmp_row);
if (ret==FvsOK)
{
buffer=ImageGetBuffer(image);
memcpy(buffer,gImgData,my_bmp_high*my_bmp_row);
}
(void)ImageNormalize(image, 50,5000);//归一化
// memcpy(bmp_buf1,buffer,my_bmp_high*my_bmp_row);
(void)ImageSoftenMean(image, 3);//软化
// PSImgData2BMP(buffer,IMG_FILE2);
// ShowImage(IMG_FILE2,2);
(void)FingerprintGetDirection(image, direction, 7, 8);//计算指纹图像脊线的方向。
//PSImgData2BMP(buffer,IMG_FILE2);
// ShowImage(IMG_FILE2,2);
(void)FingerprintGetFrequency(image, direction, frequency);//指纹频率域
//PSImgData2BMP(buffer,IMG_FILE2);
// ShowImage(IMG_FILE2,2);
// (void)FingerprintGetDirection(image, direction, 7, 8);//计算指纹图像脊线的方向。
(void)FingerprintGetMask(image, direction, frequency, mask);//获取指纹图像的有效区域
// PSImgData2BMP(buffer,IMG_FILE2);
// ShowImage(IMG_FILE2,2);
(void)ImageEnhanceGabor(image, direction, frequency, mask, 4.0);//增强
PSImgData2BMP(buffer,IMG_FILE2);
ShowImage(IMG_FILE2,2);
(void)ImageBinarize(image, (FvsByte_t)0x80);////二值化
// PSImgData2BMP(buffer,IMG_FILE2);
// ShowImage(IMG_FILE2,2);
(void)ImageThinHitMiss(image);//细化
PSImgData2BMP(buffer,IMG_FILE3);
ShowImage(IMG_FILE3,3);
}
////////////////////////////细化的////////////////////////////
3,比对。。。
那我就不说,大家都明白
时间有限,未完待续... |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|