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 Preslertypedef perf::TestBaseWithParam<size_t> VectorLength; 10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef std::tr1::tuple<int, int> MaxDim_MaxPoints_t; 12793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef perf::TestBaseWithParam<MaxDim_MaxPoints_t> MaxDim_MaxPoints; 13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 14793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPERF_TEST_P(VectorLength, phase32f, testing::Values(128, 1000, 128*1024, 512*1024, 1024*1024)) 15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler size_t length = GetParam(); 17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler vector<float> X(length); 18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler vector<float> Y(length); 19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler vector<float> angle(length); 20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler declare.in(X, Y, WARMUP_RNG).out(angle); 22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler TEST_CYCLE_N(200) cv::phase(X, Y, angle, true); 24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler SANITY_CHECK(angle, 5e-5); 26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} 27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 28793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPERF_TEST_P( MaxDim_MaxPoints, kmeans, 29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler testing::Combine( testing::Values( 16, 32, 64 ), 30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler testing::Values( 300, 400, 500) ) ) 31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler RNG& rng = theRNG(); 33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler const int MAX_DIM = get<0>(GetParam()); 34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler const int MAX_POINTS = get<1>(GetParam()); 35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler const int attempts = 5; 36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat labels, centers; 38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler int i, N = 0, N0 = 0, K = 0, dims = 0; 39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler dims = rng.uniform(1, MAX_DIM+1); 40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler N = rng.uniform(1, MAX_POINTS+1); 41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler N0 = rng.uniform(1, MAX(N/10, 2)); 42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler K = rng.uniform(1, N+1); 43793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 44793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat data0(N0, dims, CV_32F); 45793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler rng.fill(data0, RNG::UNIFORM, -1, 1); 46793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 47793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat data(N, dims, CV_32F); 48793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler for( i = 0; i < N; i++ ) 49793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler data0.row(rng.uniform(0, N0)).copyTo(data.row(i)); 50793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 51793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler declare.in(data); 52793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 53793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler TEST_CYCLE() 54793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler { 55793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler kmeans(data, K, labels, TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 30, 0), 56793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler attempts, KMEANS_PP_CENTERS, centers); 57793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 58793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 59793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat clusterPointsNumber = Mat::zeros(1, K, CV_32S); 60793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 61793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler for( i = 0; i < labels.rows; i++ ) 62793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler { 63793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler int clusterIdx = labels.at<int>(i); 64793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler clusterPointsNumber.at<int>(clusterIdx)++; 65793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 66793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 67793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat sortedClusterPointsNumber; 68793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cv::sort(clusterPointsNumber, sortedClusterPointsNumber, cv::SORT_EVERY_ROW + cv::SORT_ASCENDING); 69793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 70793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler SANITY_CHECK(sortedClusterPointsNumber); 71793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} 72