?? match.h
字號:
// Match.h: interface for the CMatch class.
//
// written by Yang W.D. Jul.99 - Oct.99
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MATCH_H__F4573FC3_457E_11D3_B5D2_AC2E45000000__INCLUDED_)
#define AFX_MATCH_H__F4573FC3_457E_11D3_B5D2_AC2E45000000__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "comlib.h"
#include "MatchMsg.h"
//#include "Emult.h"
// peak result struct : max , min , peak
typedef struct tagSRESULT{
int TotalNumb;
float uRow[3];
float uCol[3];
float dRow[3]; // 標準差
float dCol[3]; // 標準差
float dRad[3]; // 標準差
float dDRow[3]; // 平方和
float dDCol[3];
float dDRad[3];
float fRatio[3];
int nCorrects[3];
void Init(int total)
{
TotalNumb = total;
for(int k=0;k<3;k++)
{
dCol[k] = dRow[k] = uCol[k] = uRow[k] = 0;
dDCol[k] = dDRow[k] = dDRad[k] = 0;
nCorrects[k] = 0;
fRatio[k] = 0.0f;
}
}
void Norm()
{
for(int k=0;k<3;k++)
{
uCol[k] /= TotalNumb;
uRow[k] /= TotalNumb;
dDRow[k] = sqrt( dRow[k]/TotalNumb );
dDCol[k] = sqrt( dCol[k]/TotalNumb );
dDRad[k] = sqrt( dDRow[k]*dDRow[k] + dDCol[k]*dDCol[k] );
dRow[k] = sqrt( dRow[k]/TotalNumb - uRow[k]*uRow[k]);
dCol[k] = sqrt( dCol[k]/TotalNumb - uCol[k]*uCol[k]);
dRad[k] = sqrt( dRow[k]*dRow[k] + dCol[k]*dCol[k] );
fRatio[k] = 1.0 * nCorrects[k]/TotalNumb;
}
}
}SRESULT;
#define LENSZ 80
typedef struct tagMatch_Test1_DataParm{
int Height;
char dir[LENSZ], reffile[LENSZ], refmaskfile[LENSZ], relfile[LENSZ], relmaskfile[LENSZ], resultfile[LENSZ];
POINT OrgRelxy, OrgRefxy;
POINT Relxy, Refxy;
SIZE SubSize, SubStep;
float RatioRef, RatioRel;
BOOL bFullSelect;
}Match_Test1_DataParm;
/*
static void Init(SRESULT &in , int total)
{
in.TotalNumb = total;
for(int k=0;k<3;k++)
{
in.dCol[k] = in.dRow[k] = in.uCol[k] = in.uRow[k] = 0;
in.nCorrects[k] = 0;
in.fRatio[k] = 0.0f;
}
}
static void Norm( SRESULT &in)
{
for(int k=0;k<3;k++)
{
in.uCol[k] /= in.TotalNumb;
in.uRow[k] /= in.TotalNumb;
in.dRow[k] = sqrt( in.dRow[k]/in.TotalNumb );
in.dCol[k] = sqrt( in.dCol[k]/in.TotalNumb );
in.fRatio[k] = 1.0 * in.nCorrects[k]/in.TotalNumb;
}
}
*/
/***************************************************/
/* 類CMatch實現圖象間匹配計算,包括光學圖象、DBS、*/
/* 實孔徑匹配等; */
/***************************************************/
class CMatch
{
public:
CMatchMsg m_Msg; // 試驗數據處理用,相關成象參數數據
CMatch();
virtual ~CMatch();
private:
// 歸一化互相關匹配計算
// 根據輸入匹配模板計算相關面
float **CalCorMap(BYTE **ref,BYTE ** rel, BYTE ** Mask, CSize s1,CSize s2);
// 計算光學圖象匹配相關面
float **CalCormap_Full_Spect(BYTE **ref,BYTE ** rel, CSize s1,CSize s2);
// 將DBS實時圖象L和R作為整體計算相關面
float **CalTwoPartsCorMap(BYTE **ref1,BYTE ** rel1, BYTE ** Mask1,
BYTE **ref2,BYTE ** rel2, BYTE ** Mask2,
CSize s1,CSize s2);
// 改進后的互相關匹配實現以及DSP板上的實現代碼
// 從DSP格式數據中讀入預先計算參考圖象數據并計算相關面
float **CalCormap_LoadDspFile(BYTE **ref,BYTE ** rel, CSize s1,CSize s2);
// DSP實現匹配算法代碼,需要先從DSP格式數據文件中載入預先計算數據
float **CalCormap_DSP_Code(BYTE ** ref, BYTE ** rel, CSize s1, CSize s2);
// DSP實現匹配算法代碼,計算匹配相關積
// return SumX
long CalSumXY_DSP_Code(long * pSumXY , BYTE * refimg, BYTE * relimg, CSize s1, CSize s2);
// 快速計算匹配相關面
// 輸入接口參數: refimg relimg Ey Dy size1 size2
// 輸出接口參數: Rxy
void CalRxy_Fast(BYTE * refimg, BYTE * relimg, float * Ey , float * Dy , float **dRxy , CSize s1, CSize s2);
void CalRxy_Fast(BYTE * refimg, BYTE **relimg, float * Ey , float * Dy , float **dRxy , CSize s1, CSize s2);
// 計算并輸出預處理數據到文件(DSP格式)
float **CalCormap_SaveToDsp(BYTE **ref,BYTE ** rel, BYTE ** Mask, CSize s1,CSize s2);
// 預先計算參考圖象匹配區灰度和及平方和
int PreCalImgRegExDx(BYTE ** img , BYTE **Mask, long *SumYY, long *SumY, int row, int col, int RegSize);
int PreCalImgRegExDx(BYTE * img , BYTE **Mask, long *SumYY, long *SumY, int row, int col, int RegSize);
public:
// 單個光學圖象匹配,整個實時圖區均有效
NPOT SingleMatch_Box(BYTE **ref, BYTE **rel, BYTE ** mask, int rR, int rC, int sR, int sC,POINT first);
NPOT SingleMatch_Box1(BYTE **ref, BYTE **rel, BYTE ** mask, int rR, int rC, int sR, int sC,BOOL flag);
// 單個光學圖象匹配,整個實時圖區均有效;可輸出DSP數據
NPOT SingleMatch_BoxSub(CString reffile , CString relfile , CString cordatafile);
// 單個光學圖象匹配,整個實時圖區均有效;可輸出DSP數據
NPOT SingleMatch_Box(CString reffile , CString relfile , CString cordatafile , CString maskfile, BOOL bSaveDsp , BOOL bVer);
// 單個實孔徑圖象匹配,輸入包括成象有效區圓環內外半徑;可輸出DSP數據
NPOT SingleMatch_Circ(CString reffile , CString relfile ,CString corfile, int r0, int r1 , BOOL bSaveDsp ,BOOL bVer , int nTSize , float fSigma);
// 單個DBS圖象匹配,輸入包括成象徑向掃描角
NPOT SingleMatch_Sect(CString reffile , CString relfile ,CString corfile, BOOL bVerL, BOOL bVerR, int nTSize , float fSigma , BOOL bFlightDir, float Theta);
// 單個實孔徑圖象匹配,輸入包括成象有效區圓環內外半徑;可輸出DSP數據
NPOT SingleMatch_Circ2(CString reffile , CString relfile ,CString corfile, int r0, int r1 , int nTSize);
// 大規模光學圖象匹配
void MultiMatch_Box( CString reffile , CString relfile ,
CString cordatafile , CString resultfile ,
CString postfile , int num, int step , int size, int ErrSize);
// 大規模雷達參考圖穿越式匹配(2002.05.29編寫)
void Match_Test1( CString reffile, CString refmaskfile, CString relfile, CString relmaskfile,
CString resultfile,
CPoint Relxy, CPoint Refxy, CSize SubSize, CSize SubStep, float RatioRef, float RatioRel,
BOOL bFullSelect = FALSE);
// 大規模雷達參考圖穿越式匹配(2002.05.29編寫)
void Match_Test1_int( Match_Test1_DataParm in);
// 多組實孔徑雷達圖象匹配
void MultiMatch_Circ( CString reffile , CString relfile ,
CString datafile , CString resultfile,
CString postfile, int num, int r0, int r1 , int ErrSize = 3 ,int TSIZE = 9);
// 利用DSP實現代碼優化
void MultiMatch_Circ_DspCode( CString reffile , CString relfile ,
CString datafile , CString resultfile,
CString postfile, int num, int r0, int r1 , int ErrSize = 3 ,int TSIZE = 9);
void MultiMatch_Circ( SMATCH in , BOOL bDspCode = FALSE);
void MultiMatch_Sect( SMATCH in );
// 多組DBS雷達圖象匹配
// 左右圖象分別在后面加 "L" or "R"
void MultiMatch_Sect( CString reffile , CString relfile ,
CString datafile , CString resultfile,
CString postfile, int num, BOOL FlightDir , float fDirDeg = 20 , int nSize = 128 ,
int ErrSize = 3 , int TSize = 9, BOOL bVerL = FALSE, BOOL bVerR = FALSE , float fRatioLR = 0.5);
// 輸出單個匹配結果到文件,并判斷
NPOT OutputSigleResultToFile( SRESULT &rlt, COORDINATE Local, float **Rxy , int mr, int mc, CString OutFileName, int nErrSize , int TSize = 0 );
};
#endif // !defined(AFX_MATCH_H__F4573FC3_457E_11D3_B5D2_AC2E45000000__INCLUDED_)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -