Moving a pinhole camera

geometry

First of all, I should say all my information on pinhole camera is only 1 day old, so I'm not sure if anything that I say is correct or not. But lets assume that I have a point on the image plane and a set of world points. I want to find out if any of my world points will match my point on the image plane if I move my camera from point A to B.

I don't know if this approach is possible or not, but I thought if I calculate the plane containing 3 points (A, B, point in image plane), I can calculate distance of world points from this plane and find out if any of these points will be seen during transition from A to B.

What do you think? Is my approach correct? In addition, I will be happy to have some good reference over pinhole cameras.

Best Answer

The pinhole camera model is the simplest model of a perspective projection camera. In this model, the camera has a coordinate frame represented by a translation vector $d$ and a rotation matrix $R$ whose columns are the unit directions of the three axes. If $r(x,y,z)$ is a point expressed in world coordinates (relative to the absolute frame) and $p(x',y',z')$ is this same point but expressed in the camera coordinate frame then

$ r = d + R p $

So

$ p = R^T (r - d) $

In the pinhole camera model, a projection plane is created at the plane $ z' = f $ where $f $ is a positive constant. Given a point $r_1(x_1, y_1, z_1) $ then its image on the projection plane is generated as follows. Connect $r_1$ to the origin (which is $d$) and intersect this line with the projection plane.

Equation of this line of sight between $d$ and $r_1$ is

$r(t) = d + t (r_1 - d) $

Now the projection plane equation is $z' = f$, using this information, we can determine the value of $t$ that gives the intersection of the line of sight with the projection plane, simply by setting the $z'$ coordinate of $r(t)$ to $f$.

$p = R^T (r(t) - d) $, so $ p = t R^T (r_1 - d ) $. Setting the third coordinate to $f$ gives

$ t = \dfrac{f}{k^T R^T (r1 - d ) } $

where $k^T = [0, 0, 1] $ Thus the image is

$ p = \dfrac{f R^T (r_1 - d)} { k^T R^T (r_1 - d) } \hspace{15pt}(*) $

The coordinate of $p$ are the image coordinates on the projection plane. Since the projection plane in reality is not infinite but bounded, we can assume that its bounds are the region $[-x_0, x_0] \times [-y_0, y_0 ]$.

Then we can determine if a world point is visible through the image boundaries by calculating $p$ directly using equation $(*)$

Related Question