(image_sqsum.ptr(y + h)[x + w] - image_sqsum.ptr(y)[x + w]) -\r
(image_sqsum.ptr(y + h)[x] - image_sqsum.ptr(y)[x]));\r
result.ptr(y)[x] = (ccorr - image_sum_ * templ_sum_scale) * \r
- rsqrtf(templ_sqsum_scale * max(1.f, image_sqsum_ - weight * image_sum_ * image_sum_));\r
+ rsqrtf(templ_sqsum_scale * max(1e-3f, image_sqsum_ - weight * image_sum_ * image_sum_));\r
}\r
}\r
\r
(image_sqsum_g.ptr(y + h)[x + w] - image_sqsum_g.ptr(y)[x + w]) -\r
(image_sqsum_g.ptr(y + h)[x] - image_sqsum_g.ptr(y)[x]));\r
float ccorr = result.ptr(y)[x];\r
- float rdenom = rsqrtf(templ_sqsum_scale * max(1.f, image_sqsum_r_ - weight * image_sum_r_ * image_sum_r_ \r
- + image_sqsum_g_ - weight * image_sum_g_ * image_sum_g_));\r
+ float rdenom = rsqrtf(templ_sqsum_scale * max(1e-3f, image_sqsum_r_ - weight * image_sum_r_ * image_sum_r_ \r
+ + image_sqsum_g_ - weight * image_sum_g_ * image_sum_g_));\r
result.ptr(y)[x] = (ccorr - image_sum_r_ * templ_sum_scale_r\r
- image_sum_g_ * templ_sum_scale_g) * rdenom;\r
}\r
(image_sqsum_b.ptr(y + h)[x + w] - image_sqsum_b.ptr(y)[x + w]) -\r
(image_sqsum_b.ptr(y + h)[x] - image_sqsum_b.ptr(y)[x]));\r
float ccorr = result.ptr(y)[x];\r
- float rdenom = rsqrtf(templ_sqsum_scale * max(1.f, image_sqsum_r_ - weight * image_sum_r_ * image_sum_r_ \r
- + image_sqsum_g_ - weight * image_sum_g_ * image_sum_g_\r
- + image_sqsum_b_ - weight * image_sum_b_ * image_sum_b_));\r
+ float rdenom = rsqrtf(templ_sqsum_scale * max(1e-3f, image_sqsum_r_ - weight * image_sum_r_ * image_sum_r_ \r
+ + image_sqsum_g_ - weight * image_sum_g_ * image_sum_g_\r
+ + image_sqsum_b_ - weight * image_sum_b_ * image_sum_b_));\r
result.ptr(y)[x] = (ccorr - image_sum_r_ * templ_sum_scale_r\r
- image_sum_g_ * templ_sum_scale_g\r
- image_sum_b_ * templ_sum_scale_b) * rdenom;\r
(image_sqsum_a.ptr(y + h)[x + w] - image_sqsum_a.ptr(y)[x + w]) -\r
(image_sqsum_a.ptr(y + h)[x] - image_sqsum_a.ptr(y)[x]));\r
float ccorr = result.ptr(y)[x];\r
- float rdenom = rsqrtf(templ_sqsum_scale * max(1.f, image_sqsum_r_ - weight * image_sum_r_ * image_sum_r_\r
- + image_sqsum_g_ - weight * image_sum_g_ * image_sum_g_\r
- + image_sqsum_b_ - weight * image_sum_b_ * image_sum_b_\r
- + image_sqsum_a_ - weight * image_sum_a_ * image_sum_a_));\r
+ float rdenom = rsqrtf(templ_sqsum_scale * max(1e-3f, image_sqsum_r_ - weight * image_sum_r_ * image_sum_r_\r
+ + image_sqsum_g_ - weight * image_sum_g_ * image_sum_g_\r
+ + image_sqsum_b_ - weight * image_sum_b_ * image_sum_b_\r
+ + image_sqsum_a_ - weight * image_sum_a_ * image_sum_a_));\r
result.ptr(y)[x] = (ccorr - image_sum_r_ * templ_sum_scale_r\r
- image_sum_g_ * templ_sum_scale_g\r
- image_sum_b_ * templ_sum_scale_b\r
int n, m, h, w;\r
F(clock_t t;)\r
\r
+ RNG rng(*ts->get_rng());\r
+\r
for (int cn = 1; cn <= 4; ++cn)\r
{\r
F(ts->printf(CvTS::CONSOLE, "cn: %d\n", cn);)\r
for (int i = 0; i <= 0; ++i)\r
{\r
- n = 1 + rand() % 1000;\r
- m = 1 + rand() % 1000;\r
- do h = 1 + rand() % 100; while (h > n);\r
- do w = 1 + rand() % 100; while (w > m);\r
-\r
- //cout << "w: " << w << " h: " << h << endl;\r
+ n = rng.uniform(30, 100);\r
+ m = rng.uniform(30, 100);\r
+ h = rng.uniform(5, n - 1);\r
+ w = rng.uniform(5, m - 1);\r
\r
gen(image, n, m, CV_8U, cn);\r
gen(templ, h, w, CV_8U, cn);\r
F(t = clock();)\r
gpu::matchTemplate(gpu::GpuMat(image), gpu::GpuMat(templ), dst, CV_TM_SQDIFF);\r
F(cout << "gpu_block: " << clock() - t << endl;)\r
- if (!check(dst_gold, Mat(dst), 5 * h * w * 1e-4f)) return;\r
+ if (!check(dst_gold, Mat(dst), 5 * h * w * 1e-4f, "SQDIFF 8U")) return;\r
\r
gen(image, n, m, CV_8U, cn);\r
gen(templ, h, w, CV_8U, cn);\r
F(t = clock();)\r
gpu::matchTemplate(gpu::GpuMat(image), gpu::GpuMat(templ), dst, CV_TM_SQDIFF_NORMED);\r
F(cout << "gpu_block: " << clock() - t << endl;)\r
- if (!check(dst_gold, Mat(dst), h * w * 1e-5f)) return;\r
+ if (!check(dst_gold, Mat(dst), h * w * 1e-5f, "SQDIFF_NOREMD 8U")) return;\r
\r
gen(image, n, m, CV_8U, cn);\r
gen(templ, h, w, CV_8U, cn);\r
F(t = clock();)\r
gpu::matchTemplate(gpu::GpuMat(image), gpu::GpuMat(templ), dst, CV_TM_CCORR);\r
F(cout << "gpu_block: " << clock() - t << endl;)\r
- if (!check(dst_gold, Mat(dst), 5 * h * w * cn * cn * 1e-5f)) return;\r
+ if (!check(dst_gold, Mat(dst), 5 * h * w * cn * cn * 1e-5f, "CCORR 8U")) return;\r
\r
gen(image, n, m, CV_8U, cn);\r
gen(templ, h, w, CV_8U, cn);\r
F(t = clock();)\r
gpu::matchTemplate(gpu::GpuMat(image), gpu::GpuMat(templ), dst, CV_TM_CCORR_NORMED);\r
F(cout << "gpu_block: " << clock() - t << endl;)\r
- if (!check(dst_gold, Mat(dst), h * w * 1e-6f)) return;\r
+ if (!check(dst_gold, Mat(dst), h * w * 1e-6f, "CCORR_NORMED 8U")) return;\r
\r
gen(image, n, m, CV_8U, cn);\r
gen(templ, h, w, CV_8U, cn);\r
F(t = clock();)\r
gpu::matchTemplate(gpu::GpuMat(image), gpu::GpuMat(templ), dst, CV_TM_CCOEFF);\r
F(cout << "gpu_block: " << clock() - t << endl;)\r
- if (!check(dst_gold, Mat(dst), 5 * h * w * cn * cn * 1e-5f)) return;\r
+ if (!check(dst_gold, Mat(dst), 5 * h * w * cn * cn * 1e-5f, "CCOEFF 8U")) return;\r
\r
gen(image, n, m, CV_8U, cn);\r
gen(templ, h, w, CV_8U, cn);\r
F(t = clock();)\r
gpu::matchTemplate(gpu::GpuMat(image), gpu::GpuMat(templ), dst, CV_TM_CCOEFF_NORMED);\r
F(cout << "gpu_block: " << clock() - t << endl;)\r
- if (!check(dst_gold, Mat(dst), h * w * 1e-6f)) return;\r
+ if (!check(dst_gold, Mat(dst), h * w * 1e-6f, "CCOEFF_NORMED 8U")) return;\r
\r
gen(image, n, m, CV_32F, cn);\r
gen(templ, h, w, CV_32F, cn);\r
F(t = clock();)\r
gpu::matchTemplate(gpu::GpuMat(image), gpu::GpuMat(templ), dst, CV_TM_SQDIFF);\r
F(cout << "gpu_block: " << clock() - t << endl;)\r
- if (!check(dst_gold, Mat(dst), 0.25f * h * w * 1e-5f)) return;\r
+ if (!check(dst_gold, Mat(dst), 0.25f * h * w * 1e-5f, "SQDIFF 32F")) return;\r
\r
gen(image, n, m, CV_32F, cn);\r
gen(templ, h, w, CV_32F, cn);\r
F(t = clock();)\r
gpu::matchTemplate(gpu::GpuMat(image), gpu::GpuMat(templ), dst, CV_TM_CCORR);\r
F(cout << "gpu_block: " << clock() - t << endl;)\r
- if (!check(dst_gold, Mat(dst), 0.25f * h * w * 1e-5f)) return;\r
+ if (!check(dst_gold, Mat(dst), 0.25f * h * w * 1e-5f, "CCORR 32F")) return;\r
}\r
}\r
}\r
rng.fill(a, RNG::UNIFORM, Scalar::all(0.001f), Scalar::all(1.f));\r
}\r
\r
- bool check(const Mat& a, const Mat& b, float max_err)\r
+ bool check(const Mat& a, const Mat& b, float max_err, const string& method="")\r
{\r
if (a.size() != b.size())\r
{\r
- ts->printf(CvTS::CONSOLE, "bad size");\r
+ ts->printf(CvTS::CONSOLE, "bad size, method=%s\n", method.c_str());\r
ts->set_failed_test_info(CvTS::FAIL_INVALID_OUTPUT);\r
return false;\r
}\r
\r
+ //for (int i = 0; i < a.rows; ++i)\r
+ //{\r
+ // for (int j = 0; j < a.cols; ++j)\r
+ // {\r
+ // float a_ = a.at<float>(i, j);\r
+ // float b_ = b.at<float>(i, j);\r
+ // if (fabs(a_ - b_) > max_err)\r
+ // {\r
+ // ts->printf(CvTS::CONSOLE, "a=%f, b=%f, i=%d, j=%d\n", a_, b_, i, j);\r
+ // cin.get();\r
+ // }\r
+ // }\r
+ //}\r
+\r
float err = (float)norm(a, b, NORM_INF);\r
if (err > max_err)\r
{\r
- ts->printf(CvTS::CONSOLE, "bad accuracy: %f\n", err);\r
+ ts->printf(CvTS::CONSOLE, "bad accuracy: %f, method=%s\n", err, method.c_str());\r
ts->set_failed_test_info(CvTS::FAIL_INVALID_OUTPUT);\r
return false;\r
}\r