Skip to content
← Back to blog

From Sensor to Prescription

· 13 min read ·
ssnmh3webodm
Penrose Field Notes · SSNM Series · Article II of III

Article I established the diagnostic framework: two drones flying the same field at the same moment, their spectral indices cross-examined to distinguish nitrogen deficiency from water or structural stress. That diagnosis is only as good as the data behind it. Now we earn the data — starting with the physics of what the M3M sensor captures at different altitudes, then building outward: hexagonal spatial indexing that turns flight coverage into a verifiable checklist, radiometric calibration (the process of converting raw pixel values into physically meaningful reflectance so that flights on different days can be compared), and the self-hosted cloud pipeline that carries the whole dataset from raw imagery to a prescription file on a John Deere terminal.

The pipeline is intentionally open and self-managed. There are no per-seat licenses, no black-box processing subscriptions, no vendor lock-in between your imagery and your agronomist’s sign-off. The tradeoff is that you own the engineering — and the decisions.

The Sensor Array, Altitude, and Why 400 Feet Is the Ceiling

The M3M carries four discrete 5-megapixel multispectral cameras — Green (560 nm), Red (650 nm), Red Edge (730 nm), NIR (860 nm) — each on a 1/2.8” CMOS behind a 4.34 mm fixed lens at f/2.0. There is no dedicated Blue band. Ground sample distance follows directly from physics:

GSD (cm/px) = Flight altitude (m) ÷ 21.7 for multispectral GSD (cm/px) = Flight altitude (m) ÷ 37.2 for the onboard RGB

At 100 m AGL — the standard agricultural survey altitude — the M3M delivers a 4.6 cm multispectral GSD and a 2.7 cm RGB GSD across a footprint of roughly 120 × 90 meters per frame. The Cine flying in parallel produces a 2.7 cm RGB footprint at the same altitude, its Hasselblad 4/3” sensor resolving the same ground area at nearly twice the spatial detail — which is precisely what makes it useful for confirming whether an NDRE anomaly corresponds to a visible canopy difference or is a stitching artifact.

The 400-foot (122 m) AGL ceiling imposed by FAA Part 107 is not just a regulatory constraint — it is the practical upper bound of useful multispectral GSD for variable-rate prescription work. Above 122 m, the M3M’s multispectral GSD exceeds 5.6 cm/px. For nitrogen prescription at the management zone level that is still workable, but spatial resolution begins to blur across soil boundary edges that may be only a few meters wide. At 100 m, you are operating comfortably within both the regulatory envelope and the resolution requirement.

The consequence for H3 cell sizing is direct and worth making explicit. An H3 cell at Resolution 12 has an average edge length of 10.8 m and an area of roughly 307 m² — approximately 145,000 multispectral pixels at 100 m AGL (307 m² ÷ 0.046² m²/px). That is an exceptionally robust sample: far more than sufficient to compute a reliable per-cell mean NDRE, detect radiometric anomalies at stitching seams, and flag motion blur through elevated local variance. Drop to Resolution 13 (~44 m², ~4.1 m edge) and each cell holds around 20,800 pixels — statistically deep, but individual cell processing becomes more sensitive to single-frame artifacts at the sub-zone boundary. Resolution 12 is the operative standard for this pipeline. It is fine enough to resolve management zones with agronomic significance, coarse enough to maintain statistical robustness at standard survey altitude, and stable enough to serve as a repeatable spatial reference across every flight over the same field — season after season.

H3 Hexagonal Indexing: Coverage as a Spatial Checklist

A square grid is intuitive but geometrically biased. All four edge-neighbors of a square cell are equidistant, but the four corner-neighbors sit at 1.41× that distance — which means any analysis that aggregates “neighboring cells” systematically under-weights diagonal information. Hexagons address this: all six neighbors of an H3 cell are approximately equidistant from its center, which is why hexagonal tiling is the natural geometry for coverage problems. In practice, H3 cells are topological hexagons projected from an icosahedron, so neighbor distances vary slightly — but the directional bias present in square grids is effectively eliminated.

