⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wi.cpp

📁 该程序用于在线数字签名,可以将读入的图像与用户开户时录入的图像比较,从而确定身份的合法性.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	templenx = DTWTemplate(s0->xLoc2,s0->effectDataNum,s1->xLoc2,s1->effectDataNum,dtwtemplatex,1,20,&thresholdx);
	if(templenx == -1)
	{
		return -1;
	}
	for(i = 2 ;i<num;i++)
	{
		CWi::Sample *s = (CWi::Sample *)trainSampleArray.GetAt(i);
		retval = DTWTemplate(dtwtemplatex,templenx,s->xLoc2,s->effectDataNum,dtwtemplatex,i,20,&thresholdx);
		if(templenx == -1)
		{	
			return -1;
		}
	}
	thresholdxy = SQUARE(thresholdx)+SQUARE(thresholdy);
	templenxy = templeny;
	threshold = thresholdxy;
	return retval;
}

/****************************************************************************/
/*功能:综合利用X坐标和Y坐标进行识别
/*参数:distance-保存识别对象与模板的距离
/*      index-待识别的对象在测试几种的下标
/*返回值:1 接受 -1 拒绝
/****************************************************************************/
int CWi::RecogTemplateXY(double *distance,int index)
{
	double disx,disy;
	double retval;
	CWi::Sample *s = (CWi::Sample *)testSampleArray.GetAt(index);
	disx = DTWDistanceFun(dtwtemplatex,templenx,s->xLoc2,s->effectDataNum,100);
	disy = DTWDistanceFun(dtwtemplatey,templeny,s->yLoc2,s->effectDataNum,100);
	retval = SQUARE(disx)+SQUARE(disy);
	*distance = retval;
	if(retval>=threshold*1.0)
	{
		return -1;
	}
	else
	{
		return 1;
	}
}

/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/
int CWi::RecogMovement(double *distance,int index)
{
	FEAGURE_MV fm;
	double retval;
	CWi::Sample *s = (CWi::Sample *)testSampleArray.GetAt(index);
	compute_feagure_ex(s->xLoc,s->yLoc,s->pressTotal,s->effectDataNum,&fm);
	retval = feagure_distance(&feat,&fm);
	*distance = retval;
	if(retval>=thresholdfeat*1.3)
	{
		return -1;
	}
	else
	{
		return 1;
	}

}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/

int	CWi::RegDih(double *distance,int index)
{
	DIHFQ fq;
	double retval;
	CWi::Sample *s = (CWi::Sample *)testSampleArray.GetAt(index);
	int *dir = (int *)malloc(sizeof(int)*s->effectDataNum);
	dih_compute_direction(s->xLoc2,s->yLoc2,dir,s->effectDataNum);
    //dih_compute_frequency_dist(dir,s->xLoc2,s->yLoc2,s->effectDataNum,&fq);
    //dih_compute_frequency_pressure(dir,s->pressTotal2,s->effectDataNum,&fq);
    dih_compute_frequency_dp(dir,s->pressTotal2,s->xLoc2,s->yLoc2,s->effectDataNum,&fq);
	//dih_compute_frequency(dir,s->effectDataNum,&fq);
	retval = dih_dist_compute(&freq,&fq);
	*distance = retval;
	if(retval>=thresholdfreq*1.3)
	{
		return -1;
	}
	else
	{
		return 1;
	}

}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/

void CWi::OnDirection() 
{
	int num = trainSetDataFilePath.GetSize();
	DIHFQ *fq = (DIHFQ *)malloc(sizeof(DIHFQ)*num);
	double total = 0.0;
	DIHFQ frequence;
	frequence.f0 = 0.0;
	frequence.f1 = 0.0;
	frequence.f2 = 0.0;
	frequence.f3 = 0.0;

	for(int i = 0;i<num;i++)
	{
		CWi::Sample *s = (CWi::Sample *)trainSampleArray.GetAt(i);
		int *dir = (int *)malloc(sizeof(int)*s->effectDataNum);
		dih_compute_direction(s->xLoc2,s->yLoc2,dir,s->effectDataNum);
        //dih_compute_frequency_dist(dir,s->xLoc2,s->yLoc2,s->effectDataNum,&fq[i]);
        //dih_compute_frequency_pressure(dir,s->pressTotal2,s->effectDataNum,&fq[i]);
        dih_compute_frequency_dp(dir,s->pressTotal2,s->xLoc2,s->yLoc2,s->effectDataNum,&fq[i]);
		//dih_compute_frequency(dir,s->effectDataNum,&fq[i]);

		frequence.f0+=fq[i].f0;
		frequence.f1+=fq[i].f1;
		frequence.f2+=fq[i].f2;
		frequence.f3+=fq[i].f3;

	}

	frequence.f0/=num;
	frequence.f1/=num;
	frequence.f2/=num;
	frequence.f3/=num;
	for(i = 0;i<num;i++)
	{
		total+=dih_dist_compute(&freq,&fq[i]);
	}
	total/=num;
	freq = frequence;
	thresholdfreq = total;
}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/

