rotation and translation matrix from homography opencv

北城以北 提交于 2019-12-08 07:04:33

问题


I'm working on an android application in java,I calculated homography with opencv using findHomography(), how I can find the matrix of the camera pose containing the rotation and translation through homography

 Mat homography = Calib3d.findHomography(ReferencePoints2, ReferencePoints1,0,Calib3d.RANSAC);

回答1:


You need to know the intrinsic parameters of the camera to do that.

Considers the z=0 plane. The point

 X=(x,y,0,1)'

is projected to the image as

p=P*X.

Now use the decomposition

P=K[R t],

where K is the calibration matrix and [R t] are extrinsic parameters. Since z=0, the third column vector of R is multiplied by zero. We can now drop the 3rd column to get

p=K*[r1 r2 t]*(x,y,1)=H*(x,y,1),

where H is a planar homography.

You have already computed H from e.g. known points. The first and second column of R and the vector t can now be recovered

[r1 r2 t]=inv(K)*H.

Make sure that r1 and r2 are unit length, then t is the correct translation vector. The third column vector of R can be recovered because R is orthogonal, for example using the cross product.

r3=cross(r1,r2).

Since H is a measurement, the r1 and r2 you computed are not exact. You can use the SVD for obtaining the closest rotation matrix to a measurement. You can then compose a projection matrix

P=K[r1 r2 r3 t]

which projects any 3D point in the coordinate frame based on your 2D coordinate system of the homograohy.

Here is some course material, which describes this situation.

https://www.dropbox.com/s/qkulg4j64lyn0qa/2018_proj_geo_for_cv_projcv_assignment.pdf?dl=0

Here is a related question. Computing camera pose with homography matrix based on 4 coplanar points

As @nbsrujan (thanks) pointed out, for those using OpenCV, there is a function which can decompose a homography into translation and rotation matrices given the intrinsics.




回答2:


OpenCV has a function which can decompose Homography to translation and rotation matrices. But, we have to choose correct translation and rotation matrix pair from array of possible matrices returned by this function.

normal vector is surface normal in first camera's frame. If you know camera's rotation in the world for initial frame, it can be used to filter out correct translation and rotation pair from list of possibilities.



来源:https://stackoverflow.com/questions/52373216/rotation-and-translation-matrix-from-homography-opencv

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!