The pinhole equations produce a position on the image plane in metres, measured from the optical axis. A file on disk stores pixel indices from the top-left corner. The intrinsic matrix is exactly the conversion between those two, and nothing else:
Note the order. The division happens first, producing normalised coordinates ; then acts, and it is a plain 2D affine map — scale, shear, translate. Nothing about is perspective. It is a units conversion that happens to be written as a matrix.
Entry by entry:
- — focal length in pixels. This is the physical focal length divided by the physical pixel pitch, which is why " " is meaningless without an image size and why the number changes when you resize an image. means non-square pixels; on modern sensors the ratio is to within a fraction of a percent, and a calibration that returns is telling you about your calibration, not your sensor.
- — the principal point, where the optical axis pierces the sensor. Nominally the image centre; in practice off by a few to a few tens of pixels from manufacturing tolerance. It moves when you crop.
- — skew, non-rectangular pixels. Zero. It has been zero for thirty years. Its only use is as a sanity check: if your calibration returns a large skew, one of your other parameters is absorbing an error.
Focal length and field of view
-
Half the image width subtends half the horizontal field of view, at distance f_x. Both in pixels, so the units cancel.
-
The usable form. Note it depends on the image width — a focal length alone never determines a field of view.
-
And back, for when a datasheet gives you degrees and your code wants pixels.
You centre-crop a 1920×1080 image to 1280×720. What are the new intrinsics?
Show answer
and are unchanged — cropping removes pixels, it does not change the angle any remaining pixel subtends. The principal point moves by the crop offset: , . The field of view is smaller, but that is because and shrank in the formula, not because changed.