📄 anorm.cpp
字号:
for( j=0, j4=0; j<nx; j++, j4+=3, k++ )
{
a[k] = *(char*)(A_data+j4);
b[k] = *(char*)(B_data+j4);
}
}
if( A->depth == IPL_DEPTH_32F )
{
A_data += 4*coi;
B_data += 4*coi;
for( i=0; i<ny; i++, A_data+=A_step, B_data+=B_step )
for( j=0, j4=0; j<nx; j++, j4+=12, k++ )
{
a[k] = *(float*)(A_data+j4);
b[k] = *(float*)(B_data+j4);
}
}
}
else
{
if( A->depth == IPL_DEPTH_8U )
{
A_data += coi;
for( i=0; i<ny; i++, A_data+=A_step )
for( j=0, j4=0; j<nx; j++, j4+=3, k++ )
a[k] = A_data[j4];
}
if( A->depth == IPL_DEPTH_8S )
{
A_data += coi;
for( i=0; i<ny; i++, A_data+=A_step )
for( j=0, j4=0; j<nx; j++, j4+=3, k++ )
a[k] = *(char*)(A_data+j4);
}
if( A->depth == IPL_DEPTH_32F )
{
A_data += 4*coi;
for( i=0; i<ny; i++, A_data+=A_step )
for( j=0, j4=0; j<nx; j++, j4+=12, k++ )
a[k] = *(float*)(A_data+j4);
}
}
} /* channels */
norm = calcTestNorm( a, b, n, type );
icvFree((void**)&a );
if(b) icvFree((void**)&b );
return norm;
}
/*================================================ Test body ========================== */
static int fmaNorm(void)
{
/* Some Variables */
int nx, ny, n, n4, it, ir, nr, nerr=0, coi, step, step4;
int xoff, yoff, roiw, roih, nerrt[9];
CvSize size;
AtsRandState state1, state2, state3;
IplImage *A_8uC1, *A_8sC1, *A_32fC1, *B_8uC1, *B_8sC1, *B_32fC1;
IplImage *A_8uC3, *A_8sC3, *A_32fC3, *B_8uC3, *B_8sC3, *B_32fC3;
IplROI r;
double norm, testnorm, err;
trsiRead( &Min_Image_Width, "1", "Minimal image width" );
trsiRead( &Max_Image_Width, "32", "Maximal image width" );
trsiRead( &Max_ROI_Offset, "8", "Maximal ROI offset" );
if( Min_Image_Width < 1 ) Min_Image_Width = 1;
if( Max_Image_Width < Min_Image_Width ) Max_Image_Width = Min_Image_Width;
if( Max_ROI_Offset < 0 ) Max_ROI_Offset = 0;
atsRandInit( &state1, MIN_VAL(IPL_DEPTH_8U), MAX_VAL(IPL_DEPTH_8U), 13 );
atsRandInit( &state2, MIN_VAL(IPL_DEPTH_8S), MAX_VAL(IPL_DEPTH_8S), 14 );
atsRandInit( &state3, MIN_VAL(IPL_DEPTH_32F), MAX_VAL(IPL_DEPTH_32F), 15 );
for( it=0; it<9; it++ ) nerrt[it] = 0;
/* Image size cycle starts ________________________ */
for( nx = Min_Image_Width; nx<=Max_Image_Width; nx++ )
{
ny = nx;
/*if(nx>1)ny=(int)(0.7*nx); // Non-square images test */
size.width = nx; size.height = ny;
/* Initial images allocating & random filling */
A_8uC1 = cvCreateImage( size, IPL_DEPTH_8U, 1 );
A_8sC1 = cvCreateImage( size, IPL_DEPTH_8S, 1 );
A_32fC1 = cvCreateImage( size, IPL_DEPTH_32F, 1 );
B_8uC1 = cvCreateImage( size, IPL_DEPTH_8U, 1 );
B_8sC1 = cvCreateImage( size, IPL_DEPTH_8S, 1 );
B_32fC1 = cvCreateImage( size, IPL_DEPTH_32F, 1 );
A_8uC3 = cvCreateImage( size, IPL_DEPTH_8U, 3 );
A_8sC3 = cvCreateImage( size, IPL_DEPTH_8S, 3 );
A_32fC3 = cvCreateImage( size, IPL_DEPTH_32F, 3 );
B_8uC3 = cvCreateImage( size, IPL_DEPTH_8U, 3 );
B_8sC3 = cvCreateImage( size, IPL_DEPTH_8S, 3 );
B_32fC3 = cvCreateImage( size, IPL_DEPTH_32F, 3 );
step = A_8uC1->widthStep; step4 = (A_32fC1->widthStep)/4;
n = ny*step; n4 = ny*step4;
atsbRand8u ( &state1, (uchar*)A_8uC1->imageData, n );
atsbRand8s ( &state2, A_8sC1->imageData, n );
atsbRand32f( &state3, (float*)A_32fC1->imageData, n4);
atsbRand8u ( &state1, (uchar*)B_8uC1->imageData, n );
atsbRand8s ( &state2, B_8sC1->imageData, n );
atsbRand32f( &state3, (float*)B_32fC1->imageData, n4);
step = A_8uC3->widthStep; step4 = (A_32fC3->widthStep)/4;
n = ny*step; n4 = ny*step4;
atsbRand8u ( &state1, (uchar*)A_8uC3->imageData, n );
atsbRand8s ( &state2, A_8sC3->imageData, n );
atsbRand32f( &state3, (float*)A_32fC3->imageData, n4);
atsbRand8u ( &state1, (uchar*)B_8uC3->imageData, n );
atsbRand8s ( &state2, B_8sC3->imageData, n );
atsbRand32f( &state3, (float*)B_32fC3->imageData, n4);
nr = (ny-1)/2>Max_ROI_Offset ? Max_ROI_Offset : (ny-1)/2;
for( ir = 0; ir<=nr; ir++) /* ROI size cycle starts ----------------- */
{
/* IPL ROI structures filling */
xoff = ir/11;
yoff = ir;
roiw = nx - (int)(1.2*xoff);
roih = ny - (int)(1.5*yoff);
r.xOffset = xoff;
r.yOffset = yoff;
r.width = roiw;
r.height = roih;
A_8uC1->roi = A_8sC1->roi = A_32fC1->roi =
A_8uC3->roi = A_8sC3->roi = A_32fC3->roi =
B_8uC1->roi = B_8sC1->roi = B_32fC1->roi =
B_8uC3->roi = B_8sC3->roi = B_32fC3->roi = &r;
/* T E S T I N G */
for(it = 0; it<9; it++)
{
IplImage* B;
r.coi = 0;
B = it<3 ? NULL : B_8uC1;
norm = cvNorm( A_8uC1, B, cvlType[it] );
testnorm= TestNorm( A_8uC1, B, cvlType[it] );
err = fabs((norm-testnorm)/testnorm);
if( err > EPS )
{
nerrt[it]++;
printf(" 8uC1 %d norm fail: %f %f\n", it+1, norm, testnorm);
}
B = it<3 ? NULL : B_8sC1;
norm = cvNorm( A_8sC1, B, cvlType[it] );
testnorm= TestNorm( A_8sC1, B, cvlType[it] );
err = fabs((norm-testnorm)/testnorm);
if( err > EPS )
{
nerrt[it]++;
printf(" 8sC1 %d norm fail: %f %f\n", it+1, norm, testnorm);
}
B = it<3 ? NULL : B_32fC1;
norm = cvNorm( A_32fC1, B, cvlType[it] );
testnorm= TestNorm( A_32fC1, B, cvlType[it] );
err = fabs((norm-testnorm)/testnorm);
if( err > FEPS )
{
nerrt[it]++;
printf(" 32fC1 %d norm fail: %f %f\n", it+1, norm, testnorm);
}
B = it<3 ? NULL : B_8uC3;
for( coi=1; coi<4; coi++ )
{
r.coi = coi;
norm = cvNorm( A_8uC3, B, cvlType[it] );
testnorm= TestNorm( A_8uC3, B, cvlType[it] );
err = fabs((norm-testnorm)/testnorm);
if( err > EPS )
{
nerrt[it]++;
printf(" 8uC3 %d norm fail: %f %f, coi = %d\n", it+1, norm, testnorm, coi);
}
}
B = it<3 ? NULL : B_8sC3;
for( coi=1; coi<4; coi++ )
{
r.coi = coi;
norm = cvNorm( A_8sC3, B, cvlType[it] );
testnorm= TestNorm( A_8sC3, B, cvlType[it] );
err = fabs((norm-testnorm)/testnorm);
if( err > EPS )
{
nerrt[it]++;
printf(" 8sC3 %d norm fail: %f %f, coi = %d\n", it+1, norm, testnorm, coi);
}
}
B = it<3 ? NULL : B_32fC3;
for( coi=1; coi<4; coi++ )
{
r.coi = coi;
norm = cvNorm( A_32fC3, B, cvlType[it] );
testnorm= TestNorm( A_32fC3, B, cvlType[it] );
err = fabs((norm-testnorm)/testnorm);
if( err > FEPS )
{
nerrt[it]++;
printf(" 32fC3 %d norm fail: %f %f, coi = %d\n", it+1, norm, testnorm, coi);
}
}
} /* norm type */
for( it=0; it<9; it++ ) nerr += nerrt[it];
} /* ROI */
A_8uC1->roi = A_8sC1->roi = A_32fC1->roi =
A_8uC3->roi = A_8sC3->roi = A_32fC3->roi =
B_8uC1->roi = B_8sC1->roi = B_32fC1->roi =
B_8uC3->roi = B_8sC3->roi = B_32fC3->roi = 0;
cvReleaseImage( &A_8uC1 );
cvReleaseImage( &A_8sC1 );
cvReleaseImage( &A_32fC1 );
cvReleaseImage( &B_8uC1 );
cvReleaseImage( &B_8sC1 );
cvReleaseImage( &B_32fC1 );
cvReleaseImage( &A_8uC3 );
cvReleaseImage( &A_8sC3 );
cvReleaseImage( &A_32fC3 );
cvReleaseImage( &B_8uC3 );
cvReleaseImage( &B_8sC3 );
cvReleaseImage( &B_32fC3 );
} /* Nx */
/*trsWrite (TW_RUN|TW_CON|TW_SUM," %d norm %s%s flavor fail: %g %g\n",
it+1, f1, f2, norm, testnorm);*/
if(nerr) return trsResult( TRS_FAIL, "Algorithm test has passed. %d errors.", nerr );
else return trsResult( TRS_OK, "Algorithm test has passed successfully" );
} /* fmaNorm */
/*------------------------------------------------ Initialize function ------------------- */
void InitANorm( void )
{
trsReg( FuncName, TestName, TestClass, fmaNorm );
} /* InitANorm */
/* End of file. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -