Example #1
0
int TGAtoPPM(char *tgaFile, char *ppmFile){

    int type = CheckTGA(tgaFile);

    /*if the tga file isn't supported return error*/
    if(type == ERRORTGA){
        Error("ERROR: the TGA file is corrupted or not supported!\n");
        return ERROR;
    }

    /*load image*/
    Image *image;
    if(type == TGA2LL)
        image = LoadTGA2LL(tgaFile);
    else if(type == TGA2UL)
        image = LoadTGA2UL(tgaFile);

    if(!image){
        Error("ERROR: TGA file could not be loaded");
        return ERROR;
    }

    /*dump image*/
    DumpToPPM(ppmFile, *image);
    ImageDestroy(&image);
    return SUCCESS;
}
Example #2
0
int PPMtoTGA(char *ppmFile, char *tgaFile){

    int type = CheckPPM(ppmFile);

    /*if the ppm file isn't supported return error*/
    if(type == ERRORPPM){
        Error("ERROR: the PPM file is corrupted or not supported!\n");
        return ERROR;
    }
    /*load image*/
    Image *image;
    if(type == ASCIIPPM)
        image = LoadPPMAscii(ppmFile);
    else if(type == BINARYPPM)
        image = LoadPPMBinary(ppmFile);

    if(!image){
        Error("ERROR: PPM file could not be loaded");
        return ERROR;
    }

    /*dump image*/
    DumpToTGA(tgaFile, *image);
    ImageDestroy(&image);
    return SUCCESS;
}
Example #3
0
//===========================================================================
void Finalizar(int restart)
{
	if (!restart)
	{
		DiskDestroy();
		ImageDestroy();
		ImpressoraFinaliza();
	}
	CpuDestroy();
	MemDestroy();
	TapeFinaliza();
	SpkrDestroy();
	VideoDestroy();
	Timer_UninitTimer();
	KeybFinaliza();
}
Example #4
0
/** 
 * 函数描述:
 * 		将指纹对象image保存到指纹数据库中,
 * 		可用的ID而且没有重复指纹保存成功后返回该指纹的ID号
 * 参数:
 *		rgb24_buf	:	24bit RGB图像缓冲区
 *		width		:	图像宽度
 *		height		:	图像高度
 *		id			:	该指纹保存的ID
 * 返回值:
 *		验证通过则返回FvsOK,否则放回FvsError_t错误码。
 **/
FvsError_t 
fp_store(FvsByte_t *rgb24_buf, FvsInt_t width, 
					FvsInt_t height, FvsInt_t *id)
{
	FvsError_t err;
	FvsInt_t goodness;
	FvsInt_t i;
	FvsImage_t image, mask;
	FvsMinutiaSet_t exist_minutias, new_minutias;

	DP("Store width : %d, height : %d.\n", width, height);
	image = ImageCreate();
	if (FvsOK != (err = ImageSetSize(image, width, height))) {
		return err;
	}
	
	if (FvsOK != (err = rgb24_to_image(rgb24_buf, image))) {
		ImageDestroy(image);
		return err;
	}
	/* process source image */
	mask   = ImageCreate();
	err = ImageSetSize(mask, ImageGetWidth(image), ImageGetHeight(image));
	if (FvsOK != err) {
		return err;
	}
	
	new_minutias = MinutiaSetCreate(MAXMINUTIA);  
	exist_minutias = MinutiaSetCreate(MAXMINUTIA);
	
	if (FvsOK != (err = img_to_minutias(image,mask,new_minutias))) {
		ImageDestroy(image);
		ImageDestroy(mask);
		MinutiaSetDestroy(new_minutias);
		MinutiaSetDestroy(exist_minutias);
		return err;
	}

/* 暂时跳过指纹重复检测 */
#if 0
	/* 保存指纹之前检查是否有指纹重复 */
	for (i = 0; i < MAX_FINGER_NO ; i++) {
		if (fdb_id_is_used(i) != ID_USED){
			continue;
		}
		if (FvsOK != (err = fdb_load_minutias(i, exist_minutias))) {
			return err;
		}
		err = MatchingCompareMinutiaSets(new_minutias, exist_minutias, &goodness);
		if (FvsOK != err) {
			return err;
		}
		if (FP_THRESHOLD >= goodness) {
			break;
		} 
	}
	if (MAX_FINGER_NO == i) {
		return FvsNoID;
	}
#endif

	if (FvsOK != (err = fdb_alloc_id(id)) ){
		ImageDestroy(image);
		ImageDestroy(mask);
		MinutiaSetDestroy(new_minutias);
		MinutiaSetDestroy(exist_minutias);
		return err;
	}
	
	fdb_id_set(*id);
	
	err = fdb_store_minutias(*id, new_minutias);
	
	ImageDestroy(image);
	ImageDestroy(mask);
	MinutiaSetDestroy(new_minutias);
	MinutiaSetDestroy(exist_minutias);

#if 0	/* 存储之后立即读出来验证 */
	new_minutias = MinutiaSetCreate(MAXMINUTIA);  
	err = fdb_load_minutias(*id, new_minutias);
	if (err ==  FvsOK) {
		DP("\tLoad after store minutias ok.\n");
	} else {
		DP("\tLoad after store minutias fail. return %d.\n", err);
	}
	MinutiaSetDestroy(new_minutias);
#endif

	return err;
}
Example #5
0
/** 
 * 函数描述:
 * 		将指纹对象image进行验证,
 * 		通过则返回匹配指纹的ID号和指纹匹配度 
 * 参数:
 *		rgb24_buf	:	24bit RGB图像缓冲区
 *		width		:	图像宽度
 *		height		:	图像高度
 *		id			:	与image匹配指纹的ID
 *		goodness	:	指纹匹配值
 * 返回值:
 *		验证通过则返回FvsOK,否则放回FvsError_t错误码。
 **/
