int CV_CannyTest::validate_test_results( int test_case_idx ) { int code = CvTS::OK, nz0; prepare_to_validation(test_case_idx); double err = cvNorm(&test_mat[OUTPUT][0], &test_mat[REF_OUTPUT][0], CV_L1); if( err == 0 ) goto _exit_; if( err != cvRound(err) || cvRound(err)%255 != 0 ) { ts->printf( CvTS::LOG, "Some of the pixels, produced by Canny, are not 0's or 255's; the difference is %g\n", err ); code = CvTS::FAIL_INVALID_OUTPUT; goto _exit_; } nz0 = cvCountNonZero(&test_mat[REF_OUTPUT][0]); err = (err/255/MAX(nz0,100))*100; if( err > 1 ) { ts->printf( CvTS::LOG, "Too high percentage of non-matching edge pixels = %g%%\n", err); code = CvTS::FAIL_BAD_ACCURACY; goto _exit_; } _exit_: if( code < 0 ) ts->set_failed_test_info( code ); return code; }
int ArrayTest::validate_test_results( int test_case_idx ) { static const char* arr_names[] = { "input", "input/output", "output", "ref input/output", "ref output", "temporary", "mask" }; size_t i, j; prepare_to_validation( test_case_idx ); for( i = 0; i < 2; i++ ) { int i0 = i == 0 ? OUTPUT : INPUT_OUTPUT; int i1 = i == 0 ? REF_OUTPUT : REF_INPUT_OUTPUT; size_t sizei = test_array[i0].size(); assert( sizei == test_array[i1].size() ); for( j = 0; j < sizei; j++ ) { double err_level; int code; if( !test_array[i1][j] ) continue; err_level = get_success_error_level( test_case_idx, i0, (int)j ); code = cmpEps2(ts, test_mat[i0][j], test_mat[i1][j], err_level, element_wise_relative_error, arr_names[i0]); if (code == 0) continue; for( i0 = 0; i0 < (int)test_array.size(); i0++ ) { size_t sizei0 = test_array[i0].size(); if( i0 == REF_INPUT_OUTPUT || i0 == OUTPUT || i0 == TEMP ) continue; for( i1 = 0; i1 < (int)sizei0; i1++ ) { const Mat& arr = test_mat[i0][i1]; if( !arr.empty() ) { string sizestr = vec2str(", ", &arr.size[0], arr.dims); ts->printf( TS::LOG, "%s array %d type=%sC%d, size=(%s)\n", arr_names[i0], i1, getTypeName(arr.depth()), arr.channels(), sizestr.c_str() ); } } } ts->set_failed_test_info( code ); return code; } } return 0; }
int CvArrTest::validate_test_results( int test_case_idx ) { static const char* arr_names[] = { "input", "input/output", "output", "ref input/output", "ref output", "temporary", "mask" }; int i, j; prepare_to_validation( test_case_idx ); for( i = 0; i < 2; i++ ) { int i0 = i == 0 ? OUTPUT : INPUT_OUTPUT; int i1 = i == 0 ? REF_OUTPUT : REF_INPUT_OUTPUT; int count = test_array[i0].size(); assert( count == test_array[i1].size() ); for( j = 0; j < count; j++ ) { double err_level; CvPoint idx = {0,0}; double max_diff = 0; int code; char msg[100]; if( !test_array[i1][j] ) continue; err_level = get_success_error_level( test_case_idx, i0, j ); code = cvTsCmpEps( &test_mat[i0][j], &test_mat[i1][j], &max_diff, err_level, &idx, element_wise_relative_error ); switch( code ) { case -1: sprintf( msg, "Too big difference (=%g)", max_diff ); code = CvTS::FAIL_BAD_ACCURACY; break; case -2: strcpy( msg, "Invalid output" ); code = CvTS::FAIL_INVALID_OUTPUT; break; case -3: strcpy( msg, "Invalid output in the reference array" ); code = CvTS::FAIL_INVALID_OUTPUT; break; default: continue; } ts->printf( CvTS::LOG, "%s in %s array %d at (%d,%d)\n", msg, arr_names[i0], j, idx.x, idx.y ); for( i0 = 0; i0 < max_arr; i0++ ) { int count = test_array[i0].size(); if( i0 == REF_INPUT_OUTPUT || i0 == OUTPUT || i0 == TEMP ) continue; for( i1 = 0; i1 < count; i1++ ) { CvArr* arr = test_array[i0][i1]; if( arr ) { CvSize size = cvGetSize(arr); int type = cvGetElemType(arr); ts->printf( CvTS::LOG, "%s array %d type=%sC%d, size=(%d,%d)\n", arr_names[i0], i1, cvTsGetTypeName(type), CV_MAT_CN(type), size.width, size.height ); } } } ts->set_failed_test_info( code ); return code; } } return 0; }