The H3 system encodes every hexagon on Earth as a 64-bit integer at 16 resolution levels (0–15). The levels relevant to field-scale drone operations:

H3 ResolutionAvg. Edge LengthAvg. Cell AreaRole in this pipeline
1075.9 m~1.5 haFarm-level field index
1128.7 m~2,150 m²Management zone delineation
1210.8 m~307 m²Primary capture & QA resolution
134.1 m~44 m²Sub-zone pixel validation
141.5 m~6 m²Stitching artifact detection

The table above defines what each resolution is — but the operational question is how many images need to land on each cell for reliable reconstruction. A Res-12 cell is roughly 307 m²: small enough that a single M3M frame at 100 m AGL covers 35–40 of them, yet large enough to require multiple overlapping frames before photogrammetric software can stitch a gap-free orthomosaic. The answer depends on three flight parameters — altitude, ground speed, and capture interval — which together determine the footprint size, the distance the drone advances between shots, and therefore the number of frames that stack over any given cell.

Sample Flight Line — West to East One pass across the ~130 ac pivot · Res 12 — Primary QA
40 m 100 m (328 ft) 122 m
3 m/s 8 m/s (17.9 mph) 15 m/s
Footprint 120 × 90 m
Frame advance 16 m
Frontal overlap 82.2%
Side overlap 75% (30 m spacing)
MS GSD 4.6 cm/px
RGB GSD 2.7 cm/px
H3 cells / frame 0
Pixels / cell ~145,085
This flight line 0 images
Est. full pivot (~130 ac) ~1,105 images
at 75% side overlap · 27 parallel lines
Excellent. At 8 m/s with 2s interval, the drone advances 16 m between frames — 82.2% overlap for photogrammetric reconstruction.

This is the direct link between flight altitude and H3 resolution. At 100 m AGL, the M3M’s 120 × 90 m multispectral footprint covers approximately 35–40 Res-12 cells per frame at 80% frontal / 75% side overlap. With 80% frontal overlap, the along-track advance between frames is roughly 18 m (90 m × 0.20) — meaning each point on the ground appears in approximately 20 overlapping images. That redundancy is what makes photogrammetric reconstruction reliable. Drop to 60 m AGL and the footprint shrinks to ~72 × 55 m: fewer cells per frame, more frames required, more battery cycles per field. At 120 m AGL (the Part 107 ceiling), the footprint expands to 144 × 110 m — faster coverage, coarser GSD, and cells that are now larger than the edge length of a standard management zone boundary.

The key constraint: any altitude above 400 ft AGL (122 m) is out of regulatory scope and therefore not applicable. Within the legal envelope, 100 m is the recommended standard. 60–80 m is reserved for high-resolution passes over anomalous zones identified in a prior survey flight.

The H3 grid also provides the spatial key for selective processing. Because each Res-12 cell is globally unique and addressable, a client who wants to investigate a specific zone of their field — say, the persistent low-NDRE arc in the northwest quadrant — can request processing of only the cells covering that zone rather than reprocessing the entire dataset. Images are ingested to GCP storage indexed by their H3 cell coverage. The processing job is defined by a cell list, not a bounding box. This maps cleanly to variable billing: compute cost scales with the number of cells selected, not the total field area.

The Dual-Drone Collection Protocol

Both drones launch from the same ground position within the same weather window. The M3M flies first at 100 m AGL on an automated grid mission — 80% frontal, 75% side overlap, 7–8 m/s ground speed — while the Cine launches immediately behind it at the same altitude on an identical flight path. The time offset between the two platforms at any given ground point is typically under four minutes, which is short enough that sun angle, cloud shadow, and crop movement are negligible.