void CWi::OnMovement() 
{
	int num = trainSetDataFilePath.GetSize();
	PFEAGURE_MV fm = (PFEAGURE_MV)malloc(sizeof(FEAGURE_MV)*num);
	double total = 0.0;
	FEAGURE_MV feature;

	feature.f1 = 0.0;
	feature.f2 = 0.0;
	feature.f3 = 0.0;
	feature.f4 = 0.0;
	feature.f5 = 0.0;
	feature.f6 = 0.0;
	feature.f7 = 0.0;
	feature.f8 = 0.0;

	for(int i = 0;i<num;i++)
	{
		CWi::Sample *s = (CWi::Sample *)trainSampleArray.GetAt(i);
		compute_feagure_ex(s->xLoc,s->yLoc,s->pressTotal,s->effectDataNum,&fm[i]);

		feature.f1+=fm[i].f1;
		feature.f2+=fm[i].f2;
		feature.f3+=fm[i].f3;
		feature.f4+=fm[i].f4;
		feature.f5+=fm[i].f5;
		feature.f6+=fm[i].f6;
		feature.f7+=fm[i].f7;
		feature.f8+=fm[i].f8;

	}

	feature.f1/=num;
	feature.f2/=num;
	feature.f3/=num;
	feature.f4/=num;
	feature.f5/=num;
	feature.f6/=num;
	feature.f7/=num;
	feature.f8/=num;
	for(i = 0;i<num;i++)
	{
		total += feagure_distance(&feature,&fm[i]);
	}
	total/=num;
	feat = feature;
	thresholdfeat = total;
}

/****************************************************************************/
/* 功能:保存以压力为特征时的模板
/* 参数:FileName-模板文件名
/****************************************************************************/
void CWi::SaveTemplatePress(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"ab+");
	head.length = templen;
	head.threshold = threshold;
	head.method = METHOD_PRES;
	fwrite(&head,sizeof(head),1,fp);
	fwrite(dtwtemplate,sizeof(double),templen,fp);
	fclose(fp);
}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/

void CWi::SaveTemplateXpos(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"ab+");
	head.length = templenx;
	head.threshold = thresholdx;
	head.method = METHOD_X;
	fwrite(&head,sizeof(head),1,fp);
	fwrite(dtwtemplatex,sizeof(double),templenx,fp);
	fclose(fp);
}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/

void CWi::SaveTemplateYpos(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"ab+");
	head.length = templeny;
	head.threshold = thresholdy;
	head.method = METHOD_Y;
	fwrite(&head,sizeof(head),1,fp);
	fwrite(dtwtemplatey,sizeof(double),templeny,fp);
	fclose(fp);
}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/

void CWi::SaveTemplateXY(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"ab+");
	head.length = templenxy;
	head.threshold = thresholdxy;
	head.method = METHOD_XY;
	fwrite(&head,sizeof(head),1,fp);
	fwrite(dtwtemplatex,sizeof(double),templenx,fp);
	fwrite(dtwtemplatey,sizeof(double),templeny,fp);
	fclose(fp);
}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/

void CWi::SaveMovement(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"ab+");
	head.length = 0;
	head.threshold = thresholdfeat;
	head.method = METHOD_MOVE;
	fwrite(&head,sizeof(head),1,fp);
	fwrite(&feat,sizeof(FEAGURE_MV),1,fp);
	fclose(fp);
}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/

