1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "perf_precomp.hpp" 2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing namespace std; 4793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing namespace cv; 5793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing namespace perf; 6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing std::tr1::make_tuple; 7793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing std::tr1::get; 8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 9793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerCV_ENUM(MethodType, TM_SQDIFF, TM_SQDIFF_NORMED, TM_CCORR, TM_CCORR_NORMED, TM_CCOEFF, TM_CCOEFF_NORMED) 10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef std::tr1::tuple<Size, Size, MethodType> ImgSize_TmplSize_Method_t; 12793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef perf::TestBaseWithParam<ImgSize_TmplSize_Method_t> ImgSize_TmplSize_Method; 13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 14793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPERF_TEST_P(ImgSize_TmplSize_Method, matchTemplateSmall, 15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler testing::Combine( 16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler testing::Values(szSmall128, cv::Size(320, 240), 17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cv::Size(640, 480), cv::Size(800, 600), 18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cv::Size(1024, 768), cv::Size(1280, 1024)), 19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler testing::Values(cv::Size(12, 12), cv::Size(28, 9), 20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cv::Size(8, 30), cv::Size(16, 16)), 21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler MethodType::all() 22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler ) 23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler ) 24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Size imgSz = get<0>(GetParam()); 26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Size tmplSz = get<1>(GetParam()); 27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler int method = get<2>(GetParam()); 28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat img(imgSz, CV_8UC1); 30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat tmpl(tmplSz, CV_8UC1); 31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat result(imgSz - tmplSz + Size(1,1), CV_32F); 32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler declare 34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler .in(img, WARMUP_RNG) 35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler .in(tmpl, WARMUP_RNG) 36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler .out(result) 37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler .time(30); 38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler TEST_CYCLE() matchTemplate(img, tmpl, result, method); 40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler bool isNormed = 42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler method == TM_CCORR_NORMED || 43793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler method == TM_SQDIFF_NORMED || 44793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler method == TM_CCOEFF_NORMED; 45793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler double eps = isNormed ? 1e-5 46793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler : 255 * 255 * tmpl.total() * 1e-6; 47793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 48793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler SANITY_CHECK(result, eps); 49793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} 50793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 51793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPERF_TEST_P(ImgSize_TmplSize_Method, matchTemplateBig, 52793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler testing::Combine( 53793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler testing::Values(cv::Size(1280, 1024)), 54793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler testing::Values(cv::Size(1260, 1000), cv::Size(1261, 1013)), 55793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler MethodType::all() 56793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler ) 57793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler ) 58793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 59793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Size imgSz = get<0>(GetParam()); 60793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Size tmplSz = get<1>(GetParam()); 61793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler int method = get<2>(GetParam()); 62793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 63793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat img(imgSz, CV_8UC1); 64793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat tmpl(tmplSz, CV_8UC1); 65793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat result(imgSz - tmplSz + Size(1,1), CV_32F); 66793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 67793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler declare 68793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler .in(img, WARMUP_RNG) 69793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler .in(tmpl, WARMUP_RNG) 70793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler .out(result) 71793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler .time(30); 72793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 73793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler TEST_CYCLE() matchTemplate(img, tmpl, result, method); 74793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 75793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler bool isNormed = 76793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler method == TM_CCORR_NORMED || 77793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler method == TM_SQDIFF_NORMED || 78793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler method == TM_CCOEFF_NORMED; 79793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler double eps = isNormed ? 1e-6 80793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler : 255.0 * 255.0 * (double)tmpl.total() * 1e-6; 81793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 82793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler SANITY_CHECK(result, eps); 83793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} 84