
Introduction to Dynamic Range
Thanks for Jonathan Sachs for suggesting this module.
Dynamic Range is a postprocessor for Stepchart that calculates a camera's dynamic range— the range of exposure it can capture at a specified quality level— from up to four exposures of reflective step charts such as the Kodak Q-13 and Q-14. In most instances this approach is more convenient than using a transmission step chart, which requires an even light source and must be photographed in a totally darkened room. As with all Imatest modules, a great many display options are available.
We start by describing the operation of Dynamic Range. Dynamic range is explained in detail below.

Example of Dynamic range output showing f-stop noise
and corresponding dynamic ranges
Dynamic Range
- reads up to four CSV files created by Stepchart. The files should be the results for four stepchart images taken with the same camera and lens but with exposures separated by 2-4 f-stops.
- aligns the x-axis (log exposure) to represent the relative exposures. The resulting range is far larger than the density range of a single reflective chart— about 6.5 f-stops.
- calculates dynamic range based on f-stop noise used in Stepchart) or pixel noise (calculated in Stepchart but not used for dynamic range).
Operation
- Capture several images of a reflective test chart, with each image differing in exposure by 1 or 2 f-stops (EV). The total range from the most to least exposed image should be at least 6 f-stops (7 or 8 doesn't hurt). The least exposed images will appear nearly black, but they should contain some detail. The lightest patch in the most exposed image should be saturated (R, G, and B = 255 in 24-bit color images or 65515 in 48-bit color images. Be sure the light is glare-free. The Imatest Test Lab page has a great many valuable recommendations.
- To determine a camera's ultimate potential, store the image files in RAW format for later conversion. You may also with to capture and store JPEG files for comparison— to see how much dynamic range is lost with in-camera JPEG conversion.
![]() +1 f-stop exposure (first patch saturated) |
![]() -2 f-stop exposure |
![]() -5 f-stop exposure (some detail is present, but barely visible) |
Images of Stepchart and GretagMacbeth Colorchecker at +1, -2, and -5 f-stop exposure. (Images were taken at 1 f-stop increments from +1 to -6.) |
||
- If RAW images are to be analyzed, convert the to 16-bit TIFF format for best results. You may use any RAW converter. Be sure to record the settings, which affect the tonal response curve. Noise reduction (one of the functions of RAW converters) also has an effect on the measured dynamic range.
- Analyze the images with Stepchart. Be sure to save the CSV output files.
- Open Dynamic Range by clicking on the button on the left of the Imatest main window. The following welcome screen appears. It may contain instructions that are more up-to-date than the image below. Previously-entered CSV files are read and stored.

Dynamic Range opening screen
- Read the CSV results files generated by Stepchart into windows A, B, C, and/or D. (One or two of the windows can be empty. None can be entered if needs be.) The files should be for exposures separated by 2-4 f-stops (EV), with 3 about optimum. The number of detected patches is shown to the right of the window ( N 20 20 17 10 ).
- If results have not already appeared, click on .
Results
Several displays and display options are available. They are selected in the lower-right region of the Dynamic Range window.
| Display |
| Pixel levels vs. exposure, where exposure = -log10(patch density). |
| Log Pixel levels vs. exposure, where Log denotes log10. |
| Local gamma: d(Log pixel level) / d(Log exposure), i.e., the slope of the Log pixel level plot. Gamma is contrast. |
| f-stop noise: Noise referenced to the image. |
| S/N (1/f-stop noise) |
| SNR (1/f-stop noise) dB = 20 log10(1/f-stop noise). |
| Pixel S/N (Pixel level/noise). Displayed optionally by Stepchart. Referenced to the file. |
| Pixel SNR dB = 20 log10(Pixel level/noise) |
| Exif data |
| Channel |
| (Imatest Master only) Selects color channel: Y (luminance), R, G, or B. |
| X-axis scale |
| f-stops (EV). The most popular units for expressing dyamic range. |
| Density units: Based on a log10 scale. 1 density unit = 3.32 f-stops (EV). |
| X-axis alignment |
| Unshifted |
| Shifted (aligned) Of greatest interest: shows total exposure range |
The image below shows log pixel level vs. (log) exposure (in f-stops). The x-axis has been shifted (aligned). Unaligned log pixel levels are shown as faint lines on the right of the plot. The camera has a strong "shoulder," which reduces the likelihood of highlight burnout.
![]()
Log pixel level as a function of (log) exposure. Canon EOS-20D, ISO 100, Standard picture mode.
Dynamic range results are shown on the upper right. Dynamic range numbers based on f-stop noise are shown boldface. These are identical to the numbers in the Stepchart analysis. An alternative dynamic range measurement based on pixel SNR is shown in normal (not bold) typeface. Two additional plots are shown below. The number of detected patches for each file is shown to the right of the file name ( N 20 20 17 10 ).
f-stop noise, showing dynamic ranges
![]()
Pixel SNR in dB (20 log10(Pixel level/noise)), showing dynamic ranges
Dynamic range — background
Dynamic range (DR) is the range of tones over which a camera responds. It is usually measured in f-stops, or equivalently, zones or EV, all of which represent factors of two in exposure. (It can also be measured in density units, where one density unit = 3.322 f-stops.)
DR is typically specified as the range of tones over which the RMS noise, measured in f-stops (the inverse of the signal-to-noise ratio, SNR), remains under a specified maximum value. The lower the maximum noise (the higher the minimum SNR), the better the image quality, but the smaller the corresponding dynamic range. SNR tends to be worst in the darkest regions. Imatest calculates the dynamic range for several maximum RMS noise levels, from 0.1 f-stop (high image quality; SNR = 10) to 1 f-stop (low quality; SNR = 1).
The dynamic range corresponding SNR = 1 (1 f-stop of noise) corresponds to the intent of the definition of ISO Dynamic range in section 6.3 of the ISO noise measurement standard: ISO 15739: Photography — Electronic still-picture imaging — Noise measurements. The Imatest measurement differs in several details from ISO 15739; hence the results cannot be expected to be identical. Imatest produces more accurate results because it measures DR directly from a sequence of chart images, rather than extrapolating results from a single reflective chart image.
Expressing noise in relative luminance units, such as f-stops, corresponds more closely to the eye's response than standard pixel or voltage units. Noise in f-stops is obtained by dividing the noise in pixels by the number of pixels per f-stop. (I use "f-stop" rather than "zone" or "EV" out of habit; any of them are OK.)
The above-right image illustrates how the pixel spacing between f-stops (and hence d(pixel)/d(f-stop)) decreases with decreasing brightness. This causes f-stop noise to increase with decreasing brightness, visible in the figures above. Since
luminance noise (measured in f-stops) is referenced to relative scene luminance,
independently of electronic processing or pixel levels, it is a universal measurement
that can be used to compare digital sensor quality when sensor RAW data is unavailable. |