Dual-Drone Collection Protocol M3M + Cine · 130 ac pivot · 100 m AGL
DJI Mavic 3M Multispectral — Prescription data
4 spectral bands
4.6 cm/px GSD · 120 × 90 m footprint · ~90–100 ac/battery
Generates NDVI, NDRE, CCC indices. Requires radiometric calibration panel pre- and post-flight.
DJI Mavic 3 Cine Hasselblad RGB — Visual validation
RGB natural color
2.7 cm/px GSD · 120 × 90 m footprint · ~100–110 ac/battery
Confirms whether spectral anomalies correspond to visible canopy differences. No calibration panel required.
Shared flight parameters
Altitude 100 m AGL
Ground speed 7–8 m/s
Frontal overlap 80%
Side overlap 75%
Frame advance 18 m
Line spacing 30 m
Images / point ~20
Mission time ~90–110 min
TOP-DOWN FLIGHT PATTERNNWEM3M(leads)Cine(follows)~4 min offset30 mSAME GROUND · DIFFERENT DATAM3MGRRENIRNDVI, NDRE, CCCCineRGBVisual ground truthBoth indexed to H3 Res-12 cells for coverage verification

Before the M3M lifts off, the radiometric calibration panel is placed flat on open ground — no shadows — and the M3M captures a nadir panel image sequence with the gimbal locked at -90°. The same sequence is repeated immediately after landing. These pre- and post-flight panel captures bracket the mission.

The Cine does not require a calibration panel. Its role in the diagnostic framework is visual confirmation, not absolute reflectance — it is the ground-truth layer that tells you whether a spectral anomaly in the M3M data corresponds to something you can actually see in natural color. That distinction is the whole argument for flying both: the M3M produces the prescription numbers, the Cine validates the spatial pattern that the numbers describe.

Battery logistics at 100 m AGL and 80/75 overlap: the M3M covers approximately 90–100 acres per battery. The Cine covers 100–110 acres per battery on the same mission profile. A 130-acre center-pivot circle — the synthetic field used throughout this series — requires two batteries per platform, with a five-minute swap and re-launch window between them. The total wheels-up to wheels-down time for a dual-platform mission over 130 acres is approximately 90–110 minutes.

Radiometric Calibration: What Gets Corrected, and What Doesn’t

The M3M’s four multispectral cameras are factory-calibrated relative to one another, but that relative calibration does not account for ambient light conditions on the day of the flight. Two flights over the same field on different days — or even different times of the same day — will produce different raw digital number (DN) values for identical canopy reflectance, because incident irradiance changes. The radiometric calibration panel corrects this.

The panel is a flat tile with certified, lab-measured per-band reflectance values — typically around 50% reflectance across all four M3M bands. When the drone captures the panel at nadir under the same light conditions as the mission, the ratio of known reflectance to measured DN produces a per-band gain coefficient. That gain, applied uniformly to every image in the dataset, converts raw DNs into calibrated pseudo-reflectance values that are comparable across flights and dates.

WebODM’s --radiometric-calibration camera mode applies the per-image corrections embedded in DJI’s EXIF metadata: black level subtraction (read dynamically from each image’s XMP metadata), vignetting correction from DJI’s per-camera polynomial, and gain/exposure normalization. This produces a consistent internal calibration across all images in the orthomosaic. What it does not do is apply the absolute panel correction — the panel images are ingested into the photogrammetric reconstruction rather than used as a calibration target. The result is calibrated relative reflectance, not absolute reflectance. For the SSNM workflow — which is built on relative comparisons between the field and the N-rich reference strip within the same flight — this is sufficient. For cross-date comparisons, the panel-based empirical line correction must be applied in post-processing before indices are computed.

The practical consequence: any flight with a compromised panel capture (panel in shadow, panel captured at oblique angle, panel not imaged post-flight after cloud conditions changed) produces an index dataset that cannot be reliably compared to other dates. Panel discipline is not optional. It is the metadata that makes time-series analysis possible.

WebODM’s camera+sun mode — which additionally divides by the onboard sunlight sensor irradiance — is labeled experimental and consistently produces unreliable results for the M3M. Community testing shows grassland NIR reflectance values of 1–3% where 15–40% is physically expected; frame-to-frame irradiance jumps under intermittent cloud cover produce visible striping artifacts in the orthomosaic. Do not use camera+sun for M3M data. Use camera mode. The sunlight sensor metadata is preserved and available for post-hoc empirical line correction, which is where it belongs.

