📄 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 + -