{ \r
ts->set_failed_test_info(CvTS::OK);\r
int progress = 0;\r
+ int caseId = 0;\r
\r
progress = update_progress( progress, 1, 14, 0 );\r
- runCase<float, float>(-100.f, 100.f);\r
+ runCase<float, float>(++caseId, -100.f, 100.f);\r
progress = update_progress( progress, 2, 14, 0 );\r
- runCase<int, float>(-100, 100);\r
+ runCase<int, float>(++caseId, -100, 100);\r
progress = update_progress( progress, 3, 14, 0 );\r
- runCase<short, float>(-100, 100);\r
+ runCase<short, float>(++caseId, -100, 100);\r
progress = update_progress( progress, 4, 14, 0 );\r
- runCase<unsigned char, float>(10, 100);\r
+ runCase<unsigned char, float>(++caseId, 10, 100);\r
progress = update_progress( progress, 5, 14, 0 );\r
\r
- runCase<float, int>(-100.f, 100.f);\r
+ runCase<float, int>(++caseId, -100.f, 100.f);\r
progress = update_progress( progress, 6, 14, 0 );\r
- runCase<int, int>(-100, 100);\r
+ runCase<int, int>(++caseId, -100, 100);\r
progress = update_progress( progress, 7, 14, 0 );\r
- runCase<short, int>(-100, 100);\r
+ runCase<short, int>(++caseId, -100, 100);\r
progress = update_progress( progress, 8, 14, 0 );\r
- runCase<unsigned char, int>(10, 100);\r
+ runCase<unsigned char, int>(++caseId, 10, 100);\r
progress = update_progress( progress, 10, 14, 0 );\r
\r
- runCase<float, short>(-100.f, 100.f);\r
+ runCase<float, short>(++caseId, -100.f, 100.f);\r
progress = update_progress( progress, 11, 14, 0 );\r
- runCase<int, short>(-100, 100);\r
+ runCase<int, short>(++caseId, -100, 100);\r
progress = update_progress( progress, 12, 14, 0 );\r
- runCase<short, short>(-100, 100);\r
+ runCase<short, short>(++caseId, -100, 100);\r
progress = update_progress( progress, 13, 14, 0 );\r
- runCase<unsigned char, short>(10, 100); \r
+ runCase<unsigned char, short>(++caseId, 10, 100); \r
progress = update_progress( progress, 14, 14, 0 );\r
}\r
\r
sum += tmp * tmp;\r
\r
} \r
- return sqrt(sum)/sqrt(nsum);\r
+ return sqrt(sum)/(sqrt(nsum)+1.);\r
}\r
\r
- template<class InT, class OutT> void runCase(InT min, InT max)\r
+ template<class InT, class OutT> void runCase(int caseId, InT min, InT max)\r
{ \r
typedef Vec<OutT, 3> out3d_t;\r
\r
InT d = disp(y, x); \r
\r
double from[4] = { x, y, d, 1 };\r
- Mat res = Q * Mat_<double>(4, 1, from);\r
- res /= res.at<double>(3, 0);\r
+ Mat_<double> res = Q * Mat_<double>(4, 1, from);\r
+ res /= res(3, 0);\r
\r
out3d_t pixel_exp = *res.ptr<Vec3d>();\r
out3d_t pixel_out = _3dImg(y, x);\r
if (pixel_out[2] == largeZValue)\r
continue;\r
\r
+ ts->printf(CvTS::LOG, "Missing values are handled improperly\n");\r
ts->set_failed_test_info( CvTS::FAIL_BAD_ACCURACY ); \r
return;\r
}\r
- else \r
- if (error(pixel_exp, pixel_out) > thres<OutT>())\r
+ else\r
+ {\r
+ double err = error(pixel_out, pixel_exp), t = thres<OutT>();\r
+ if ( err > t )\r
{\r
- ts->set_failed_test_info( CvTS::FAIL_BAD_ACCURACY ); \r
+ ts->printf(CvTS::LOG, "case %d. too big error at (%d, %d): %g vs expected %g: res = (%g, %g, %g, w=%g) vs pixel_out = (%g, %g, %g)\n",\r
+ caseId, x, y, err, t, res(0,0), res(1,0), res(2,0), res(3,0),\r
+ (double)pixel_out[0], (double)pixel_out[1], (double)pixel_out[2]);\r
+ ts->set_failed_test_info( CvTS::FAIL_BAD_ACCURACY );\r
return;\r
}\r
+ }\r
} \r
}\r
}; \r