The GCP Processing Architecture

All imagery is staged in a Google Cloud Storage bucket immediately after field data transfer. The GCP VM running WebODM is provisioned on demand and shut down automatically on task completion — no idle compute charges between missions.

GCP Processing Cost Estimator WebODM on Google Cloud · Spot instance pricing · us-central1
20 ac 1,200 ac
200 ~30 imgs/ac at 100 m AGL · see flight calculator above 15,000
M3M Multispectral --fast-orthophoto --skip-3dmodel
VM n2-standard-32
RAM 128 GB
Spot rate ~$0.48/hr
Time 1.5–4 hrs
Cost $0.72 – $1.92
Cine RGB Full SfM reconstruction
VM n2-standard-32
RAM 128 GB
Spot rate ~$0.48/hr
Time 6–14 hrs
Cost $2.88 – $6.72
Total estimated compute (both platforms) $3.60 – $8.64
3,900 images × 2 platforms · processed sequentially on same VM or in parallel via ClusterODM
VM sizing reference by image count
ImagesVM TypeRAMSpot RateM3M TimeCine Time
≤ 2,500n2-standard-1664 GB~$0.24/hr30–90 min2–6 hrs
2,501–6,000n2-standard-32128 GB~$0.48/hr1.5–4 hrs6–14 hrs
6,001–12,000n2-standard-64256 GB~$1.02/hr4–10 hrs14–36 hrs
12,000+ClusterODM (3×)Dist.~$0.35/hr2–6 hrs6–12 hrs
M3M datasets use --fast-orthophoto and --skip-3dmodel, skipping dense reconstruction — less RAM, 3–5× faster than full SfM. Cine datasets require full reconstruction for high-resolution RGB orthomosaics. RAM is the binding constraint; insufficient RAM forces disk swap (5–10× slower). Adding an NVIDIA T4 GPU accelerates feature extraction and densification by 14–52%. Storage and egress costs not included.

RAM, not CPU, is the binding constraint. WebODM’s Structure-from-Motion reconstruction holds the full feature point cloud in memory during bundle adjustment. Insufficient RAM forces disk swap, which is 5–10× slower than memory access and produces unreliable results. An n2-standard-16 (64 GB) handles 100-acre dual-platform datasets comfortably. Beyond 300 acres, the n2-standard-32 (128 GB) is the minimum viable configuration.

Adding an NVIDIA T4 GPU accelerates the two most expensive pipeline stages — feature extraction and point cloud densification — producing a 14–52% total processing time reduction depending on dataset size. For multispectral-only missions with --fast-orthophoto and --skip-3dmodel, the GPU benefit is smaller because dense reconstruction is skipped; for full dual-platform RGB+MS datasets where the Cine imagery is also reconstructed, GPU acceleration is worth the marginal cost.

All image data is copied from GCS to local NVMe SSD on the VM before processing begins. Processing directly from a GCS FUSE mount adds per-access network latency that dramatically slows ODM’s heavy random I/O — always transfer first. At the end of a successful task, outputs (odm_orthophoto.tif, DSM, DTM) are automatically uploaded back to GCS and the VM shuts down.

Processing at the H3 cell level vs. the full field. WebODM processes datasets, not individual cells — but the dataset submitted can be defined by a cell selection. Images are indexed by their H3 Res-12 coverage on ingest. A client requesting analysis of a specific management zone submits a cell list; the pipeline retrieves only the images covering those cells plus a configurable buffer of overlap images around the boundary. This subset is processed as an independent WebODM task. The result is a cropped orthomosaic precisely aligned to the requested H3 cell boundary — billable by compute time for the cells selected. A typical 20-cell zone covering ~6,000 m² processes in under 30 minutes on a smaller VM.

WebODM queues tasks via NodeODM. A single node processes one task at a time; ClusterODM distributes across multiple NodeODM workers, enabling parallel processing of multiple field zones or multiple client jobs simultaneously. For a service operating across several Magic Valley farms on the same flight day, ClusterODM with three spot-VM workers processes concurrent jobs without serialization — the full-season fleet cadence becomes a throughput engineering problem rather than a sequential bottleneck.

