fixed problem in solvePnPRansac with TBB

This commit is contained in:
Alexander Shishkov 2012-04-06 13:33:22 +00:00
parent 61c7c441b9
commit 6c308dac10
2 changed files with 19 additions and 12 deletions

View File

@ -29,10 +29,18 @@ epnp::epnp(const cv::Mat& cameraMatrix, const cv::Mat& opoints, const cv::Mat& i
alphas.resize(4 * number_of_correspondences); alphas.resize(4 * number_of_correspondences);
pcs.resize(3 * number_of_correspondences); pcs.resize(3 * number_of_correspondences);
max_nr = 0;
A1 = NULL;
A2 = NULL;
} }
epnp::~epnp() epnp::~epnp()
{ {
if (A1)
delete[] A1;
if (A2)
delete[] A2;
} }
void epnp::choose_control_points(void) void epnp::choose_control_points(void)
@ -513,9 +521,6 @@ void epnp::gauss_newton(const CvMat * L_6x10, const CvMat * Rho,
void epnp::qr_solve(CvMat * A, CvMat * b, CvMat * X) void epnp::qr_solve(CvMat * A, CvMat * b, CvMat * X)
{ {
static int max_nr = 0;
static double * A1, * A2;
const int nr = A->rows; const int nr = A->rows;
const int nc = A->cols; const int nc = A->cols;

View File

@ -14,24 +14,24 @@ class epnp {
void compute_pose(cv::Mat& R, cv::Mat& t); void compute_pose(cv::Mat& R, cv::Mat& t);
private: private:
template <typename T> template <typename T>
void init_camera_parameters(const cv::Mat& cameraMatrix) void init_camera_parameters(const cv::Mat& cameraMatrix)
{ {
uc = cameraMatrix.at<T> (0, 2); uc = cameraMatrix.at<T> (0, 2);
vc = cameraMatrix.at<T> (1, 2); vc = cameraMatrix.at<T> (1, 2);
fu = cameraMatrix.at<T> (0, 0); fu = cameraMatrix.at<T> (0, 0);
fv = cameraMatrix.at<T> (1, 1); fv = cameraMatrix.at<T> (1, 1);
} }
template <typename OpointType, typename IpointType> template <typename OpointType, typename IpointType>
void init_points(const cv::Mat& opoints, const cv::Mat& ipoints) void init_points(const cv::Mat& opoints, const cv::Mat& ipoints)
{ {
for(int i = 0; i < number_of_correspondences; i++) for(int i = 0; i < number_of_correspondences; i++)
{ {
pws[3 * i ] = opoints.at<OpointType>(0,i).x; pws[3 * i ] = opoints.at<OpointType>(0,i).x;
pws[3 * i + 1] = opoints.at<OpointType>(0,i).y; pws[3 * i + 1] = opoints.at<OpointType>(0,i).y;
pws[3 * i + 2] = opoints.at<OpointType>(0,i).z; pws[3 * i + 2] = opoints.at<OpointType>(0,i).z;
us[2 * i ] = ipoints.at<IpointType>(0,i).x*fu + uc; us[2 * i ] = ipoints.at<IpointType>(0,i).x*fu + uc;
us[2 * i + 1] = ipoints.at<IpointType>(0,i).y*fv + vc; us[2 * i + 1] = ipoints.at<IpointType>(0,i).y*fv + vc;
} }
} }
double reprojection_error(const double R[3][3], const double t[3]); double reprojection_error(const double R[3][3], const double t[3]);
@ -74,6 +74,8 @@ class epnp {
double cws[4][3], ccs[4][3]; double cws[4][3], ccs[4][3];
double cws_determinant; double cws_determinant;
int max_nr;
double * A1, * A2;
}; };
#endif #endif