The Image Formation Model
Every computer vision system begins with a single, humbling fact: a camera destroys information. A three-dimensional world full of depth, occlusion, and material texture collapses onto a flat, two-dimensional grid of numbers. The image formation model is the mathematical account of exactly how that collapse happens. It shows which physical quantities are lost, which are preserved, and how the surviving light is measured as pixel intensity. Understanding this model is not academic bookkeeping. It is the reason a self-driving car cannot simply "see" distance from one photograph. It is also the reason two photos of the same scene look different in brightness. And it is the reason algorithms for Stereo Vision and Structure from Motion must explicitly model geometry and light, rather than treat images as arbitrary arrays. The central idea is to split image formation into two independent stages: a geometric stage that determines where a point in the world lands on the sensor, and a photometric (radiometric) stage that determines how much light energy arrives there and how the sensor converts that energy into a number. Geometry answers "which pixel?"; radiometry answers "what value?". Keeping these two questions separate is the single most useful conceptual move in the entire subject. It lets you reason about lens distortion, camera pose, and 3D structure without worrying about exposure. It also lets you reason about shading and reflectance without worrying about camera position. This separation is not just pedagogical convenience — it mirrors the actual physics. Light leaves a source and bounces off surfaces according to their material properties (reflectance). It travels in straight lines through space, is bent by a lens, and is finally integrated over a small sensor area and a finite exposure time. Each of these physical steps has a clean mathematical description. Chaining them together produces the full image formation equation used throughout computer vision, graphics, and photogrammetry. This article builds that chain from first principles: the pinhole projection that maps 3D points to 2D pixels, the radiometric quantities (radiance, irradiance) that connect scene brightness to sensor response, and the combined model that explains phenomena such as vignetting, exposure, and depth-dependent blur. It sets up, but deliberately does not fully develop, the two natural next topics: the precise geometry of The Pinhole Camera Model and the role of real Lenses and Optics in shaping that idealized picture.
- Image formation splits cleanly into geometry (where a 3D point lands) and radiometry (what value it gets).
- The pinhole/perspective model maps a 3D point to 2D via a simple projection: divide by depth, scale by focal length.
- Radiance leaving a surface, not the surface color alone, determines image brightness — light source, geometry, and material all matter.
- Image irradiance is proportional to scene radiance, modulated by the camera's aperture, focal length, and off-axis angle (the cos⁴ falloff).
- The full pipeline — scene radiance → lens → sensor irradiance → integration time → quantization — explains vignetting, noise, and exposure.
- This model underlies camera calibration, 3D reconstruction, photometric stereo, and every downstream vision algorithm that assumes a physical camera.
An image is the result of two independent physical processes — geometric projection of points and radiometric measurement of light — and every vision algorithm implicitly assumes some model of both.
The idea
The image formation model describes the transformation from a scene, a continuous distribution of light-emitting and light-reflecting surfaces in 3D space, to an image, a discrete 2D array of intensity values. This transformation is usually decomposed into a geometric projection and a radiometric response. The geometric part answers: given a 3D point in the world, at which pixel does it appear? The simplest and most widely used answer is the pinhole (perspective) projection: light from travels in a straight line through a single point (the optical center) and strikes an image plane at distance (the focal length) behind it. This produces the projection equations
where are coordinates on the image plane, later converted to pixel coordinates via the sensor's pixel size and principal point offset. The key qualitative fact — objects farther away ( larger) project smaller — is what makes monocular depth ambiguous and multi-view geometry necessary. The radiometric part answers: given that a ray from reaches the sensor, what numerical value does that pixel record? This depends on the scene radiance leaving the surface toward the camera (itself a function of illumination, surface orientation, and material reflectance), the image irradiance that radiance produces at the sensor after passing through the lens aperture, and finally the sensor's conversion of irradiance, integrated over exposure time, into a digital number through gain and quantization. Radiance is preserved along a ray in free space (ignoring atmospheric effects), but irradiance at the sensor is not equal to radiance — it is attenuated by the lens geometry, most importantly by a factor of where is the angle between the ray and the optical axis, which is the physical origin of vignetting (darkening toward image corners). Putting the two halves together gives the full image formation equation used throughout the field:
where is irradiance at pixel derived from scene radiance via the geometric mapping and lens aperture, is exposure time, is a sensor gain, and is a (possibly nonlinear) camera response function converting accumulated charge to a digital pixel value. Every vision algorithm that assumes "brighter surface brighter pixel" or "closer object different pixel location" is implicitly relying on some version of this equation.
How it works
The image formation pipeline can be broken into five explicit stages, each with a well-defined mathematical operation. This decomposition is what lets camera calibration, photometric correction, and 3D reconstruction be solved as separate, tractable sub-problems rather than one intractable black box.
Stage 1 — Scene radiance. For each visible surface point, compute the radiance leaving that point toward the camera. This depends on incoming illumination from all directions, the surface's bidirectional reflectance distribution function (BRDF) , and the surface normal :
Stage 2 — Geometric projection. Map the 3D point to a 2D location on the image plane using the pinhole model (extended later with lens distortion). This uses the camera's extrinsic parameters (rotation , translation , placing the point in camera coordinates) and intrinsic parameters (focal length, pixel scale, principal point).
Stage 3 — Lens aperture and irradiance. Convert the radiance arriving along each ray into image irradiance at the corresponding pixel, accounting for the lens aperture diameter , focal length , and the off-axis angle :
Stage 4 — Sensor integration. Integrate irradiance over the pixel's finite area and the exposure time , then apply gain (ISO-like sensitivity) to produce an analog signal.
Stage 5 — Quantization and response. Apply the sensor/ISP response function (often approximately linear for RAW data, nonlinear such as gamma-corrected for JPEG output), add sensor noise, and quantize to a fixed bit depth (e.g., 8 or 12 bits). The pseudocode below implements this pipeline for a synthetic scene made of point samples with known position, normal, and material, which is exactly how physically based renderers and vision simulators generate labeled training data. ``` function FORM_IMAGE(scene_points, camera):
# scene_points: list of (P_world, normal, brdf, light_sources)
# camera: {R, t, f, pixel_size, principal_point, aperture_d, exposure_dt, gain, response_fn} image_irradiance = zeros(height, width) depth_buffer = full(height, width, +infinity) for each point in scene_points:
# --- Stage 1: radiance leaving the surface --- L = compute_radiance(point.normal, point.brdf, point.light_sources)
# --- Stage 2: geometric projection (pinhole) --- P_cam = camera.R point.P_world + camera.t # world -> camera coords if P_cam.Z <= 0: continue # behind the camera, skip x = camera.f P_cam.X / P_cam.Z y = camera.f * P_cam.Y / P_cam.Z (u, v) = to_pixel_coords(x, y, camera.pixel_size, camera.principal_point) if not in_bounds(u, v, height, width): continue
# --- occlusion: keep only the nearest point per pixel --- if P_cam.Z >= depth_buffer[u, v]: continue depth_buffer[u, v] = P_cam.Z
# --- Stage 3: radiance -> irradiance via lens aperture, cos^4 falloff --- alpha = angle_between(ray_direction(u, v, camera), camera.optical_axis) E = L (pi / 4) (camera.aperture_d / camera.f)^2 * cos(alpha)^4 image_irradiance[u, v] = E
# --- Stage 4: integrate over exposure time and apply gain --- signal = image_irradiance camera.exposure_dt camera.gain
# --- Stage 5: response function, noise, quantization --- signal = signal + sample_sensor_noise(signal) pixel_values = quantize(camera.response_fn(signal), bit_depth=8) return pixel_values ``` The loop over `scene_points` with a depth buffer is the standard way to correctly resolve occlusion: multiple 3D points can project to the same pixel, and only the nearest (smallest camera-space depth ) should contribute, since it physically blocks light from farther points along that ray.
Complexity & correctness
Time and space complexity. For a scene represented by point samples (or, in a rasterizer, triangle vertices) and an image of pixels, the algorithm above performs work per point for radiance computation and projection, and amortized work per depth-buffer update, giving overall time complexity
— linear in the number of scene primitives plus a constant pass to initialize and finalize the image buffer. Space complexity is for the irradiance image and depth buffer, plus to store the scene description if it must be kept in memory. This is asymptotically optimal: any correct renderer must at minimum write to every pixel it touches and read every scene primitive at least once, so is a lower bound whenever primitives can independently affect arbitrary pixels. Real rasterizers using triangles rather than points add a per-triangle rasterization cost proportional to the triangle's projected pixel area, but the point-sample analysis captures the essential linear scaling.
Correctness argument. The correctness of the pipeline rests on three invariants that must each be maintained: 1. Projection invariant: a 3D point with camera-frame depth projects to the unique pixel predicted by similar triangles under the pinhole assumption — this follows directly from Euclidean geometry: the ray from the origin through intersects the plane at , which is exactly the perspective divide used in Stage 2. Points with are behind the camera and must be discarded, otherwise the projection formula would place them incorrectly in front. 2. Occlusion invariant: at the end of processing, `depth_buffer[u,v]` holds the minimum camera-space depth among all points that projected to , and `image_irradiance[u,v]` corresponds to that same nearest point. This is maintained inductively: each new candidate point is accepted only if its depth is strictly less than the current minimum, so after processing all points the buffer reflects the true visible surface — exactly the physical fact that opaque nearer surfaces block farther light along the same ray. 3. Radiometric invariant: the irradiance formula is not an approximation invented for convenience but follows from integrating radiance over the solid angle subtended by a lens aperture of diameter at distance , projected through angle from the axis — the four factors of arise from foreshortening of the aperture as seen from the point (one factor), foreshortening of the pixel as seen from the lens (one factor), and the inverse-square falloff of solid angle with the two remaining factors of absorbed into the distance term. This derivation is standard in radiometry and explains why corners of wide-angle images are reliably darker even for a perfectly uniform scene.
Honest tradeoffs. The pinhole model ignores lens aberrations, diffraction, and finite aperture blur (depth of field), all of which require extending Stage 3 with a more detailed optical model — the subject of lens-based image formation. The point-sampled radiance model also ignores interreflection and global illumination unless the radiance computation in Stage 1 itself recursively accounts for light bouncing between surfaces, which is expensive. Finally, treating the sensor response as known and fixed is itself an approximation; real cameras apply proprietary, often nonlinear in-camera processing (white balance, tone mapping, denoising) that must be estimated or inverted (radiometric calibration) before radiance-level reasoning is valid.
Worked example
Consider a small gray Lambertian sphere of radius m sitting at world position m, illuminated by a point light of intensity such that the topmost surface point facing the camera has outgoing radiance . The camera has focal length m (50 mm), aperture diameter m (), pixel size , exposure time , gain , and a linear response .
| Stage | Quantity | Computation | Result |
|---|---|---|---|
| 1. Radiance | at the surface point closest to axis | given | |
| 2. Projection | Surface point at m in camera frame | m, | |
| 2. Pixel coords | convert to pixel with m pitch, principal point at center (say 512,384) | , | |
| 3. Off-axis angle | , | ||
| 3. Irradiance | |||
| 4. Exposure | |||
| 5. Quantized value | assume chosen so full well maps to , e.g. |
The nearly-off-axis point () suffers negligible vignetting here, but repeating the same computation for a surface point projecting to the far image corner — say , giving m and — yields , roughly a 35% darkening purely from geometry, even though the physical surface radiance is identical. This is precisely the vignetting effect that flat-field calibration must remove before, for example, using pixel brightness as a proxy for surface reflectance in Photometric Stereo.
Common pitfalls & traps
| Pitfall | Why it happens | Consequence |
|---|---|---|
| Confusing radiance and irradiance | Treating "surface brightness" and "pixel value" as the same physical quantity | Ignores lens attenuation, falloff, and exposure — breaks any photometric reasoning |
| Forgetting the (behind-camera) check | Perspective divide formula is applied blindly | Points behind the camera are incorrectly projected as if in front, corrupting geometry |
| Skipping the depth buffer / occlusion test | Assuming scene points are processed in a convenient order | Farther, hidden surfaces overwrite or blend with nearer visible ones |
| Assuming the camera response is linear | RAW-vs-JPEG confusion; many pipelines apply gamma or tone-mapping | Radiometric algorithms (shape-from-shading, photometric stereo) silently fail on processed JPEGs |
| Ignoring vignetting in wide-angle lenses | The term is small near the axis, easy to forget | Uniform-albedo scenes appear to darken toward the edges, misread as material or lighting variation |
| Treating pixel size as isotropic without calibration | Assuming square pixels and a centered principal point | Small calibration errors compound into large 3D reconstruction errors |
Pioneers & history
The image formation model synthesizes three historically separate lineages: the geometry of perspective from Renaissance art and optics, the physics of radiometric measurement, and the computational formalization of both within computer vision starting in the 1970s–1980s.
Origins · 1 minBerthold K. P. Horn and how this was discovered
Horn's work at MIT established the image irradiance equation relating scene radiance, surface orientation, and pixel brightness in a rigorous, computable form, laying the mathematical groundwork that this article's radiometric stages directly follow.
Where this matters
Camera calibration pipelines, used in every robotics and augmented-reality system, exist precisely to estimate the intrinsic and extrinsic parameters of the geometric half of this model, so that pixel coordinates can be converted back into 3D rays. Multi-view 3D reconstruction, autonomous vehicle perception stacks, and photogrammetry software (used for mapping, archaeology, and visual effects) all depend on the pinhole projection equation being an accurate — or accurately corrected — description of how points land in the image. On the radiometric side, high dynamic range (HDR) imaging, photometric stereo for industrial inspection and film-quality 3D scanning, and physically based rendering engines used in game and movie production all rely on recovering or simulating the sensor's radiometric response function. Even modern learned approaches — neural radiance fields, differentiable rendering, and self-supervised depth estimation from video — bake the same pinhole-and-radiance equations directly into their loss functions and forward models, showing that this classical formulation remains foundational even inside deep learning systems. Consumer smartphone cameras apply real-time vignetting correction and exposure fusion that are direct engineering responses to the falloff and dynamic-range limits described here.
Ask the tutor: How does adding real lens distortion change the geometric projection equations derived here?
Why is image formation split into geometric and radiometric parts instead of one unified model?
Because the two processes are physically and mathematically independent given a fixed camera and scene. Geometry depends only on the position and orientation of points relative to the camera (rigid transforms and projection), while radiometry depends only on light transport and material reflectance. Splitting them lets you solve each with the tools suited to it: geometry with linear algebra and projective transforms (used in calibration and 3D reconstruction), radiometry with integrals over the BRDF and illumination (used in shading and photometric stereo). This separation is also why you can calibrate a camera's geometry using a printed checkerboard under any lighting, and separately correct its radiometric response using a gray card, without the two calibrations interfering.
Does the pinhole model ever break down badly enough to matter in practice?
Yes, in two common situations. First, wide-angle and fisheye lenses introduce significant radial distortion that the linear pinhole equations do not capture, requiring an added distortion model (typically polynomial in radius) before pixel coordinates match reality. Second, real lenses have finite aperture, producing depth-of-field blur that the infinitesimally small pinhole aperture cannot represent at all — a truly ideal pinhole has infinite depth of field but also admits almost no light. Both issues are addressed by extending the model with real lens optics, which trade off sharpness, light-gathering, and geometric fidelity in ways the ideal pinhole abstraction ignores.
What is the difference between radiance and irradiance, precisely?
Radiance is a property of a ray of light: power per unit area per unit solid angle per unit projected area, roughly "how bright a ray is" independent of any observer, and it is invariant along a ray in a vacuum. Irradiance is a property of a surface (such as the camera sensor): power per unit area arriving from all incoming directions, obtained by integrating incoming radiance over a hemisphere of directions weighted by the cosine of incidence angle. A camera sensor measures irradiance (accumulated over exposure time), but that irradiance is derived from the radiance of the scene points imaged through the lens, related by the aperture and cos⁴α attenuation described in this article.
How does exposure time interact with the geometric model?
Exposure time is purely a radiometric/temporal parameter and does not affect where points project — the geometric mapping from 3D to pixel coordinates is instantaneous and independent of . However, exposure time strongly affects two things the geometric model assumes are fixed: if the camera or scene moves during a long exposure, points effectively project to a range of pixels (motion blur), violating the static-projection assumption, and if is too short or too long, the accumulated signal underflows into noise or saturates, both of which corrupt the radiometric measurement even though the geometry remains correct.
Why do vision researchers care about the camera response function g(·) instead of just using raw pixel values?
Many classic and modern algorithms — shape-from-shading, photometric stereo, high dynamic range merging, intrinsic image decomposition — need pixel values that are linear in scene irradiance to apply their underlying physical equations correctly. If the camera applies a nonlinear response (common for perceptual reasons: gamma encoding matches human brightness perception and compresses dynamic range for 8-bit storage), then naively treating pixel value as radiance introduces systematic multiplicative and additive errors. Radiometric calibration methods, such as recovering from multiple differently-exposed photos of a static scene, invert this nonlinearity so that downstream physically based reasoning becomes valid again.
Is the pinhole camera model still relevant given deep learning-based vision systems?
Yes, arguably more than ever. Neural radiance fields, differentiable renderers, and self-supervised monocular depth networks all embed the pinhole (or a distorted extension of it) projection equation directly inside their loss functions, because it is the correct, differentiable, and data-efficient way to relate 3D structure to 2D observations. Even purely data-driven detectors benefit from knowing the camera's intrinsics when reasoning about object scale or distance. The image formation model is not replaced by learning — it is the physical scaffolding that tells a learned model what geometric and photometric relationship it should be learning to exploit or invert.