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

📄 match.h

📁 图像处理软件,功能比较基础
💻 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 + -