The N-Rich Strip: Calibrating the Sensor Against the Soil

Spectral indices measure what the canopy reflects. What they cannot do on their own is tell you what nitrogen rate is appropriate for that field, on that date, with that soil’s organic matter, mineralisation, and residual from prior seasons. Two fields with identical NDRE values may require substantially different nitrogen rates depending on whether the deficiency is acute or chronic, whether it is responding to a recent stress event or reflecting a structural limitation.

The N-rich strip resolves this by placing a physical reference inside the field. Applied at planting at 40–50 lbs N/acre above the farmer’s standard practice, the strip guarantees that a defined corridor of crop is never nitrogen-limited for the season. When the M3M flies at mid-season, the strip appears as the brightest zone in the NDRE mosaic — the ceiling against which everything else is measured.

Strip placement guidelines for reliable calibration:

  • Minimum 10 feet wide (one applicator pass), ideally matching the variable-rate applicator’s boom width for clean boundary delineation in the orthomosaic
  • Minimum 300 feet long, extending fully across the field perpendicular to the dominant management zone gradient
  • Positioned in a representative productivity zone — not in a known high-yielding corner, not on a field edge, not across a drainage feature
  • One strip per major management zone in fields with strong spatial heterogeneity; a single strip is inadequate when soil series change substantially across the field
  • Documented with a GPS waypoint at planting so the strip polygon is available for index extraction without relying on visual identification in the NDRE mosaic

The strip anchors the Nitrogen Sufficiency Index: NSI = NDRE_field / NDRE_strip. When NSI approaches 1.0, the field matches the non-limited reference — no additional nitrogen is warranted. Below 0.95, deficiency is indicated, though optimal thresholds range from 0.89 to 0.99 depending on crop and growth stage. The strip’s NDRE value is the denominator that makes the sufficiency calculation field-specific and date-specific — correcting for ambient conditions, growth stage, and soil background in a single operation. What you are measuring is not absolute reflectance. You are measuring the gap between what your crop is doing and what it does when nitrogen is not the constraint.

This is also the link between the two-drone framework and the prescription output. The NSI is computed from the M3M’s NDRE mosaic. But before applying it, the dual-platform stress classification from Article I is applied zone by zone: cells classified as water-stressed (NDVI low, NDRE stable) are excluded from the nitrogen prescription pass entirely, regardless of their NSI. Nitrogen applied to a water-limited zone does not become yield — it becomes runoff and leachate. The Cine’s RGB mosaic, overlaid on the M3M’s stress classification, is the quality gate that prevents that error.

Processing the Orthomosaic to an Index Map

Once the WebODM task completes, the primary output is a multi-band GeoTIFF — typically five bands for M3M data: Green (Band 1), Red (Band 2), Red Edge (Band 3), NIR (Band 4), Alpha mask (Band 5). Band order varies between WebODM versions; always verify with gdalinfo odm_orthophoto.tif before computing any index. A mislabeled band swap between Red and Red Edge inverts the NDRE calculation entirely and produces plausible-looking but agronomically inverted output — a failure mode that is not always obvious without ground truth.

The empirical line correction is applied at this stage using the pre- and post-flight panel images: mean DN values are sampled from the panel footprint in the orthomosaic, divided into the certified panel reflectance values, and the resulting per-band gain is applied across the full mosaic. The output is a calibrated reflectance GeoTIFF with float32 values clipped to [0, 1].

Index computation then follows from the calibrated bands. For mid-to-late season nitrogen diagnosis — the primary use case for this pipeline — NDRE is the workhorse index and CIre provides a linear cross-check. NDRE detects nitrogen stress through chlorophyll loss before canopy architecture change becomes visible in NDVI; CIre’s ratio formulation maintains a more linear relationship with chlorophyll content, which is useful for scaling NSI across zone boundaries. Both are computed per-pixel; per-cell means at Res-12 are then extracted using the H3 cell polygon set.

