cvnorm.cpp.svn-base

来自「非结构化路识别」· SVN-BASE 代码 · 共 943 行 · 第 1/4 页

SVN-BASE
943
字号
{                                                                   \
    _entry_( normtype );                                            \
                                                                    \
    src += coi - 1;                                                 \
    for( ; size.height--; (char*&)src += step )                     \
    {                                                               \
        _case_( _op_, _update_op_, temptype, size.width, cn );      \
    }                                                               \
                                                                    \
    _exit_(1);                                                      \
                                                                    \
    return CV_OK;                                                   \
}



#define  ICV_DEF_NORM_DIFF_FUNC_2D( _op_, _diff_op_, _update_op_,       \
                                    _entry_, _case_, _exit_,            \
                                    name, srctype, normtype, temptype ) \
IPCVAPI_IMPL( CvStatus, name,( const srctype* src1, int step1,          \
                               const srctype* src2, int step2,          \
                               CvSize size, double* _norm ))            \
{                                                                       \
    _entry_( normtype );                                                \
                                                                        \
    for( ; size.height--; (char*&)src1 += step1,                        \
                          (char*&)src2 += step2 )                       \
    {                                                                   \
        _case_( _op_, _diff_op_, _update_op_, temptype, size.width, 1 );\
    }                                                                   \
                                                                        \
    _exit_(1);                                                          \
                                                                        \
    return CV_OK;                                                       \
}


#define  ICV_DEF_NORM_DIFF_FUNC_2D_COI( _op_, _diff_op_, _update_op_,   \
                                        _entry_, _case_, _exit_, name,  \
                                        srctype, normtype, temptype )   \
IPCVAPI_IMPL( CvStatus, name,( const srctype* src1, int step1,          \
                       const srctype* src2, int step2,                  \
                       CvSize size, int cn, int coi, double* _norm ))   \
{                                                                       \
    _entry_( normtype );                                                \
                                                                        \
    src1 += coi - 1;                                                    \
    src2 += coi - 1;                                                    \
    for( ; size.height--; (char*&)src1 += step1,                        \
                          (char*&)src2 += step2 )                       \
    {                                                                   \
        _case_( _op_, _diff_op_, _update_op_, temptype, size.width, cn );\
    }                                                                   \
                                                                        \
    _exit_(1);                                                          \
                                                                        \
    return CV_OK;                                                       \
}



#define ICV_DEF_NORM_FUNC_ALL( _abs_macro_, _abs_diff_macro_, flavor, srctype,          \
                               c_normtype, l_normtype, temptype )                       \
                                                                                        \
