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

📄 enhancedlg.cpp

📁 指纹分析源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:

}
/*
void CEnhanceDlg::OnButtonEnhance() 
{
	int n =0,tmp;
	
	n=	FgsCompareMinutiaSetsEx(m_minutia[0], m_minutia[1], 30, m_buffer);


	int c1,c2;
	c1 = FgsMinutiaSetGetCount(m_minutia[0]);
	c2= FgsMinutiaSetGetCount(m_minutia[1]) ;

	tmp = abs(FgsMinutiaSetGetCount(m_minutia[0]) - FgsMinutiaSetGetCount(m_minutia[1]));

	UpdateData(FALSE);
		
}
*/

void CEnhanceDlg::OnOpenFile2() 
{
	CFileDialog dlg(TRUE,0,0,OFN_HIDEREADONLY,"BMP文件(*.bmp)|*.bmp|");

	dlg.DoModal();
	 m_strFileName =dlg.GetPathName()  ;  

	if (m_strFileName.IsEmpty()) return;

	if (FgsOK==FgsImageImport(m_image[1], (const FgsString)m_strFileName.GetBuffer(m_strFileName.GetLength()))){
	   		
		m_fileName2 = dlg.GetFileName();
		FgsFloat  peakHeight=0.0,freq;
		
		DWORD t=::GetTickCount();
		
		//step 1
		FgsNormalize(m_image[1], m_imgNorm);
		//step 2
		FgsRetrieveOriMap(m_imgNorm, m_oriMap, m_relyMap, 0.3f, (FgsFloat*)m_buffer);
		//step 3
		peakHeight = FgsMeasureMedianFreq(m_imgNorm, m_oriMap, &freq, m_buffer);
		//step 4
		FgsRetrieveMask(m_imgNorm, m_oriMap, m_mask, peakHeight * 0.18f, m_buffer);
		//step 5
		FgsEnhanceByGabor(m_imgNorm, m_oriMap,m_mask,freq ,  m_gaborBank, m_buffer);	
		//step 6
		FgsBinarize(m_imgNorm, m_imgBin);	
		//step 7
		FgsSlenderize(m_imgBin,8, m_oriMap);
		//step 8
		FgsExtractMinutia(m_minutia[1], m_imgBin, m_oriMap, m_mask, m_relyMap);
					
		m_minuCount2.Format("%d", FgsMinutiaSetGetCount(m_minutia[1]));	
		
		FgsMinutia minu;
		m_lstMinuSet2.ResetContent();
        CString s;  	FgsPoint p;
		FgsInt ang;

		for (int i=0; i < FgsMinutiaSetGetCount(m_minutia[1]);i++){
			minu = FgsMinutiaSetGetItem(m_minutia[1], i);
			p = FgsMinutiaGetPosition(minu);		
		
			ang = (int)floor(FgsMinutiaGetDirection(minu) * 180 /MY_PI+0.5);
			s.Format("%d    %d    %d", p.x ,p.y , ang);
			m_lstMinuSet2.AddString(s);        
		}

		FgsShowImage(m_sdc[1], m_image[1]);
		UpdateData(FALSE);

	}
	
}

void CEnhanceDlg::Onjinghua() 
{
//	FgsEnhanceByGabor(m_imgNorm, m_oriMap,m_mask,freq ,  m_gaborBank, m_buffer);	
//	FgsBinarize(m_imgNorm, m_imgBina);	
//	FgsShowImage(m_sdc[0], m_imgBina);
    FgsBinarize(m_imgNorm, m_imgBin);	
	FgsShowImage(m_sdc[1], m_imgBin);

//	FgsShowField(m_sdc, m_mask, 4 ,FgsTrue);

//	UpdateData(FALSE);
}
void CEnhanceDlg::Onxihua() 
{
        FgsBinarize(m_imgNorm, m_imgBin);	
		FgsSlenderize(m_imgBin,8, m_oriMap);
//		FgsShowImage(m_sdc[0], m_imgBin);
/*}
void CEnhanceDlg::Onxihua() 
{*/
      //  FgsBinarize(m_imgNorm, m_imgBin1);	
	//	FgsSlenderize(m_imgBinb,8, m_oriMap);
		FgsShowImage(m_sdc[1], m_imgBin);
}