void CWi::SaveDih(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"ab+");
	head.length = 0;
	head.threshold = thresholdfreq;
	head.method = METHOD_DIH;
	fwrite(&head,sizeof(head),1,fp);
	fwrite(&freq,sizeof(DIHFQ),1,fp);
	fclose(fp);

}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/
void CWi::SaveTemplateVec(char * FileName)
{

	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"ab+");
	head.length = templenvec;
	head.threshold = thresholdvec;
	head.method = METHOD_VEC;
	fwrite(&head,sizeof(head),1,fp);
	fwrite(dtwtemplatev,sizeof(mvector),templenvec,fp);
 	fclose(fp);
}
/****************************************************************************/
/*功能:保存用HMM模型时的模板
/*参数:FileName-模板文件名
/****************************************************************************/
void CWi::SaveHMM(char * FileName)
{
	FILE *fp;
	fp = fopen(FileName,"ab+");
	PrintHMM(fp, &hmm);
	fclose(fp);
}

/****************************************************************************/
/*功能:装载以压力为特征的模板
/*参数:FileName-文件名
/****************************************************************************/
int CWi::LoadTemplatePress(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"rb");
	fread(&head,sizeof(head),1,fp);
	if(head.method != METHOD_PRES)
	{
		fclose(fp);
		return -1;
	}
	fread(dtwtemplate,sizeof(double),templen,fp);
	templen = head.length;
	threshold = head.threshold;
	fclose(fp);
	return 0;
}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/
int CWi::LoadTemplateXpos(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"rb");
	fread(&head,sizeof(head),1,fp);
	if(head.method != METHOD_X)
	{
		fclose(fp);
		return -1;
	}
	fread(dtwtemplatex,sizeof(double),templenx,fp);
	templenx = head.length;
	threshold = thresholdx = head.threshold;
	fclose(fp);
	return 0;
}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/
int CWi::LoadTemplateYpos(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"rb");
	fread(&head,sizeof(head),1,fp);
	if(head.method != METHOD_Y)
	{
		fclose(fp);
		return -1;
	}
	fread(dtwtemplatey,sizeof(double),templeny,fp);
	templeny = head.length;
	threshold = thresholdy = head.threshold;
	fclose(fp);
	return 0;
}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/
int CWi::LoadTemplateXY(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"rb");
	fread(&head,sizeof(head),1,fp);
	if(head.method != METHOD_XY)
	{
		fclose(fp);
		return -1;
	}
	fread(dtwtemplatex,sizeof(double),templenx,fp);
	fread(dtwtemplatey,sizeof(double),templeny,fp);
	templenxy = head.length;
	thresholdxy = head.threshold;
	fclose(fp);
	return 0;
}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/
int CWi::LoadMovement(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"rb");
	fread(&head,sizeof(head),1,fp);
	if(head.method != METHOD_MOVE)
	{
		fclose(fp);
		return -1;
	}
	fread(&feat,sizeof(FEAGURE_MV),1,fp);
	thresholdfeat = head.threshold;
	fclose(fp);
	return 0;
}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/
int CWi::LoadDih(char * FileName)
{
	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"rb");
	fread(&head,sizeof(head),1,fp);
	if(head.method != METHOD_DIH)
	{
		fclose(fp);
		return -1;
	}
	fread(&freq,sizeof(DIHFQ),1,fp);
	thresholdfreq = head.threshold;
	fclose(fp);
	return 0;

}
/****************************************************************************/
/*
/*	
/*  
/****************************************************************************/
int CWi::LoadTemplateVec(char * FileName)
{

	TempHeader head;
	FILE *fp;
	fp = fopen(FileName,"rb");
	fread(&head,sizeof(head),1,fp);
	if(head.method != METHOD_VEC)
	{
		fclose(fp);
		return -1;
	}
	fread(dtwtemplatev,sizeof(mvector),templenvec,fp);
	templenvec = head.length;
	thresholdvec = head.threshold;
	fclose(fp);
	return 0;
}

/****************************************************************************/
/*功能:装载利用HMM模型时的模板文件
/*参数:FileName-模板文件名
/****************************************************************************/
int CWi::LoadHMM(char * FileName)
{
	FILE *fp;
	fp = fopen(FileName,"rb");
	ReadHMM(fp, &hmm);
	fclose(fp);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -