Added performance tests for findCirclesGrid and solvePnP

pull/13383/head
Andrey Kamaev 14 years ago
parent 16dd655dd3
commit 99d3ce52c5
  1. 41
      modules/calib3d/perf/perf_cicrlesGrid.cpp
  2. 3
      modules/calib3d/perf/perf_main.cpp
  3. 48
      modules/calib3d/perf/perf_pnp.cpp
  4. 1
      modules/calib3d/perf/perf_precomp.cpp
  5. 13
      modules/calib3d/perf/perf_precomp.hpp
  6. 2
      modules/ts/include/opencv2/ts/ts_perf.hpp
  7. 6
      modules/ts/src/ts_perf.cpp

@ -0,0 +1,41 @@
#include "perf_precomp.hpp"
using namespace std;
using namespace cv;
using namespace perf;
typedef std::tr1::tuple<std::string, cv::Size> String_Size_t;
typedef perf::TestBaseWithParam<String_Size_t> String_Size;
PERF_TEST_P(String_Size, asymm_circles_grid, testing::Values(
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles1.jpg", Size(7,13)),
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles2.jpg", Size(7,13)),
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles3.jpg", Size(7,13)),
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles4.jpg", Size(5,5)),
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles5.jpg", Size(5,5)),
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles6.jpg", Size(5,5)),
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles7.jpg", Size(3,9)),
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles8.jpg", Size(3,9)),
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles9.jpg", Size(3,9))
)
)
{
String filename = getDataPath(std::tr1::get<0>(GetParam()));
Size gridSize = std::tr1::get<1>(GetParam());
Mat frame = imread(filename);
if (frame.empty())
FAIL() << "Unable to load source image " << filename;
vector<Point2f> ptvec;
ptvec.resize(gridSize.area());
cvtColor(frame, frame, COLOR_BGR2GRAY);
declare.in(frame).out(ptvec);
TEST_CYCLE(100)
{
ASSERT_TRUE(findCirclesGrid(frame, gridSize, ptvec, CALIB_CB_CLUSTERING | CALIB_CB_ASYMMETRIC_GRID));
}
}

@ -0,0 +1,3 @@
#include "perf_precomp.hpp"
CV_PERF_TEST_MAIN(calib3d)

@ -0,0 +1,48 @@
#include "perf_precomp.hpp"
using namespace std;
using namespace cv;
using namespace perf;
typedef std::tr1::tuple<std::string, cv::Size> String_Size_t;
typedef perf::TestBaseWithParam<int> PointsNumber;
PERF_TEST_P(PointsNumber, solvePnP, testing::Values(4, 3*9, 7*13)
)
{
int pointsNum = GetParam();
vector<Point2f> points2d(pointsNum);
vector<Point3f> points3d(pointsNum);
Mat rvec = Mat::zeros(3, 1, CV_32FC1);
Mat tvec = Mat::zeros(3, 1, CV_32FC1);
Mat distortion = Mat::zeros(5, 1, CV_32FC1);
Mat intrinsics = Mat::eye(3, 3, CV_32FC1);
intrinsics.at<float> (0, 0) = 400.0;
intrinsics.at<float> (1, 1) = 400.0;
intrinsics.at<float> (0, 2) = 640 / 2;
intrinsics.at<float> (1, 2) = 480 / 2;
warmup(points3d, WARMUP_RNG);
warmup(rvec, WARMUP_RNG);
warmup(tvec, WARMUP_RNG);
projectPoints(points3d, rvec, tvec, intrinsics, distortion, points2d);
//add noise
Mat noise(1, points2d.size(), CV_32FC2);
randu(noise, 0, 0.01);
add(points2d, noise, points2d);
declare.in(points3d, points2d);
TEST_CYCLE(1000)
{
solvePnP(points3d, points2d, intrinsics, distortion, rvec, tvec, false);
}
SANITY_CHECK(rvec);
SANITY_CHECK(tvec);
}

@ -0,0 +1 @@
#include "perf_precomp.hpp"

@ -0,0 +1,13 @@
#ifndef __OPENCV_PERF_PRECOMP_HPP__
#define __OPENCV_PERF_PRECOMP_HPP__
#include "opencv2/ts/ts.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#if GTEST_CREATE_SHARED_LIBRARY
#error no modules except ts should have GTEST_CREATE_SHARED_LIBRARY defined
#endif
#endif

@ -255,7 +255,7 @@ private:
static int64 _timeadjustment;
static int64 _calibrate();
static void warmup(cv::Mat m, int wtype);
static void warmup_impl(cv::Mat m, int wtype);
static int getSizeInBytes(cv::InputArray a);
static cv::Size getSize(cv::InputArray a);
static void declareArray(SizeVector& sizes, cv::InputOutputArray a, int wtype = 0);

@ -472,12 +472,12 @@ void TestBase::warmup(cv::InputOutputArray a, int wtype)
{
if (a.empty()) return;
if (a.kind() != cv::_InputArray::STD_VECTOR_MAT && a.kind() != cv::_InputArray::STD_VECTOR_VECTOR)
warmup(a.getMat(), wtype);
warmup_impl(a.getMat(), wtype);
else
{
size_t total = a.total();
for (size_t i = 0; i < total; ++i)
warmup(a.getMat(i), wtype);
warmup_impl(a.getMat(i), wtype);
}
}
@ -507,7 +507,7 @@ bool TestBase::next()
return ++currentIter < nIters && totalTime < timeLimit;
}
void TestBase::warmup(cv::Mat m, int wtype)
void TestBase::warmup_impl(cv::Mat m, int wtype)
{
switch(wtype)
{

Loading…
Cancel
Save