ICV_DEF_NORM_FUNC_2D( _abs_macro_, MAX,                                                 \
                      CV_NORM_ENTRY, ICV_DEF_NORM_CASE, CV_NORM_EXIT,                   \
                      icvNorm_Inf_##flavor##_C1R, srctype, c_normtype, temptype )       \
ICV_DEF_NORM_FUNC_2D( _abs_macro_, CV_ADD,                                              \
                      CV_NORM_ENTRY, ICV_DEF_NORM_CASE, CV_NORM_EXIT,                   \
                      icvNorm_L1_##flavor##_C1R, srctype, l_normtype, temptype )        \
ICV_DEF_NORM_FUNC_2D( CV_SQR, CV_ADD,                                                   \
                      CV_NORM_ENTRY, ICV_DEF_NORM_CASE, CV_NORM_L2_EXIT,                \
                      icvNorm_L2_##flavor##_C1R, srctype, l_normtype, temptype )        \
                                                                                        \
ICV_DEF_NORM_DIFF_FUNC_2D( _abs_macro_, _abs_diff_macro_, MAX,                          \
                        CV_NORM_ENTRY, ICV_DEF_NORM_DIFF_CASE, CV_NORM_EXIT,            \
                        icvNormDiff_Inf_##flavor##_C1R, srctype, c_normtype, temptype ) \
ICV_DEF_NORM_DIFF_FUNC_2D( _abs_macro_, _abs_diff_macro_, CV_ADD,                       \
                        CV_NORM_ENTRY, ICV_DEF_NORM_DIFF_CASE, CV_NORM_EXIT,            \
                        icvNormDiff_L1_##flavor##_C1R, srctype, l_normtype, temptype )  \
ICV_DEF_NORM_DIFF_FUNC_2D( CV_SQR, CV_SQR, CV_ADD,                                      \
                          CV_NORM_ENTRY, ICV_DEF_NORM_DIFF_CASE, CV_NORM_L2_EXIT,       \
                          icvNormDiff_L2_##flavor##_C1R, srctype, l_normtype, temptype) \
                                                                                        \
ICV_DEF_NORM_FUNC_2D_COI( _abs_macro_, MAX,                                             \
                         CV_NORM_ENTRY, ICV_DEF_NORM_CASE, CV_NORM_EXIT,                \
                         icvNorm_Inf_##flavor##_CnCR, srctype, c_normtype, temptype )   \
ICV_DEF_NORM_FUNC_2D_COI( _abs_macro_, CV_ADD,                                          \
                          CV_NORM_ENTRY, ICV_DEF_NORM_CASE, CV_NORM_EXIT,               \
                          icvNorm_L1_##flavor##_CnCR, srctype, l_normtype, temptype )   \
ICV_DEF_NORM_FUNC_2D_COI( CV_SQR, CV_ADD,                                               \
                          CV_NORM_ENTRY, ICV_DEF_NORM_CASE, CV_NORM_L2_EXIT,            \
                          icvNorm_L2_##flavor##_CnCR, srctype, l_normtype, temptype )   \
                                                                                        \
ICV_DEF_NORM_DIFF_FUNC_2D_COI( _abs_macro_, _abs_diff_macro_, MAX,                      \
                          CV_NORM_ENTRY, ICV_DEF_NORM_DIFF_CASE, CV_NORM_EXIT,          \
                          icvNormDiff_Inf_##flavor##_CnCR, srctype, c_normtype, temptype)\
ICV_DEF_NORM_DIFF_FUNC_2D_COI( _abs_macro_, _abs_diff_macro_, CV_ADD,                   \
                          CV_NORM_ENTRY, ICV_DEF_NORM_DIFF_CASE, CV_NORM_EXIT,          \
                          icvNormDiff_L1_##flavor##_CnCR,                               \
                          srctype, l_normtype, temptype )                               \
ICV_DEF_NORM_DIFF_FUNC_2D_COI( CV_SQR, CV_SQR, CV_ADD,                                  \
                          CV_NORM_ENTRY, ICV_DEF_NORM_DIFF_CASE, CV_NORM_L2_EXIT,       \
                          icvNormDiff_L2_##flavor##_CnCR,                               \
                          srctype, l_normtype, temptype )


ICV_DEF_NORM_FUNC_ALL( CV_NOP, CV_IABS, 8u, uchar, int, int64, int )
ICV_DEF_NORM_FUNC_ALL( CV_IABS, CV_IABS, 8s, char, int, int64, int )
ICV_DEF_NORM_FUNC_ALL( CV_IABS, CV_IABS, 16s, short, int, int64, int )
ICV_DEF_NORM_FUNC_ALL( fabs, fabs, 32s, int, double, double, double )
ICV_DEF_NORM_FUNC_ALL( fabs, fabs, 32f, float, double, double, double )
ICV_DEF_NORM_FUNC_ALL( fabs, fabs, 64f, double, double, double, double )


#define ICV_DEF_INIT_NORM_TAB_2D( FUNCNAME, FLAG )              \
static void icvInit##FUNCNAME##FLAG##Table( CvFuncTable* tab )  \
{                                                               \
    tab->fn_2d[CV_8U] = (void*)icv##FUNCNAME##_8u_##FLAG;       \
    tab->fn_2d[CV_8S] = (void*)icv##FUNCNAME##_8s_##FLAG;       \
    tab->fn_2d[CV_16S] = (void*)icv##FUNCNAME##_16s_##FLAG;     \
    tab->fn_2d[CV_32S] = (void*)icv##FUNCNAME##_32s_##FLAG;     \
    tab->fn_2d[CV_32F] = (void*)icv##FUNCNAME##_32f_##FLAG;     \
    tab->fn_2d[CV_64F] = (void*)icv##FUNCNAME##_64f_##FLAG;     \
}

ICV_DEF_INIT_NORM_TAB_2D( Norm_Inf, C1R )
ICV_DEF_INIT_NORM_TAB_2D( Norm_L1, C1R )
ICV_DEF_INIT_NORM_TAB_2D( Norm_L2, C1R )
ICV_DEF_INIT_NORM_TAB_2D( NormDiff_Inf, C1R )
ICV_DEF_INIT_NORM_TAB_2D( NormDiff_L1, C1R )
ICV_DEF_INIT_NORM_TAB_2D( NormDiff_L2, C1R )

ICV_DEF_INIT_NORM_TAB_2D( Norm_Inf, CnCR )
ICV_DEF_INIT_NORM_TAB_2D( Norm_L1, CnCR )
ICV_DEF_INIT_NORM_TAB_2D( Norm_L2, CnCR )
ICV_DEF_INIT_NORM_TAB_2D( NormDiff_Inf, CnCR )
ICV_DEF_INIT_NORM_TAB_2D( NormDiff_L1, CnCR )
ICV_DEF_INIT_NORM_TAB_2D( NormDiff_L2, CnCR )


/****************************************************************************************\
*                             N o r m   with    M A S K                                  *
\****************************************************************************************/


#define ICV_DEF_NORM_MASK_CASE( _mask_op_, _op_, _update_op_,\
                                temptype, len, cn )        \
{                                                          \
    for( x = 0; x <= (len) - 4; x += 4 )                   \
    {                                                      \
        temptype t0 = _mask_op_(mask[x],(src)[x*(cn)]);    \
        temptype t1 = _mask_op_(mask[x+1],(src)[(x+1)*(cn)]);\
                                                           \
        t0 = (temptype)_op_(t0);                           \
        t1 = (temptype)_op_(t1);                           \
                                                           \
        norm = _update_op_( norm, t0 );                    \
        norm = _update_op_( norm, t1 );                    \
                                                           \
        t0 = _mask_op_(mask[x+2],(src)[(x+2)*(cn)]);       \
        t1 = _mask_op_(mask[x+3],(src)[(x+3)*(cn)]);       \
                                                           \
        t0 = (temptype)_op_(t0);                           \
        t1 = (temptype)_op_(t1);                           \
                                                           \
        norm = _update_op_( norm, t0 );                    \
        norm = _update_op_( norm, t1 );                    \
    }                                                      \
                                                           \
    for( ; x < (len); x++ )                                \
    {                                                      \
        temptype t0 = _mask_op_(mask[x],(src)[x*(cn)]);    \
        t0 = (temptype)_op_(t0);                           \
        norm = _update_op_( norm, t0 );                    \
    }                                                      \
}


#define ICV_DEF_NORM_DIFF_MASK_CASE( _mask_op_, _op_, _diff_op_,     \
                                     _update_op_, temptype, len, cn )\
{                                                                   \
    for( x = 0; x <= (len) - 4; x += 4 )                            \
    {                                                               \
        temptype t0 = _mask_op_(mask[x],(src1)[x*(cn)] - (src2)[x*(cn)]);\
        temptype t1 = _mask_op_(mask[x+1],(src1)[(x+1)*(cn)] - (src2)[(x+1)*(cn)]);\
                                                                    \
        t0 = (temptype)_diff_op_(t0);                               \
        t1 = (temptype)_diff_op_(t1);                               \
                                                                    \
        norm = _update_op_( norm, t0 );                             \
        norm = _update_op_( norm, t1 );                             \
                                                                    \
        t0 = _mask_op_(mask[x+2],(src1)[(x+2)*(cn)] - (src2)[(x+2)*(cn)]); \
        t1 = _mask_op_(mask[x+3],(src1)[(x+3)*(cn)] - (src2)[(x+3)*(cn)]); \
                                                                    \
        t0 = (temptype)_diff_op_(t0);                               \
        t1 = (temptype)_diff_op_(t1);                               \
                                                                    \
        norm = _update_op_( norm, t0 );                             \
        norm = _update_op_( norm, t1 );                             \
    }                                                               \
                                                                    \
    for( ; x < (len); x++ )                                         \
    {                                                               \
        temptype t0 = _mask_op_(mask[x],(src1)[x*(cn)] - (src2)[x*(cn)]);\
        t0 = (temptype)_diff_op_(t0);                               \
        norm = _update_op_( norm, t0 );                             \
    }                                                               \
}



#define  CV_NORM_MASK_ENTRY_FLT( normtype )  \
    int  x;                                  \
    float maskTab[] = { 0.f, 1.f };          \
    normtype norm = 0



#define  ICV_DEF_NORM_MASK_FUNC_2D( _mask_op_, _op_, _update_op_,   \
                                    _entry_, _case_, _exit_,        \
                                    name, srctype, normtype, temptype )  \
IPCVAPI_IMPL( CvStatus, name, ( const srctype* src, int step,       \
                       const uchar* mask, int maskStep,             \
                       CvSize size, double* _norm ))                \
{                                                                   \
    _entry_( normtype );                                            \
                                                                    \
    for( ; size.height--; (char*&)src += step, mask += maskStep )   \
    {                                                               \
        _case_( _mask_op_, _op_, _update_op_,                       \
                temptype, size.width, 1 );                          \
    }                                                               \
                                                                    \
    _exit_(1);                                                      \

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?