Calibration method
Documentation · how DEDAL turns DJI Mavic 3M multispectral images into reflectance, and the evidence behind it.
In short
Each image is corrected for the camera's dark level, vignetting, exposure and gain, and divided by the drone's own sunlight-sensor reading. A photo of a reflectance panel taken on the day then sets the absolute scale, once per band and flight. The same open code runs in DEDAL (WebODM) and on the JIC cluster, and every flight gets a record of what was done and whether it passed the quality checks.
Validation status: 8 October 2026. Method version: dedal-calibration 0.1.0 (doi:10.5281/zenodo.23286715).
Method
1. Correct each image
The Mavic 3M writes everything needed into each image's metadata: the sensor's dark level B, the vignetting polynomial (k0…k5) and its centre, the gain g, the exposure time t, and the sunlight sensor's reading E for that band. For each pixel at distance r from the optical centre:
V(r) = 1 + k₀r + k₁r² + k₂r³ + k₃r⁴ + k₄r⁵ + k₅r⁶ vignetting I = max(0, (DN − B) · V(r)) dark level and vignetting p = I / (g · t) exposure and gain
p is proportional to the light reaching the sensor, whatever exposure and gain the camera chose. After correction, brightness is flat within ±5 % from the centre of the image to its corners.
2. Convert to reflectance
ρ = K_b · p / E
Dividing by the image's own sunlight reading E removes changes in the light during the flight, such as passing clouds. Kb is one factor per band and flight, measured on the reflectance panel (below).
3. Write the result
- Reflectance is stored as
round(ρ × 32 768)in a byte-for-byte copy of the original file: every EXIF, GPS and XMP tag stays as recorded. (32 768 is the MicaSense convention and keeps values in the range the photogrammetry needs to match images.) - Only images taken straight down are calibrated: captures more than 10° from vertical (an oblique pass) are left out, because they reflect differently and disturb the reconstruction.
- The mosaic is then built with OpenDroneMap without any further radiometric calibration and without seam levelling, so the calibrated values are kept: on the first flight evaluated, the mosaic matched the single calibrated images to within 0.3 %. The lens is fixed at DJI's factory calibration of the NIR band.
The panel
For each band, every image of the panel gives a factor from the panel's certified reflectance ρpanel, the sunlight reading at that moment and the corrected signal on the panel:
K = ρ_panel · E_panel / p_panel
- Finding the panel needs no QR code or template: in each band, the panel is the uniform, square region of plausible size with a darker surround (its case). Its eroded interior is measured with the median.
- Bad readings are rejected: no panel found, saturated pixels, or a non-uniform reading (spread above 0.15). Factors more than 10 % from the band's median are dropped as outliers; Kb is the median of the rest.
- The panel shot is found automatically: the panel photos of the same day, nearest in time to the flight first (or the flight's first and last images, if the panel was photographed at take-off or landing).
- A band the panel could not give (for example saturated on bright ground) is derived from the measured bands through DJI's factory band calibration, adding about 3 % uncertainty, and the result is flagged.
- No usable panel at all: the flight is not calibrated and is left out of analyses, unless the user chose to calibrate such flights with the camera's typical factors (about 5–6 % less accurate, always flagged).
The default panel is the JIC's MicaSense RP04 (serial 1913009-SC). Users can calibrate with their own panel by entering its certified reflectance (see the guide); the panel used is recorded with every calibration.
Quality checks: accepted, flagged, not calibrated
Every calibration is checked and given one of three outcomes, with the reasons written to its record.
| Factory check | The panel factors' balance between bands, against DJI's factory calibration. Flagged if a band is more than 8 % off (typical values 0.97–1.05). |
|---|---|
| Typical-factor check | The overall level, against this camera model's factors from panel shots on 33–38 days. Flagged beyond 15 % (about three times the day-to-day spread). Catches errors common to all bands, such as a panel photographed in low sun. |
| Sun elevation | Computed for mid-flight. Flagged below 25°, where panel factors fall 5–12 %. |
| Panel-shot timing | Flagged if the panel was photographed more than 60 min from the flight; not used beyond 180 min. |
| Derived bands, typical factors | Always flagged, with the extra uncertainty stated. |
| Custom settings | A run with non-default thresholds or panel-detection settings is flagged, because it is not directly comparable with default calibrations. |
Across the 283 runs of the validation study: 121 accepted, 79 flagged, 80 not calibrated (mostly 2023–24 flights without a panel shot).
Validation
Accuracy within a day
On days with two or more panel shots, one shot calibrates and the other is predicted: the error is KA/KB − 1. Over 1,241 pairs on 89 days the median error is 3.3–4.2 % depending on the band. Without the sunlight sensor it is about ten times larger, and it grows with the time between panel shot and flight:
| Time between shots | With sunlight sensor (median / 90th percentile) — without |
|---|---|
| < 15 min | 2.3 % / 6.1 % — 10.6 % / 57.9 % |
| 15–60 min | 2.8 % / 8.6 % — 24.8 % / 69.3 % |
| > 1 h | 3.6 % / 12.8 % — 39.5 % / 101 % |
Practical rule: photograph the panel just before or after the flight, and keep the sunlight sensor clean and unshaded.
Stability through a season
A canopy changes gradually, so a calibration that drifts shows as field reflectance jumping away from neighbouring dates. On a field flown on 43 dates from October to July, that jump (RMS, relative to the level) was 12–14 % in DEDAL against 25–28 % in Pix4D, in every band: absolute reflectance is about twice as steady.
Against Pix4D
- Plot NDVI correlates with Pix4D's at r = 0.91 (median over 193 flights), and up to r = 0.96–0.99 on fields with a closed canopy.
- The mosaics line up to within 1.2 cm (median), so products can be compared plot by plot.
- Pix4D's NDVI runs about +0.095 higher, and its red edge falls below the physically plausible range; DEDAL's closed-canopy reflectance lies inside the range a radiative-transfer model (PROSAIL) predicts.
Assumptions and limits
- Linear sensor. Signal above dark level is proportional to light × gain × exposure; saturated pixels are recorded per image.
- The panel must be flat, fully lit, unshaded and clean, with the reflectance of its certificate. A tilted or shaded panel gives a wrong factor; the checks and the panel images are there to catch it.
- Low sun (below about 25°): the panel on the ground and the sensor on the drone respond differently to the sun's angle, so such flights are less accurate and are flagged.
- One reference point. The panel calibrates gain, not offset: an additive error such as stray light would show on dark targets.
- Camera. The method is specific to the DJI Mavic 3M. Other cameras are processed by WebODM as usual, without this calibration.
Using it in a publication
Suggested methods text (adapt the details to your flight):
Multispectral images (DJI Mavic 3M; green, red, red edge, NIR) were calibrated to reflectance with dedal-calibration (v0.1.0; Gonzalez Sanchez et al., 2026; doi:10.5281/zenodo.23286715). Each image was corrected for dark level, vignetting, exposure time and gain using the camera's metadata, and normalised by the onboard sunlight sensor's irradiance reading. Absolute reflectance was set per band from images of a reflectance panel (MicaSense RP04, serial 1913009-SC) taken on the day of the flight. Orthomosaics were produced with OpenDroneMap without further radiometric correction or seam levelling, with the lens fixed at the manufacturer's calibration. The calibration predicts an independent panel shot of the same day with a median error of 3.3–4.2 % (1,241 pairs, 89 days).
- Report the panel (model and serial) and each flight's quality outcome (accepted or flagged, with the reason). Flagged flights can be kept, but say why they were flagged; flights not calibrated should be left out of reflectance analyses.
- Cite the calibration: Gonzalez Sanchez M., Vickers M., Steuernagel B. (2026). dedal-calibration: reflectance calibration of DJI Mavic 3M multispectral images (v0.1.0). John Innes Centre. Zenodo. doi:10.5281/zenodo.23286715; OpenDroneMap for the photogrammetry; and DEDAL (doi:10.5281/zenodo.15846333).
- Questions about the method, or the full validation report: dedal@jic.ac.uk.