本人因没有学过计算机图形学,所以对以下算法无法实现,有高手帮忙实现一下吗??
如能实现有相应报酬,谢谢大家!!
算法如下:
Cn(P)=1 端点
Cn(P)=3 分叉点
对所有目标像素点进行Cn(P)值的计算,如果Cn(P)的值等于1,表明该目标像素点为纹线端点;如果Cn(P)的值等于3,表明该目标像素点为纹线分叉点。
(1)删除边缘处的特征点
对所有属于指纹区域的分块图像进行判断,如果周围存在背景块,表明该块图像位于边缘处,将其标记为边缘块。将位于边缘块内的所有特征点一律视作伪特征点予以删除。
(2)删除短线和纹线间断形成的伪特征点
对所有纹线端点,搜索其半径为8个像素点的邻域,若发现邻域内存在其它的纹线端点,则将该邻域内所有纹线端点视作伪特征点予以删除。
(3)删除很小毛刺形成的伪特征点
对经步骤(2)处理后剩下的所有纹线端点,搜索其半径为4个像素点的邻域,若发现邻域内存在纹线分叉点,则将该纹线端点和纹线分叉点都视作伪特征点予以删除。
(4)删除较长毛刺形成的伪特征点
对经步骤(3)处理后剩下的所有纹线端点,搜索其半径为8个像素点的邻域,若发现邻域内存在纹线分叉点,则计算该纹线端点与分叉点连线所成角度。若该角度与两点所在局部区域的纹线方向的差大于
(5)删除距离很近的分叉点
对经步骤(4)处理后剩下的所有纹线分叉点,搜索其半径为3个像素点的邻域,若发现邻域内存在纹线分叉点,则将该邻域内所有纹线分叉点视作伪特征点予以删除。
(6)删除纹线间粘连形成的叉连点
对经步骤(5)处理后剩下的所有纹线分叉点,搜索其半径为10个像素点的邻域,若发现邻域内存在其它纹线分叉点,则计算两纹线分叉点连线所成角度。若该角度与两点所在局部区域的纹线方向的差大于
(7)记录特征信息
经过以上处理后,保留下来的特征点都被认为是真正的特征点。将各点特征信息,包括特征点类型、坐标、方向和所在纹线的离散采样等,记录到一定的数据结构中,以备后用。纹线端点的类型记为0,纹线分叉点的类型记为1;特征点所在局部区域的纹线方向归一化为
//指纹宏观特征定义
/*struct FP_MacroFeature{
unsigned char FP_Quality;//图像的整体质量,量化值,0~100
char FP_BasicType;// 图像的基本纹型
short int FP_ImgResolution;//图像采集分辨率
//core点和delta点的位置
CPoint FP_Core1Position;
CPoint FP_Core2Position;
CPoint FP_Delta1Position;
CPoint FP_Delta2Position;
unsigned char FP_RidgeDistance;//平均纹线距离
unsigned char FP_MacroFeatureResreved1;//保留字
unsigned char FP_MacroFeatureResreved2;//保留字
};
*/
//指纹细节特征定义
struct FP_MinutiaeFeature{
short int FP_MinutiaeXPosition;//细节点X坐标
short int FP_MinutiaeYPosition;//细节点Y坐标
short int FP_MinutiaeDirection;//局部纹线方向,离散为360个方向
unsigned char FP_MinutiaeType;//细节点类型, 0 、1分别表示端点和分叉点
unsigned char FP_MinutiaeWeight;//细节点的权重
unsigned char FP_MinutiaeFeatureReserved;//保留字
};
/*
//一幅指纹图像特征的完整定义
struct FP_FeatureData{
struct FP_MacroFeature FP_MacroF;
struct FP_MinutiaeFeature FP_MinutiaeF[100];
[此贴子已经被作者于2006-4-23 0:26:36编辑过]