Zone Delineation and the Prescription Map

The H3 Res-12 cell grid is the natural unit for zone delineation. Each cell carries a per-band reflectance mean, an NDRE value, a CIre value, a stress classification (from the dual-platform composite logic), and an NSI value relative to the N-rich strip. Cells classified as nitrogen-responsive are grouped into rate zones using one of two methods:

K-means (3–4 zones) — appropriate when the NDRE distribution is approximately unimodal. Zones are labeled by relative NDRE rank and assigned N rates from a lookup table calibrated against the strip NSI.

Jenks natural breaks (3–5 zones) — preferred when the distribution is multimodal, which is common in Magic Valley fields where shallow basalt shelves and deep silt loam zones create genuinely discrete productivity classes. Jenks finds the classification that minimizes within-class variance, producing zones that reflect actual soil-canopy transitions rather than statistical artifacts.

A minimum application zone area of 2 acres is enforced before the prescription is finalized. Variable-rate controllers cannot execute rate changes smaller than approximately 2 acres at standard field speed — smaller polygons create application noise rather than precision. Individual Res-12 cells (~0.075 acres) are therefore always aggregated into multi-cell application zones before export; the cell-level data informs the zone boundary, but the controller never sees sub-zone geometry.

Fig. 1 — NSI-Gated Stress Classification · Center-Pivot Field · Burley, ID Synthetic · H3 res 12 (~10.8 m avg edge, 307 m² avg area) · ~130 ac · Dual-platform composite

Delivering the Prescription

The final output is a set of zone polygons with rate attributes, projected in UTM Zone 11N (EPSG:32611), exported in the format the client’s terminal requires.

Prescription Export Formats Terminal-specific delivery paths · UTM Zone 11N (EPSG:32611)
FormatTerminal / BrandUSB PathDeliveryNotes
Shapefile ESRI .shp/.dbf/.shxJohn Deere GreenStar Gen 4 (4240, 4600, 4640)Rx/FAT32 USB · OTA DataSyncField names ≤ 10 chars (dBASE .dbf constraint). Display prompts for rate column selection.
Trimble CFX-750AgGPS/Prescriptions/FAT32 USB
Trimble TMX-2050Agdata/prescriptions/FAT32 USBMay support legacy AgGPS/ path — verify display firmware version before delivery.
ISOXML ISO 11783-10CLAAS · CNH (Case IH / New Holland) · AGCO · Amazone · HARDI · KubotaTASKDATA/USBISOBUS-compliant default. TaskData.xml + binary grid files. Controller-agnostic.
Both formats carry the same underlying dataset: zone polygons, N rate attributes in lb/acre (or kg/ha for metric terminals), field boundary metadata, and the application product identifier. The dual-platform stress classification is preserved as a secondary attribute column — the client and their agronomist can see, for every zone, whether the assigned rate was driven by NSI or excluded from nitrogen prescription due to water stress classification.

The prescription is not the end of the workflow. It is the beginning of the next one: application records from the terminal, post-application imagery at the next flight window, and comparison of treated-zone response against the N-rich strip to validate the prescription model. That feedback loop — strip calibration, index diagnosis, spatially variable application, agronomic validation — is what converts a single flight into a multi-season learning asset for the field.


Next: Article III — Timing, Crop-Specific Thresholds, and the Full-Season Flight Calendar for Magic Valley Row Crops.


References:

  1. OpenDroneMap Documentation (2024). Multispectral and Thermal. docs.opendronemap.org/multispectral/
  2. DJI (2023). Mavic 3M Image Processing Guide. dl.djicdn.com
  3. H3 Geo (2024). Tables of Cell Statistics Across Resolutions. h3geo.org/docs/core-library/restable/
  4. Oklahoma State University Extension (2018). Applying Nitrogen-Rich Strips. CR-2277.
  5. Raun, W.R. et al. (2005). Optical sensor-based algorithm for crop nitrogen fertilization. Communications in Soil Science and Plant Analysis, 36(19–20), 2759–2781.