Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

triangulatePoints about 3D Reconstruction

I'm using triangulation to proceed with 3D reconstruction.

so I used one 2D camera and I stored the reference image.(intrinsic parameter is same)

reference Image: R1, t1 cam: R2, t2

solvePnP(...,rv1,t1) rodrigues(rv1, R1)

solvePnP(...,rv2,t2) rodrigues(rv2, R2)

so

The relative pixel location between the camera can be expressed as:

C0 = R1 * W + t1 C1 = R2 * W + t2

W = R1.inv() * (C0 - t1)

C1 = R2(R1.inv() * (C0 - t1) + t2

R = R2 * R1.inv() T = t2 -R2 * R1.inv() * t1

and then

cv::Mat P0 = K * cv::Mat::eye(3, 4, CV_64F); // reference image
cv::Mat Rt, X;
cv::hconcat(R, T, Rt);
cv::Mat P1 = K * Rt; // live cam
cv::triangulatePoints(P0, P1, points0, points1, X);  (points: 2D image Coordinate using SIFT matching)

it was not an answer.

But if P0 = (R1, t1) and P1 = (R2, t2), it worked well.

Why did not the expression using the relative relationship between the cameras work? Did I make a mistake?

triangulatePoints about 3D Reconstruction

I'm using triangulation to proceed with 3D reconstruction.

so I used one 2D camera and I stored the reference image.(intrinsic parameter is same)

reference Image: R1, t1 t1

cam: R2, t2

solvePnP(...,rv1,t1) solvePnP(...,rv1,t1)

rodrigues(rv1, R1)

solvePnP(...,rv2,t2) solvePnP(...,rv2,t2)

rodrigues(rv2, R2)

so

The relative pixel location between the camera can be expressed as:

C0 = R1 * W + t1 t1

C1 = R2 * W + t2

W = R1.inv() * (C0 - t1)

C1 = R2(R1.inv() * (C0 - t1) + t2

R = R2 * R1.inv() R1.inv()

T = t2 -R2 * R1.inv() * t1

and then

cv::Mat P0 = K * cv::Mat::eye(3, 4, CV_64F); // reference image
cv::Mat Rt, X;
cv::hconcat(R, T, Rt);
cv::Mat P1 = K * Rt; // live cam
cv::triangulatePoints(P0, P1, points0, points1, X);  (points: 2D image Coordinate using SIFT matching)

it was not an answer.

But if P0 = (R1, t1) and P1 = (R2, t2), it worked well.

Why did not the expression using the relative relationship between the cameras work? Did I make a mistake?