I am working with my Kinect on some 2D 3D image processing. Here is my problem: I have points in 3D (x,y,z) which lie on a plane. I also know the coordinates of the points on the RGB image (x,y). Now I want to estimate a 2D-3D homography matrix to estimate the (x1,y1,z1) coordinates to a random (x1,y1) point. I think that is possible, but I don't know where to start.
Thanks!
Homography lets us relate two cameras viewing the same planar surface; Both the cameras and the surface that they view (generate images of) are located in the world-view coordinates. In other words, two 2D images are related by a homography H, if both view the same plane from a different angle.
The essential matrix is a more generalized form of a homography. Whereas a homography relates coplanar image space points, the essential matrix relates any set of points in an image to points in another image taken by the same camera.
In the field of computer vision, any two images of the same planar surface in space are related by a homography (assuming a pinhole camera model). This has many practical applications, such as image rectification, image registration, or camera motion—rotation and translation—between two images.
We have seen that a homography can be used to map one image to the other in the case of pure camera rotation or a planar scene. If such a homography exists between the images, four points are sufficient to specify it precisely.
What you're looking for is a camera projection matrix, not a homography. A homography maps a plane seen from a camera to the same plane seen from another.
For estimating the camera matrix, look up solutions to solving for camera pose from known point correspondences. To get you started, a seminal paper on the topic and the OpenCV implementation solvePnP.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With