69,371
社区成员
发帖
与我相关
我的任务
分享
#define _COMPARE_TEMPLATE(MXC) \
Pair* compare_##MXC (Pair* pairs_iterator, \
const TYPEOF_##MXC * L1_pt, \
const TYPEOF_##MXC * L2_pt, \
int K1, int K2, int ND, float thresh) \
{ \
int k1, k2 ; \
const PROMOTE_##MXC maxval = MAXVAL_##MXC ; \
for(k1 = 0 ; k1 < K1 ; ++k1, L1_pt += ND ) { \
\
PROMOTE_##MXC best = maxval ; \
PROMOTE_##MXC second_best = maxval ; \
int bestk = -1 ; \
\
/* For each point P2[k2] in the second image... */ \
for(k2 = 0 ; k2 < K2 ; ++k2, L2_pt += ND) { \
\
int bin ; \
PROMOTE_##MXC acc = 0 ; \
for(bin = 0 ; bin < ND ; ++bin) { \
PROMOTE_##MXC delta = \
((PROMOTE_##MXC) L1_pt[bin]) - \
((PROMOTE_##MXC) L2_pt[bin]) ; \
acc += delta*delta ; \
} \
\
/* Filter the best and second best matching point. */ \
if(acc < best) { \
second_best = best ; \
best = acc ; \
bestk = k2 ; \
} else if(acc < second_best) { \
second_best = acc ; \
} \
} \
\
L2_pt -= ND*K2 ; \
\
/* Lowe's method: accept the match only if unique. */ \
if(thresh * (float) best <= (float) second_best && \
bestk != -1) { \
pairs_iterator->k1 = k1 ; \
pairs_iterator->k2 = bestk ; \
pairs_iterator->score = best ; \
pairs_iterator++ ; \
} \
} \
\
return pairs_iterator ; \
} \
_COMPARE_TEMPLATE( mxDOUBLE_CLASS )
_COMPARE_TEMPLATE( mxSINGLE_CLASS )
_COMPARE_TEMPLATE( mxINT8_CLASS )
_COMPARE_TEMPLATE( mxUINT8_CLASS )
#include <iostream>
using namespace std;
#define X "abc"##"def" // 将abc和def连起来
int main(void)
{
cout << X << endl; // 输出abcdef
return 0;
}