I have a function which projects a point using a 7 parameter camera model:
Vec2 project(const Rot3& R, // camera orientation
const Vec3& T, // camera pos
double f_px, // focal length
const Vec3& X) // point in world;
{
const Vec3 P = R * (X-T); // Subtract camera position and apply rotation
const Vec2 p = P.hnormalized() * f_px; // Normalize and apply focal length
return p;
}
- Rot3 is some convenient representation of a rotation. Assume it is a 3x3 matrix.
- Vec3::hnormalized() returns Vec2(x/z, y/z)
Now I want to extend the function to take an uncertainty estimation of the point I am projecting (a 3x3 covariance matrix - an ellipsoid in world coordinates) and return the 2x2 covariance matrix (an ellipse in pixel coordinates).
I think the reference to Hartley & Zisserman’s Multiple View Geometry In Computer Vision here applies, but I can't figure out the math of it.