1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// 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_)