// MatchImpl.h: interface for the CMatchImpl class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_MATCHIMPL_H__55548055_7034_4B12_A642_2771D6DFBAA4__INCLUDED_) #define AFX_MATCHIMPL_H__55548055_7034_4B12_A642_2771D6DFBAA4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "InspectionBuffer.h" #include "SISMatch.h" #include "SISMath.h" #include "MatchBuffer.h" typedef __int64 int64; typedef unsigned char uchar; typedef unsigned short ushort; class CResultBufferInt64 { int m_Width, m_Height; int m_DataSpace; int64 *m_pData; public: CResultBufferInt64() { m_pData= NULL; m_Width= 0; m_Height= 0; m_DataSpace= 0; } ~CResultBufferInt64(); BOOL IsValidBuffer(){return m_pData != NULL;} int GetWidth(){return m_Width;} int GetHeight(){return m_Height;} void ReleaseSpace(); BOOL SetSize(int width, int height); void SetData(int x, int y, int64 val) { *(m_pData+ x+ y*m_Width)= val; } int64 GetData(int x, int y) { return *(m_pData+ x+ y*m_Width); } int64 *GetDataAddress(int x= 0, int y= 0) { return m_pData+ x+ y*m_Width; } BOOL GetBestMatchResult(stSISMatchResult &result, double acceptance, BOOL bUseInterpolate); }; class CResultBufferFloat { int m_Width, m_Height; int m_DataSpace; float *m_pData; public: CResultBufferFloat() { m_pData= NULL; m_Width= 0; m_Height= 0; m_DataSpace= 0; } ~CResultBufferFloat(); BOOL IsValidBuffer(){return m_pData != NULL;} int GetWidth(){return m_Width;} int GetHeight(){return m_Height;} void ReleaseSpace(); BOOL SetSize(int width, int height); void SetData(int x, int y, float val) { *(m_pData+ x+ y*m_Width)= val; } float GetData(int x, int y) { return *(m_pData+ x+ y*m_Width); } float *GetDataAddress(int x= 0, int y= 0) { return m_pData+ x+ y*m_Width; } BOOL GetBestMatchResult(stSISMatchResult &result, double acceptance, BOOL bUseInterpolate); }; class CMatchImpl { stSISMatchParam m_MatchParam; CSISBuffer m_BigOriginal; CSISBuffer m_SmallOriginal; BOOL m_bSmallBufferChanged; BOOL m_bBigBufferChanged; CRect m_BigRect; CRect m_SmallRect; CUShortBuff m_SmallBuff16; CUShortBuff m_BigBuff16; CByteBuff m_BigBuff8; CByteBuff m_SmallBuff8; CByteBuff m_tempBuffer8; CUShortBuff m_tempBuffer16; CResultBufferInt64 m_sumBuffer; CResultBufferInt64 m_sqSumBuffer; CResultBufferFloat m_resultBuffer; CResultBufferInt64 m_resNumBuffer; CResultBufferInt64 m_resDenomBuffer; public: CMatchImpl(); virtual ~CMatchImpl(); BOOL SetBigImage(CSISBuffer bigBuff, CRect roi); BOOL SetSmallImage(CSISBuffer smallBuff, CRect roi); BOOL DoTemplateMatch(stSISMatchResult &matchResult, stSISMatchParam param); BOOL MatchImpl(CUShortBuff &smallBuffer, CUShortBuff &bigBuffer, stSISMatchResult &matchResult, double acceptance, BOOL bUseInterpolate); BOOL MatchImpl(CByteBuff &smallBuffer, CByteBuff &bigBuffer, stSISMatchResult &matchResult, double acceptance, BOOL bUseInterpolate); BOOL MatchImpl(CSISBuffer &smallBuffer, CSISBuffer &bigBuffer, stSISMatchResult &matchResult, double acceptance, BOOL bUseInterpolate); BOOL MatchImpl_Coef(CUShortBuff &smallBuffer, CUShortBuff &bigBuffer, stSISMatchResult &matchResult, double acceptance, BOOL bUseInterpolate); BOOL MatchImpl_Coef(CByteBuff &smallBuffer, CByteBuff &bigBuffer, stSISMatchResult &matchResult, double acceptance, BOOL bUseInterpolate); BOOL Check_Buffer(CUShortBuff &smallBuffer, CUShortBuff &bigBuffer); BOOL Check_Buffer(CByteBuff &smallBuffer, CByteBuff &bigBuffer); }; /* int64 CrossCorr_8u_C1(const uchar * vec1, const uchar * vec2, int len ); BOOL MatchSimd(CByteBuff &smallBuffer, CByteBuff &bigBuffer, stSISMatchResult &matchResult, stSISMatchParam matchParam); */ #endif // !defined(AFX_MATCHIMPL_H__55548055_7034_4B12_A642_2771D6DFBAA4__INCLUDED_)