void CEnhanceDlg::OnButtonRefresh() 
{
	FgsShowImage(m_sdc[1], m_image[1]);
	FgsShowImage(m_sdc[0], m_image[0]);
	
}

void CEnhanceDlg::WriteLog(const char *text)
{
	CString s;
	s.Format("%s\r\n", text);

    m_strOutput = s + m_strOutput;

	if (m_strOutput.GetLength() > 20000){
		m_strOutput.Left( 20000);
	}

	UpdateData(FALSE);
}

FgsMinutia CEnhanceDlg::GetSelMinu(CListBox &lstMinuSet, int i)
{
	int index = lstMinuSet.GetCurSel();

	FgsMinutia minu=NULL;

	if (index != LB_ERR ){
		CString s, tmp;
		int p, x, y;

		lstMinuSet.GetText(index, s);

		p=s.Find(" ");
		tmp=s.Left(p);
		tmp.TrimRight(); 
		x =atoi(tmp);

		s=s.Right(s.GetLength()-p);

		s.TrimLeft(); s.TrimRight();
		p=s.Find(" ");
		tmp=s.Left(p);
		tmp.TrimRight(); 
		y =atoi(tmp);
			
		minu = FgsMinutiaSetGetSpecific(m_minutia[i], x,y);	

	}

	return minu;

}

void CEnhanceDlg::OnSelchangeListMinuSet1() 
{

	FgsMinutia minu = GetSelMinu(m_lstMinuSet1, 0);
	
	if (minu){
		FgsShowImage(m_sdc[0], m_image[0]);
		FgsDrawMinutia(m_sdc[0], minu, 2,  10);	

		int i;

		FgsMinutia tmp;

		if (m_star1){
			FgsDestroyStar(m_star1);
		}
	
		m_star1 = FgsGenerateStar(m_minutia[0], minu);

	//	FgsSetForeColor(m_sdc[0], 4);

		for (i=0; i < FgsStarGetNeighborCount(m_star1); i++){
             tmp = FgsStarGetNeighborItem(m_star1, i);
			 if (tmp){
			//	 FgsDrawLinkage(m_sdc[0], minu, tmp);
				 FgsDrawMinutia(m_sdc[0], tmp, 4,  10);	
			 }

		}

	}

}

void CEnhanceDlg::OnSelchangeListMinuSet2() 
{

	FgsMinutia minu = GetSelMinu(m_lstMinuSet2, 1);
	
	if (minu){
		FgsShowImage(m_sdc[1], m_image[1]);
		FgsDrawMinutia(m_sdc[1], minu, 2,  10);	

		
		int i;

		FgsMinutia tmp;

		if (m_star2){
			FgsDestroyStar(m_star2);
		}
	
		m_star2 = FgsGenerateStar(m_minutia[1], minu);

		FgsSetForeColor(m_sdc[1], 4);
		for (i=0; i < FgsStarGetNeighborCount(m_star2); i++){
             tmp = FgsStarGetNeighborItem(m_star2, i);
			 if (tmp){
			//	 FgsDrawLinkage(m_sdc[1], minu, tmp);
				 FgsDrawMinutia(m_sdc[1], tmp, 4,  10);	
			 }

		}

	}
}

void CEnhanceDlg::OnButtonGo() 
{

	if (m_star1 ==NULL || m_star2==NULL) return;
    CString s;
	m_strOutput ="";

	int c=0, c1=0, mi = FgsStarGetNeighborCount(m_star1); 

	if (mi > FgsStarGetNeighborCount(m_star2)) mi =  FgsStarGetNeighborCount(m_star2);


	for (int i=0 ; i <  FgsStarGetNeighborCount(m_star1); i++){
		for (int j=0 ; j <  FgsStarGetNeighborCount(m_star2); j++){
			c=0;
            c +=FgsStarDiffNeighborDistance( m_star1,  i,   m_star2, j ); 
			c +=(int)(FgsStarDiffNeighborDeltaAngle( m_star1,  i,   m_star2, j ) * 180 /MY_PI);
			c +=(int)(FgsStarDiffNeighborThetaAngle( m_star1,  i,   m_star2, j )* 180 /MY_PI);


			if (c <= 18) c1++;

			if (c1 >= 0.6 * mi) {
	//			AfxMessageBox("OK" );
                WriteLog("一致");
			
				return;
			}

		}
	}

		
	for ( i=0 ; i <  FgsStarGetNeighborCount(m_star1); i++){
		for (int j=0 ; j <  FgsStarGetNeighborCount(m_star2); j++){			
        
			s.Format("[i=%d, j=%d] -- distance differece =%d, delta angle=%d, theta angle=%d",  
			          i, j, FgsStarDiffNeighborDistance( m_star1,  i,   m_star2, j ), 
					  (int)(FgsStarDiffNeighborDeltaAngle( m_star1,  i,   m_star2, j ) * 180 /MY_PI), 
					  (int)(FgsStarDiffNeighborThetaAngle( m_star1,  i,   m_star2, j )* 180 /MY_PI));
			WriteLog(s.GetBuffer(s.GetLength()));


		}
	}

}