FvsError_t 
fp_auth(FvsByte_t *rgb24_buf, FvsInt_t width, FvsInt_t height,
			FvsInt_t *id, FvsInt_t *goodness)
{
	FvsError_t err;
	FvsInt_t score;
	/* 最佳匹配使用变量 */
	FvsInt_t max_score, max_id;
	FvsInt_t i;
	FvsImage_t image, mask;
	FvsMinutiaSet_t exist_minutias, new_minutias;
	
	image = ImageCreate();
	if (FvsOK != (err = ImageSetSize(image, width, height))) {
		return err;
	}
	
	if (FvsOK != (err = rgb24_to_image(rgb24_buf, image))) {
		return err;
	}

	new_minutias = MinutiaSetCreate(MAXMINUTIA);  
	exist_minutias = MinutiaSetCreate(MAXMINUTIA);
	
	/* process source image */
	mask   = ImageCreate();
	err = ImageSetSize(mask, ImageGetWidth(image), ImageGetHeight(image));
	if (FvsOK != err) {
		return err;
	}
	
	if (FvsOK != (err = img_to_minutias(image,mask,new_minutias))) {
		return err;
	}

	/* 在算法没有对指纹进行分类之前,先使用遍历方法查找指纹特征向量 */
	max_score = 0;
	max_id = -1;
	for (i = 0; i < MAX_FINGER_NO; i++) {
		if (fdb_id_is_used(i)) {
			continue;
		}
		DP("---> Load index : %d minutia set...\n", i);
		if (FvsOK != (err = fdb_load_minutias(i, exist_minutias))) {
			goto exit_auth;
		}
		DP("----> Matching index : %d ...\n", i);
		err = MatchingCompareMinutiaSets(new_minutias, exist_minutias, &score);
		if (FvsOK != err) {
			return err;
		}
		DP("----> Match to index : %d score is : %d.\n", i, score);
		#ifdef FVS_BEST_MATCH
		/* 最佳匹配 */
		if (score >= FP_THRESHOLD) {
			if (score > max_score) {
				max_score = score;
				max_id = i;
			}
		}
		#else
		/* 首次匹配 */
		if (score >= FP_THRESHOLD) {
			*id = i;
			*goodness = score; 
			goto exit_auth;
		} 
		#endif
		
	}
	
#ifdef FVS_BEST_MATCH
	*id = max_id;
	*goodness = max_score;
#endif

exit_auth:
	ImageDestroy(image);
	ImageDestroy(mask);
	MinutiaSetDestroy(new_minutias);
	MinutiaSetDestroy(exist_minutias);
	
	return err;
}