mirror of
https://github.com/opencv/opencv.git
synced 2024-12-02 07:39:57 +08:00
fixed problem in solvePnPRansac with TBB
This commit is contained in:
parent
61c7c441b9
commit
6c308dac10
@ -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;
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user