/*

void CAuthentication::Onbidui() 
{

	int res;
	res=FingerMatch(m_image[0],m_image[1],cenx1,ceny1,cenx2,ceny2);
	if(res>=theApp.m_nMatchDoor)
	{
		CDialog *pdlg=new CDialog();
		pdlg->Create(IDD_MATCH_OK_DLG);
		pdlg->ShowWindow(SW_SHOWNORMAL   );
//		MessageBox("两枚指纹相符合!!!","结果",MB_OK);
	}
	else
	{
		CDialog *pdlg=new CDialog();
		pdlg->Create(IDD_MATCH_NOT_DLG);
		pdlg->ShowWindow(SW_SHOWNORMAL   );
//		MessageBox("两枚指纹不符!","结果",MB_OK);
	}
}

HBRUSH CAuthentication::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
		if(nCtlColor==CTLCOLOR_EDIT||nCtlColor==CTLCOLOR_LISTBOX)
		return hbr;
	else
	{
		pDC->SetBkMode(TRANSPARENT);
		pDC->SetTextColor(theApp.m_textcolor);
		return ((HBRUSH)::GetStockObject(HOLLOW_BRUSH));
	}

	// TODO: Return a different brush if the default is not desired
	return hbr;
}
BOOL CAuthentication::OnEraseBkgnd(CDC* pDC) 
{
	theApp.backbmp.ReadFile(theApp.m_backfilename);//"c:\\z1.bmp"	
	CRect rect;
	GetClientRect(&rect);
	for (int nX = 0; nX < rect.Width(); nX +=theApp.backbmp. m_Width)
		for (int nY = 0; nY < rect.Height(); nY +=theApp.backbmp. m_Height)
			theApp.backbmp.DrawDib(pDC,1,nX,nY);
	return TRUE;
}




  void CIdDetect::Onsousuo() 
{
	// TODO: Add your control notification handler code here
	int res=0;
	BYTE *buff;
	bool isdetect=false;
if(!theApp.testdb)
{
	if(!m_pSet)
	{
		MessageBox("指纹数据库无法打开","注意",MB_OK);
		return;
	}
	m_pSet->Requery();
	while(!m_pSet->IsEOF())
	{
		if(m_pSet->m_type==type)
		{
        	buff=m_pSet->m_feature.GetData();
        	if(m_pSet->m_feature.GetSize()>3)
			{
	        	memcpy(m_Minutia2,buff,MAXNUM*DIM+4);//m_pSet->m_feature.GetSize());
				res=FingerMatch(m_Minutia1,m_Minutia2,cenx,ceny,m_pSet->m_centerx,m_pSet->m_centery);
            	if(res>=theApp.m_nMatchDoor)
				{
					isdetect=true;
					break;
				}
			}
		}
		m_pSet->MoveNext();
	}
	if(isdetect)
		MessageBox("此枚指纹与"+m_pSet->m_name,"相符",MB_OK);
	else
		MessageBox("对不起!据库中没有注册的指纹!!","注意",MB_OK);

}
else
{
	FPTEST* test;
	test=theApp.testdb;
	for(int i=0;i<theApp.num;i++)
	{
		if(test->type==type)
		{
			res=FingerMatch(m_Minutia1,test->minu,cenx,ceny,test->centerx,test->centery);
           	if(res>=theApp.m_nMatchDoor)
			{
				isdetect=true;
				break;
			}
		}
		test++;
	}
	if(isdetect)
		MessageBox("此枚指纹与"+m_pSet->m_name,"相符",MB_OK);
	else
		MessageBox("对不起!据库中没有注册的指纹!!","注意",MB_OK);

}

}*/

⌨️ 快捷键说明

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