📄 enhancedlg.cpp
字号:
}
/*
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 + -