int CV_ThreshHistTest::validate_test_results( int /*test_case_idx*/ ) { int code = CvTS::OK; int i; float* ptr0 = values->data.fl; float* ptr = 0; CvSparseMat* sparse = 0; if( hist_type == CV_HIST_ARRAY ) ptr = (float*)cvPtr1D( hist[0]->bins, 0 ); else sparse = (CvSparseMat*)hist[0]->bins; if( code > 0 ) { for( i = 0; i < orig_nz_count; i++ ) { float v0 = ptr0[i], v; if( hist_type == CV_HIST_ARRAY ) v = ptr[i]; else { v = (float)cvGetRealND( sparse, indices->data.i + i*cdims ); cvClearND( sparse, indices->data.i + i*cdims ); } if( v0 <= threshold ) v0 = 0.f; if( cvIsNaN(v) || cvIsInf(v) ) { ts->printf( CvTS::LOG, "The %d-th bin is invalid (=%g)\n", i, v ); code = CvTS::FAIL_INVALID_OUTPUT; break; } else if( fabs(v0 - v) > FLT_EPSILON*10*fabs(v0) ) { ts->printf( CvTS::LOG, "The %d-th bin is incorrect (=%g, should be =%g)\n", i, v, v0 ); code = CvTS::FAIL_BAD_ACCURACY; break; } } } if( code > 0 && hist_type == CV_HIST_SPARSE ) { if( sparse->heap->active_count > 0 ) { ts->printf( CvTS::LOG, "There some extra histogram bins in the sparse histogram after the thresholding\n" ); code = CvTS::FAIL_INVALID_OUTPUT; } } if( code < 0 ) ts->set_failed_test_info( code ); return code; }
void cveClearND(CvArr* arr, int* idx) { cvClearND(arr, idx); }