In the previous post, I looked at photon shot noise, a fundamental noise source arising from the quantum nature of light. Today I’ll examine a different kind of noise: one that’s not random from frame to frame, but rather baked into the sensor itself: Pixel Response Non-Uniformity, or PRNU. PRNU refers to pixel-to-pixel variation in a sensor’s sensitivity to light. Even under perfectly uniform illumination, some pixels produce slightly higher or lower signals than others. These variations are systematic, not random, and persist across images. Unlike shot noise, which averages out with repeated exposures, PRNU is a form of fixed pattern noise and cannot be reduced by temporal averaging, unless you use calibration techniques or dithering.
Suppose we illuminate a sensor with uniform light resulting in an average of S photoelectrons per pixel (assuming QE is factored in). Each pixel has a slightly different gain, which we model as a random variable gᵢ centered around 1.0:
gᵢ = 1 + δᵢ, where δᵢ ~ N(0, σ_PRNU)
Then the output signal for pixel i is:
xᵢ = gᵢ * S = (1 + δᵢ) * S
This implies that:
- Mean(xᵢ) = S
- Var(xᵢ) = σ_PRNU² * S²
So PRNU introduces a signal-dependent noise term that grows quadratically with the signal level, unlike shot noise, which grows linearly (variance = S).
PRNU vs. Photon Noise
To compare the two:
- Photon noise standard deviation = √S
- PRNU noise standard deviation = σ_PRNU * S
The crossover point, where PRNU becomes equal in magnitude to photon noise, occurs when:
σ_PRNU * S = √S
→ S = 1 / σ_PRNU²
For example, if σ_PRNU = 1% (0.01), PRNU becomes dominant above S = 10,000 electrons.
At low light levels, shot noise dominates, and PRNU is negligible. At high light levels, PRNU dominates, limiting the effectiveness of averaging or increased exposure. PRNU manifests as a pattern in flat-field images: the brighter the image, the more visible the pattern.
PRNU is often calibrated out during sensor characterization. This involves:
- Capturing a uniform illumination image (a flat field).
- Computing pixel-wise gain corrections.
- Applying inverse gains during image processing.
But PRNU calibration assumes stability over time and temperature. In some sensors, it drifts.
Equation Summary
- Signal per pixel: xᵢ = (1 + δᵢ) * S
- PRNU variance: Var_PRNU = σ_PRNU² * S²
- Photon noise variance: Var_photon = S
- Total signal variance (excluding read noise):
Var_total ≈ S + σ_PRNU² * S² - This leads to a nonlinear SNR curve that rolls off at high signal levels due to PRNU.
Plotting SNR vs. Mean Signal
An alternative and, at least to me, more intuitive form of the Photon Transfer Curve plots the Signal-to-Noise Ratio (SNR) against the mean signal level.
- X-axis: Mean signal (in electrons)
- Y-axis: SNR = mean / standard deviation
This plot directly illustrates how well a signal stands out from noise across the sensor’s dynamic range.
Using the same model for total variance:
σ²_total = σ_read² + S + σ_PRNU² × S²
The SNR is:
SNR(S) = S / sqrt(σ_read² + S + σ_PRNU² × S²)
This expression transitions through three regimes:
Read Noise–Limited (Low Signal)
SNR ≈ S / σ_read
Linear growth with signal.Photon Shot Noise–Limited (Mid Signal)
SNR ≈ sqrt(S)
Square root growth — this is the fundamental quantum limit.PRNU-Limited (High Signal)
SNR ≈ 1 / σ_PRNU
SNR saturates — increasing exposure yields no benefit once PRNU dominates.
Advantages of the SNR Variant
- More directly aligned with perceptual quality and dynamic range.
- Shows clearly where further exposure stops yielding SNR benefit.
- Useful for comparing different sensors or signal processing pipelines.
PRNU is a reminder that not all noise is random. While photon shot noise stems from nature, PRNU is a manufacturing imperfection. It matters most when signals are strong and noise should be low, and it sets a ceiling on the ultimate image quality from a sensor unless corrected.
I should mention that, in real world photography with modern CMOS sensors, I have not found PRNU to be significant.
Leave a Reply