Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 2088

OpenCV solvePnPRansac() function

$
0
0
I am working on a 3D model reconstruction form multiple images project. I have the camera matrix as well as 2D-3D point correspondence. I want to compute the projection matrix. I used cv.solvePnPRansac()function to get the projection matrix as follow: retval, rvec, tvec, inliers = cv.solvePnPRansac(np.ascontiguousarray(np.squeeze(np.array(selectedpts3D)) [:,:-1]).reshape(len(selectedpts3D),1,3), np.ascontiguousarray(np.array(pts)[:,:-1]).reshape(len(pts),1,2), np.array(K_global), np.array([]), flags = cv.SOLVEPNP_ITERATIVE) rvec_matrix = cv.Rodrigues(rvec)[0] proj_matrix = np.hstack((rvec_matrix, tvec)) Then I factorize the output projection matrix to get camera matrix, rotation matrix and translation matrix as follow: def factorize_proj_matrix(P): """ Factorize the camera matrix into K,R,t as P = K[R|t]. """ # factor first 3*3 part K1,R = linalg.rq(P[:,:3]) # make diagonal of K positive T = np.diag(np.sign(np.diag(K1))) if np.linalg.det(T) < 0: T[1,1] *= -1 K1 = np.dot(K1,T) R = np.dot(T,R) # T is its own inverse t = np.dot(np.linalg.inv(K1),P[:,3]) return K1, R, t.reshape(3,1) but the resulted camera matrix "K" has different values than the passed camera matrix to solvePnPRansac() function. passed camera matrix to function is: [[1.5204e+03 0.0000e+00 3.0232e+02] [0.0000e+00 1.5259e+03 2.4687e+02] [0.0000e+00 0.0000e+00 1.0000e+00]] output camera matrix is: array([[ 2.43791400e-03, -7.07610743e-21, 3.23838460e-22], [ 0.00000000e+00, 2.43791400e-03, -2.88994138e-22], [ 0.00000000e+00, 0.00000000e+00, 2.43791400e-03]]) My question is does cv.solvePnPRansac() function changes the cameraMatrix. if yes how to enforce it not to change the camera matrix?

Viewing all articles
Browse latest Browse all 2088

Trending Articles