#include "_cxcore.h"
Macros | |
#define | ICV_NORM_CASE(_op_,_update_op_, worktype, len) |
#define | ICV_NORM_COI_CASE(_op_,_update_op_, worktype, len, cn) |
#define | ICV_NORM_DIFF_CASE(_op_,_update_op_, worktype, len) |
#define | ICV_NORM_DIFF_COI_CASE(_op_, _update_op_, worktype, len, cn) |
#define | ICV_DEF_NORM_NOHINT_BLOCK_FUNC_2D(name, _op_, _update_op_, post_func, arrtype, normtype, worktype, block_size) |
#define | ICV_DEF_NORM_NOHINT_FUNC_2D(name, _op_, _update_op_,post_func, arrtype, normtype, worktype, block_size) |
#define | ICV_DEF_NORM_HINT_FUNC_2D(name, _op_, _update_op_,post_func, arrtype, normtype, worktype, block_size) |
#define | ICV_DEF_NORM_NOHINT_BLOCK_FUNC_2D_COI(name, _op_,_update_op_, post_func, arrtype,normtype, worktype, block_size) |
#define | ICV_DEF_NORM_NOHINT_FUNC_2D_COI(name, _op_,_update_op_, post_func,arrtype, normtype, worktype, block_size) |
#define | ICV_DEF_NORM_DIFF_NOHINT_BLOCK_FUNC_2D(name, _op_,_update_op_, post_func, arrtype,normtype, worktype, block_size) |
#define | ICV_DEF_NORM_DIFF_NOHINT_FUNC_2D(name, _op_,_update_op_, post_func,arrtype, normtype, worktype, block_size) |
#define | ICV_DEF_NORM_DIFF_HINT_FUNC_2D(name, _op_,_update_op_, post_func,arrtype, normtype, worktype, block_size) |
#define | ICV_DEF_NORM_DIFF_NOHINT_BLOCK_FUNC_2D_COI(name, _op_, _update_op_, post_func, arrtype,normtype, worktype, block_size) |
#define | ICV_DEF_NORM_DIFF_NOHINT_FUNC_2D_COI(name, _op_,_update_op_, post_func,arrtype, normtype, worktype, block_size) |
#define | ICV_NORM_MASK_CASE(_op_,_update_op_, worktype, len) |
#define | ICV_NORM_DIFF_MASK_CASE(_op_, _update_op_, worktype, len) |
#define | ICV_NORM_MASK_COI_CASE(_op_, _update_op_, worktype, len, cn) |
#define | ICV_NORM_DIFF_MASK_COI_CASE(_op_, _update_op_, worktype, len, cn) |
#define | ICV_DEF_NORM_MASK_NOHINT_BLOCK_FUNC_2D(name, _op_,_update_op_, post_func, arrtype,normtype, worktype, block_size) |
#define | ICV_DEF_NORM_MASK_NOHINT_FUNC_2D(name, _op_, _update_op_, post_func, arrtype, normtype, worktype, block_size) |
#define | ICV_DEF_NORM_MASK_NOHINT_BLOCK_FUNC_2D_COI(name, _op_, _update_op_, post_func, arrtype,normtype, worktype, block_size) |
#define | ICV_DEF_NORM_MASK_NOHINT_FUNC_2D_COI(name, _op_,_update_op_, post_func,arrtype, normtype, worktype, block_size) |
#define | ICV_DEF_NORM_DIFF_MASK_NOHINT_BLOCK_FUNC_2D(name,_op_, _update_op_, post_func, arrtype,normtype, worktype, block_size) |
#define | ICV_DEF_NORM_DIFF_MASK_NOHINT_FUNC_2D(name, _op_,_update_op_, post_func,arrtype, normtype, worktype, block_size) |
#define | ICV_DEF_NORM_DIFF_MASK_NOHINT_BLOCK_FUNC_2D_COI(name, _op_, _update_op_, post_func, arrtype,normtype, worktype, block_size) |
#define | ICV_DEF_NORM_DIFF_MASK_NOHINT_FUNC_2D_COI(name, _op_, _update_op_, post_func,arrtype, normtype, worktype, block_size) |
#define | ICV_DEF_NORM_FUNC_ALL_C(flavor, _abs_, _abs_diff_, arrtype, worktype) |
#define | ICV_DEF_NORM_FUNC_ALL_L1(flavor, _abs_, _abs_diff_, hintp_func, nohint_func, arrtype, normtype, worktype, block_size) |
#define | ICV_DEF_NORM_FUNC_ALL_L2(flavor, hintp_func, nohint_func, arrtype,normtype, worktype, block_size, sqr_macro) |
#define | ICV_DEF_INIT_NORM_TAB_2D(FUNCNAME, FLAG) |
Functions | |
ICV_DEF_NORM_FUNC_ALL_L1 (8u, CV_NOP, CV_IABS, NOHINT_BLOCK, NOHINT_BLOCK, uchar, int64, int, 1<< 23) ICV_DEF_NORM_FUNC_ALL_L1(16u | |
if (size.width<=CV_MAX_INLINE_MAT_OP_SIZE &&normType==2) | |
else | if (!CV_IS_MATND(mat1)&&!CV_IS_MATND(mat2)) |
if (!inittab) | |
if (mask) CV_ERROR(CV_StsBadMask | |
CV_CALL (cvInitNArrayIterator(1+(mat2!=0), arrs, 0, stubs,&iterator)) | |
if (!mat2||is_relative) | |
if (mat2) | |
if (CV_MAT_CN(type) > 1 &&coi==0) CV_ERROR(CV_StsBadArg | |
CV_CALL (matmask=cvGetMat(matmask,&maskstub)) | |
if (!CV_IS_MASK_ARR(matmask)) CV_ERROR(CV_StsBadMask | |
if (!CV_ARE_SIZES_EQ(mat1, matmask)) CV_ERROR(CV_StsUnmatchedSizes | |
if (CV_IS_MAT_CONT(mat1->type &mat2_flag &matmask->type)) | |
if (CV_MAT_CN(type)==1||coi==0) | |
Variables | |
CV_NOP | |
CV_IABS | |
NOHINT_BLOCK | |
ushort | |
int64 | |
int | |
<< 15) ICV_DEF_NORM_FUNC_ALL_L1(16s, CV_IABS, CV_IABS, NOHINT_BLOCK, NOHINT_BLOCK, short, int64, int, 1<< 15) ICV_DEF_NORM_FUNC_ALL_L1(32s, fabs, fabs, NOHINT, NOHINT, int, double, double, INT_MAX) ICV_DEF_NORM_FUNC_ALL_L1(32f, fabs, fabs, HINT, NOHINT, float, double, double, INT_MAX) ICV_DEF_NORM_FUNC_ALL_L1(64f, fabs, fabs, NOHINT, NOHINT, double, double, double, INT_MAX)#defineICV_DEF_NORM_FUNC_ALL_L2(flavor, hintp_func, nohint_func, arrtype, normtype, worktype, block_size, sqr_macro) ICV_DEF_NORM_FUNC_ALL_L2(8u, NOHINT_BLOCK, NOHINT_BLOCK, uchar, int64, int, 1<< 15, CV_SQR_8U) ICV_DEF_NORM_FUNC_ALL_L2(16u, NOHINT, NOHINT, ushort, double, double, INT_MAX, CV_SQR) ICV_DEF_NORM_FUNC_ALL_L2(16s, NOHINT, NOHINT, short, double, double, INT_MAX, CV_SQR) ICV_DEF_NORM_FUNC_ALL_L2(32s, NOHINT, NOHINT, int, double, double, INT_MAX, CV_SQR) ICV_DEF_NORM_FUNC_ALL_L2(32f, HINT, NOHINT, float, double, double, INT_MAX, CV_SQR) ICV_DEF_NORM_FUNC_ALL_L2(64f, NOHINT, NOHINT, double, double, double, INT_MAX, CV_SQR)#defineICV_DEF_INIT_NORM_TAB_2D(FUNCNAME, FLAG) staticvoidicvInitNormTabs(CvFuncTable *norm_tab, CvFuncTable *normmask_tab){icvInitNorm_InfC1RTable(&norm_tab[0]);icvInitNorm_L1C1RTable(&norm_tab[1]);icvInitNorm_L2C1RTable(&norm_tab[2]);icvInitNormDiff_InfC1RTable(&norm_tab[3]);icvInitNormDiff_L1C1RTable(&norm_tab[4]);icvInitNormDiff_L2C1RTable(&norm_tab[5]);icvInitNorm_InfCnCRTable(&norm_tab[6]);icvInitNorm_L1CnCRTable(&norm_tab[7]);icvInitNorm_L2CnCRTable(&norm_tab[8]);icvInitNormDiff_InfCnCRTable(&norm_tab[9]);icvInitNormDiff_L1CnCRTable(&norm_tab[10]);icvInitNormDiff_L2CnCRTable(&norm_tab[11]);icvInitNorm_InfC1MRTable(&normmask_tab[0]);icvInitNorm_L1C1MRTable(&normmask_tab[1]);icvInitNorm_L2C1MRTable(&normmask_tab[2]);icvInitNormDiff_InfC1MRTable(&normmask_tab[3]);icvInitNormDiff_L1C1MRTable(&normmask_tab[4]);icvInitNormDiff_L2C1MRTable(&normmask_tab[5]);icvInitNorm_InfCnCMRTable(&normmask_tab[6]);icvInitNorm_L1CnCMRTable(&normmask_tab[7]);icvInitNorm_L2CnCMRTable(&normmask_tab[8]);icvInitNormDiff_InfCnCMRTable(&normmask_tab[9]);icvInitNormDiff_L1CnCMRTable(&normmask_tab[10]);icvInitNormDiff_L2CnCMRTable(&normmask_tab[11]);}CV_IMPLdoublecvNorm(constvoid *imgA, constvoid *imgB, intnormType, constvoid *mask){staticCvFuncTablenorm_tab[12];staticCvFuncTablenormmask_tab[12];staticintinittab=0;doublenorm=0, norm_diff=0;CV_FUNCNAME("cvNorm");__BEGIN__;inttype, depth, cn, is_relative;CvSizesize;CvMatstub1,*mat1=(CvMat *) imgB;CvMatstub2,*mat2=(CvMat *) imgA;intmat2_flag=CV_MAT_CONT_FLAG;intmat1_step, mat2_step, mask_step=0;intcoi=0, coi2=0;if(!mat1){mat1=mat2;mat2=0;}is_relative=mat2 &&(normType &CV_RELATIVE);normType &=~CV_RELATIVE;switch(normType){caseCV_C:caseCV_L1:caseCV_L2:caseCV_DIFF_C:caseCV_DIFF_L1:caseCV_DIFF_L2:normType=(normType &7)>>1;break;default:CV_ERROR(CV_StsBadFlag,"");}if(CV_IS_MAT(mat1)&&(!mat2||CV_IS_MAT(mat2))&&!mask){if(mat2){if(!CV_ARE_TYPES_EQ(mat1, mat2)) CV_ERROR(CV_StsUnmatchedFormats,"");if(!CV_ARE_SIZES_EQ(mat1, mat2)) CV_ERROR(CV_StsUnmatchedSizes,"");mat2_flag=mat2->type;}size=cvGetMatSize(mat1);type=CV_MAT_TYPE(mat1->type);depth=CV_MAT_DEPTH(type);cn=CV_MAT_CN(type);if(CV_IS_MAT_CONT(mat1-> type & | mat2_flag |
size | height = 1 |
mat1_step = mat2_step = CV_STUB_STEP | |
else | |
mat2_step = mat2 ? mat2->step : 0 | |
CvMatND | stubs [2] |
CvNArrayIterator | iterator |
int | pass_hint = normType != 0 && (depth == CV_32F) |
This operation on multi dimensional arrays does not support | mask |
type = CV_MAT_TYPE(iterator.hdr[0]->type) | |
depth = CV_MAT_DEPTH(type) | |
EXIT | |
mask_step = matmask->step | |
return | norm |
#define ICV_DEF_INIT_NORM_TAB_2D | ( | FUNCNAME, | |
FLAG | |||
) |
#define ICV_DEF_NORM_DIFF_HINT_FUNC_2D | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_DIFF_MASK_NOHINT_BLOCK_FUNC_2D | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_DIFF_MASK_NOHINT_BLOCK_FUNC_2D_COI | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_DIFF_MASK_NOHINT_FUNC_2D | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_DIFF_MASK_NOHINT_FUNC_2D_COI | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_DIFF_NOHINT_BLOCK_FUNC_2D | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_DIFF_NOHINT_BLOCK_FUNC_2D_COI | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_DIFF_NOHINT_FUNC_2D | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_DIFF_NOHINT_FUNC_2D_COI | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_FUNC_ALL_C | ( | flavor, | |
_abs_, | |||
_abs_diff_, | |||
arrtype, | |||
worktype | |||
) |
#define ICV_DEF_NORM_FUNC_ALL_L1 | ( | flavor, | |
_abs_, | |||
_abs_diff_, | |||
hintp_func, | |||
nohint_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_FUNC_ALL_L2 | ( | flavor, | |
hintp_func, | |||
nohint_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size, | |||
sqr_macro | |||
) |
#define ICV_DEF_NORM_HINT_FUNC_2D | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_MASK_NOHINT_BLOCK_FUNC_2D | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_MASK_NOHINT_BLOCK_FUNC_2D_COI | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_MASK_NOHINT_FUNC_2D | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_MASK_NOHINT_FUNC_2D_COI | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_NOHINT_BLOCK_FUNC_2D | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_NOHINT_BLOCK_FUNC_2D_COI | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_NOHINT_FUNC_2D | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_DEF_NORM_NOHINT_FUNC_2D_COI | ( | name, | |
_op_, | |||
_update_op_, | |||
post_func, | |||
arrtype, | |||
normtype, | |||
worktype, | |||
block_size | |||
) |
#define ICV_NORM_CASE | ( | _op_, | |
_update_op_, | |||
worktype, | |||
len | |||
) |
#define ICV_NORM_DIFF_CASE | ( | _op_, | |
_update_op_, | |||
worktype, | |||
len | |||
) |
#define ICV_NORM_DIFF_MASK_CASE | ( | _op_, | |
_update_op_, | |||
worktype, | |||
len | |||
) |
#define ICV_NORM_MASK_CASE | ( | _op_, | |
_update_op_, | |||
worktype, | |||
len | |||
) |
CV_CALL | ( | cvInitNArrayIterator(1+(mat2!=0), arrs, 0, stubs,&iterator) | ) |
CV_CALL | ( | matmask | = cvGetMat(matmask,&maskstub) | ) |
ICV_DEF_NORM_FUNC_ALL_L1 | ( | 8u | , |
CV_NOP | , | ||
CV_IABS | , | ||
NOHINT_BLOCK | , | ||
NOHINT_BLOCK | , | ||
uchar | , | ||
int64 | , | ||
int | , | ||
1<< | 23 | ||
) |
if | ( | size.width<=CV_MAX_INLINE_MAT_OP_SIZE && | normType = = 2 | ) |
else if | ( | ! | CV_IS_MATNDmat1)&&!CV_IS_MATND(mat2 | ) |
if | ( | ! | inittab | ) |
if | ( | mask | ) |
if | ( | !mat2|| | is_relative | ) |
if | ( | mat2 | ) |
if | ( | ! | CV_IS_MASK_ARRmatmask | ) |
if | ( | ! | CV_ARE_SIZES_EQmat1, matmask | ) |
if | ( | CV_IS_MAT_CONT(mat1->type &mat2_flag &matmask->type) | ) |
CV_IABS |
CV_NOP |
depth = CV_MAT_DEPTH(type) |
else |
EXIT |
size height = 1 |
int |
CvNArrayIterator iterator |
This operation on multi dimensional arrays does not support mask |
mask_step = matmask->step |
mat1_step = mat2_step = CV_STUB_STEP |
<<15)ICV_DEF_NORM_FUNC_ALL_L1(16s,CV_IABS,CV_IABS,NOHINT_BLOCK,NOHINT_BLOCK,short,int64,int,1<<15)ICV_DEF_NORM_FUNC_ALL_L1(32s,fabs,fabs,NOHINT,NOHINT,int,double,double,INT_MAX)ICV_DEF_NORM_FUNC_ALL_L1(32f,fabs,fabs,HINT,NOHINT,float,double,double,INT_MAX)ICV_DEF_NORM_FUNC_ALL_L1(64f,fabs,fabs,NOHINT,NOHINT,double,double,double,INT_MAX)#defineICV_DEF_NORM_FUNC_ALL_L2(flavor,hintp_func,nohint_func,arrtype,normtype,worktype,block_size,sqr_macro)ICV_DEF_NORM_FUNC_ALL_L2(8u,NOHINT_BLOCK,NOHINT_BLOCK,uchar,int64,int,1<<15,CV_SQR_8U)ICV_DEF_NORM_FUNC_ALL_L2(16u,NOHINT,NOHINT,ushort,double,double,INT_MAX,CV_SQR)ICV_DEF_NORM_FUNC_ALL_L2(16s,NOHINT,NOHINT,short,double,double,INT_MAX,CV_SQR)ICV_DEF_NORM_FUNC_ALL_L2(32s,NOHINT,NOHINT,int,double,double,INT_MAX,CV_SQR)ICV_DEF_NORM_FUNC_ALL_L2(32f,HINT,NOHINT,float,double,double,INT_MAX,CV_SQR)ICV_DEF_NORM_FUNC_ALL_L2(64f,NOHINT,NOHINT,double,double,double,INT_MAX,CV_SQR)#defineICV_DEF_INIT_NORM_TAB_2D(FUNCNAME,FLAG)staticvoidicvInitNormTabs(CvFuncTable*norm_tab,CvFuncTable*normmask_tab){icvInitNorm_InfC1RTable(&norm_tab[0]);icvInitNorm_L1C1RTable(&norm_tab[1]);icvInitNorm_L2C1RTable(&norm_tab[2]);icvInitNormDiff_InfC1RTable(&norm_tab[3]);icvInitNormDiff_L1C1RTable(&norm_tab[4]);icvInitNormDiff_L2C1RTable(&norm_tab[5]);icvInitNorm_InfCnCRTable(&norm_tab[6]);icvInitNorm_L1CnCRTable(&norm_tab[7]);icvInitNorm_L2CnCRTable(&norm_tab[8]);icvInitNormDiff_InfCnCRTable(&norm_tab[9]);icvInitNormDiff_L1CnCRTable(&norm_tab[10]);icvInitNormDiff_L2CnCRTable(&norm_tab[11]);icvInitNorm_InfC1MRTable(&normmask_tab[0]);icvInitNorm_L1C1MRTable(&normmask_tab[1]);icvInitNorm_L2C1MRTable(&normmask_tab[2]);icvInitNormDiff_InfC1MRTable(&normmask_tab[3]);icvInitNormDiff_L1C1MRTable(&normmask_tab[4]);icvInitNormDiff_L2C1MRTable(&normmask_tab[5]);icvInitNorm_InfCnCMRTable(&normmask_tab[6]);icvInitNorm_L1CnCMRTable(&normmask_tab[7]);icvInitNorm_L2CnCMRTable(&normmask_tab[8]);icvInitNormDiff_InfCnCMRTable(&normmask_tab[9]);icvInitNormDiff_L1CnCMRTable(&normmask_tab[10]);icvInitNormDiff_L2CnCMRTable(&normmask_tab[11]);}CV_IMPLdoublecvNorm(constvoid*imgA,constvoid*imgB,intnormType,constvoid*mask){staticCvFuncTablenorm_tab[12];staticCvFuncTablenormmask_tab[12];staticintinittab=0;doublenorm=0,norm_diff=0;CV_FUNCNAME("cvNorm");__BEGIN__;inttype,depth,cn,is_relative;CvSizesize;CvMatstub1,*mat1=(CvMat*)imgB;CvMatstub2,*mat2=(CvMat*)imgA;intmat2_flag=CV_MAT_CONT_FLAG;intmat1_step,mat2_step,mask_step=0;intcoi=0,coi2=0;if(!mat1){mat1=mat2;mat2=0;}is_relative=mat2&&(normType&CV_RELATIVE);normType&=~CV_RELATIVE;switch(normType){caseCV_C:caseCV_L1:caseCV_L2:caseCV_DIFF_C:caseCV_DIFF_L1:caseCV_DIFF_L2:normType=(normType&7)>>1;break;default:CV_ERROR(CV_StsBadFlag,"");}if(CV_IS_MAT(mat1)&&(!mat2||CV_IS_MAT(mat2))&&!mask){if(mat2){if(!CV_ARE_TYPES_EQ(mat1,mat2))CV_ERROR(CV_StsUnmatchedFormats,"");if(!CV_ARE_SIZES_EQ(mat1,mat2))CV_ERROR(CV_StsUnmatchedSizes,"");mat2_flag=mat2->type;}size=cvGetMatSize(mat1);type=CV_MAT_TYPE(mat1->type);depth=CV_MAT_DEPTH(type);cn=CV_MAT_CN(type);if(CV_IS_MAT_CONT(mat1-> type& mat2_flag |
mat2_step = mat2 ? mat2->step : 0 |
NOHINT_BLOCK |
return norm |
CvMatND stubs[2] |
type = CV_MAT_TYPE(iterator.hdr[0]->type) |