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 + -
显示快捷键?