Sensor noise model - ISET/isetcam GitHub Wiki


Sensor noise model

sensorCompute adds several independent noise sources to the ideal pixel signal. The dominant one, for most modern sensors under typical illumination, is photon shot noise — noise that is a direct consequence of counting a finite number of photons/electrons, not a defect of the electronics.

Shot noise is Poisson

Electron counts from a light source follow a Poisson distribution: the variance of the count equals its mean. ISETCam's noiseShot implements this directly — it converts the mean voltage image to electrons, draws Poisson-distributed noisy electron counts (using the exact Poisson distribution below 25 electrons per pixel, and a normal approximation above that, for speed), and converts back to a noisy voltage. Because shot noise scales with signal level, its relative effect (the shot-noise-limited SNR) improves as light level increases — the classic square-root law of photon counting. This is why shot noise, not sensor electronics, is usually the dominant noise source in adequately illuminated modern sensors.

Other noise sources

  • Read noise — additive electronic noise from the pixel's readout circuitry, roughly constant regardless of signal level, and so most visible in dark or low-light regions (sensorSet(sensor,'pixel read noise volts', ...)).
  • Dark current / dark voltage — signal that accumulates even with no light present, from thermally generated electrons (sensorSet(sensor,'pixel dark voltage', ...)).
  • DSNU (dark signal nonuniformity) — pixel-to-pixel variation in dark current, a fixed spatial pattern (sensorSet(sensor,'dsnu level', ...)).
  • PRNU (photoresponse nonuniformity) — pixel-to-pixel variation in light sensitivity (gain), also a fixed spatial pattern (sensorSet(sensor,'prnu level', ...)).

DSNU and PRNU are both spatially fixed (the same pattern from exposure to exposure), which is what makes them distinguishable from shot noise in calibration measurements — see t_sensorFPN in Sensors and camera systems.

Turning noise on or off

sensorCreate turns on all noise sources by default (sensorSet(sensor,'noise flag',2)). This is controllable for testing and teaching: setting the noise flag to a lower value disables some or all noise sources so you can isolate one effect at a time — see t_cameraNoise and t_sensorFPN in Sensors and camera systems, and s_sensorSNR in Examples for how pixel and sensor parameters combine to determine overall SNR.

Back to Sensor.