cvmeansdv.cpp.svn-base
来自「非结构化路识别」· SVN-BASE 代码 · 共 683 行 · 第 1/3 页
SVN-BASE
683 行
t = _mask_op_(m, (src)[(i + 1)*(cn)]); \
(pix) -= m; \
s += t; \
sq += ((accsqtype)t)*t; \
\
m = ((mask)[i + 2] == 0) - 1; \
t = _mask_op_(m, (src)[(i + 2)*(cn)]); \
(pix) -= m; \
s += t; \
sq += ((accsqtype)t)*t; \
\
m = ((mask)[i + 3] == 0) - 1; \
t = _mask_op_(m, (src)[(i + 3)*(cn)]); \
(pix) -= m; \
sum[0] += s + t; \
sqsum[0] += sq + ((accsqtype)t)*t; \
} \
\
for( ; i < (len); i++ ) \
{ \
int m = ((mask)[i] == 0) - 1; \
temptype t = _mask_op_(m, (src)[i*(cn)]); \
(pix) -= m; \
s1 += t; \
sq1 += ((accsqtype)t)*t; \
} \
\
sum[0] += s1; \
sqsum[0] += sq1; \
}
#define CV_IMPL_MEAN_SDV_MASK_1D_CASE_C2( _mask_op_, temptype, acctype, accsqtype, \
src, mask, len, sum, sqsum, pix ) \
{ \
int i; \
\
for( i = 0; i < (len); i += 2 ) \
{ \
int m = ((mask)[i] == 0) - 1; \
temptype t; \
\
(pix) -= m; \
t = _mask_op_(m, (src)[i]); \
(sum)[0] += t; \
(sqsum)[0] += ((accsqtype)t)*t; \
\
t = _mask_op_(m, (src)[i + 1]); \
(sum)[1] += t; \
(sqsum)[1] += ((accsqtype)t)*t; \
} \
}
#define CV_IMPL_MEAN_SDV_MASK_1D_CASE_C3( _mask_op_, temptype, acctype, accsqtype, \
src, mask, len, sum, sqsum, pix ) \
{ \
int i; \
\
for( i = 0; i < (len); i += 3 ) \
{ \
int m = ((mask)[i] == 0) - 1; \
temptype t; \
\
(pix) -= m; \
t = _mask_op_(m, (src)[i]); \
(sum)[0] += t; \
(sqsum)[0] += ((accsqtype)t)*t; \
\
t = _mask_op_(m, (src)[i + 1]); \
(sum)[1] += t; \
(sqsum)[1] += ((accsqtype)t)*t; \
\
t = _mask_op_(m, (src)[i + 2]); \
(sum)[2] += t; \
(sqsum)[2] += ((accsqtype)t)*t; \
} \
}
#define CV_IMPL_MEAN_SDV_MASK_1D_CASE_C4( _mask_op_, temptype, acctype, accsqtype, \
src, mask, len, sum, sqsum, pix ) \
{ \
int i; \
\
for( i = 0; i < (len); i += 4 ) \
{ \
int m = ((mask)[i] == 0) - 1; \
temptype t; \
\
(pix) -= m; \
t = _mask_op_(m, (src)[i]); \
(sum)[0] += t; \
(sqsum)[0] += ((accsqtype)t)*t; \
\
t = _mask_op_(m, (src)[i + 1]); \
(sum)[1] += t; \
(sqsum)[1] += ((accsqtype)t)*t; \
\
t = _mask_op_(m, (src)[i + 2]); \
(sum)[2] += t; \
(sqsum)[2] += ((accsqtype)t)*t; \
\
t = _mask_op_(m, (src)[i + 3]); \
(sum)[3] += t; \
(sqsum)[3] += ((accsqtype)t)*t; \
} \
}
#define CV_MEAN_SDV_ENTRY( sumtype, sumsqtype ) \
sumtype sum[4] = {0,0,0,0}; \
sumsqtype sqsum[4] = {0,0,0,0}
#define CV_MEAN_SDV_MASK_ENTRY( sumtype, sumsqtype )\
sumtype sum[4] = {0,0,0,0}; \
sumtype sqsum[4] = {0,0,0,0}; \
int pix = 0
#define CV_MEAN_SDV_MASK_ENTRY_FLT( sumtype, sumsqtype )\
float maskTab[] = { 1.f, 0.f }; \
sumtype sum[4] = {0,0,0,0}; \
sumtype sqsum[4] = {0,0,0,0}; \
int pix = 0
#define CV_MEAN_SDV_EXIT( pix, cn ) \
{ \
double scale = pix ? 1./pix : 0; \
for( int k = 0; k < cn; k++ ) \
{ \
double mn = sum[k]*scale; \
mean[k] = mn; \
sdv[k] = sqrt( sqsum[k]*scale - mn*mn );\
} \
}
#define CV_IMPL_MEAN_SDV_FUNC_2D( _entry_, _exit_, \
flavor, cn, srctype, sumtype, sumsqtype,\
temptype, acctype, accsqtype ) \
IPCVAPI_IMPL( CvStatus, icvMean_StdDev_##flavor##_C##cn##R, \
( const srctype* src, int step, \
CvSize size, double* mean, double* sdv )) \
{ \
_entry_( sumtype, sumsqtype ); \
int len = size.width*(cn), height = size.height; \
\
for( ; size.height--; (char*&)src += step ) \
{ \
CV_IMPL_MEAN_SDV_1D_CASE_C##cn( temptype, acctype, accsqtype,\
src, len, sum, sqsum ); \
} \
\
len = size.width*height; \
_exit_( len, cn ); \
\
return CV_OK; \
}
#define CV_IMPL_MEAN_SDV_FUNC_2D_COI( _entry_, _exit_, \
flavor, srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
IPCVAPI_IMPL( CvStatus, icvMean_StdDev_##flavor##_CnCR, \
( const srctype* src, int step, \
CvSize size, int cn, int coi, \
double* mean, double* sdv )) \
{ \
_entry_( sumtype, sumsqtype ); \
int len = size.width*(cn), height = size.height; \
(src) += coi - 1; \
\
for( ; size.height--; (char*&)src += step ) \
{ \
CV_IMPL_MEAN_SDV_1D_CASE_COI( temptype, acctype, accsqtype, \
src, len, sum, sqsum, cn ); \
} \
\
len = size.width*height; \
_exit_( len, 1 ); \
\
return CV_OK; \
}
#define CV_IMPL_MEAN_SDV_MASK_FUNC_2D( _mask_op_, _entry_, _exit_, \
flavor, cn, srctype, sumtype, sumsqtype,\
temptype, acctype, accsqtype ) \
IPCVAPI_IMPL( CvStatus, icvMean_StdDev_##flavor##_C##cn##MR, \
( const srctype* src, int step, \
const uchar* mask, int maskStep, \
CvSize size, double* mean, double* sdv )) \
{ \
_entry_( sumtype, sumsqtype ); \
\
for( ; size.height--; \
(char*&)src += step, (char*&)mask += maskStep ) \
{ \
CV_IMPL_MEAN_SDV_MASK_1D_CASE_C##cn( _mask_op_, temptype, \
acctype, accsqtype, src, mask, size.width, sum, sqsum, pix);\
} \
\
_exit_( pix, cn ); \
\
return CV_OK; \
}
#define CV_IMPL_MEAN_SDV_MASK_FUNC_2D_COI( _mask_op_, _entry_, _exit_, \
flavor, srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
IPCVAPI_IMPL( CvStatus, icvMean_StdDev_##flavor##_CnCMR, \
( const srctype* src, int step, \
const uchar* mask, int maskStep, \
CvSize size, int cn, int coi, \
double* mean, double* sdv )) \
{ \
_entry_( sumtype, sumsqtype ); \
(src) += coi - 1; \
\
for( ; size.height--; \
(char*&)src += step, (char*&)mask += maskStep ) \
{ \
CV_IMPL_MEAN_SDV_MASK_1D_CASE_COI( _mask_op_, temptype, \
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?