
This research data archive accompanies the paper:
Maize Stand Counting (MaSC): Automated and Accurate Maize Stand Counting from UAV Imagery Using Image Processing and Deep Learning
The archive provides the imagery, intermediate spatial transformations, object-detection outputs, row/range assignments, stand counts, and visualizations used to evaluate the MaSC workflow. MaSC detects individual maize plants in unmanned aerial vehicle (UAV) imagery and converts the detections into stand counts organized by field row and range.
The archive's primary research content is organized into three top-level directories:
data/ contains the input UAV raw frames and mosaics, including the pairwise homography matrices needed by the raw-frame workflow.models/ contains the official YOLOv9 checkpoint used by MaSC and the YOLO11 and YOLOv12 checkpoints retained from the detector ablation study.results/ contains the detection, spatial aggregation, counting, and visualization outputs for the processing modes reported in the paper.This README describes release contents as deposited. It is intended to help readers inspect the published results, reuse the machine-readable outputs, and connect each artifact to the corresponding processing stage.
When using this archive, cite both the dataset and the associated paper.
Dewi Endah Kharismawati & Toni Kazic. (2026). Data and results for “Maize Stand Counting (MaSC):
Automated and Accurate Maize Stand Counting from UAV Imagery Using Image
Processing and Deep Learning” (Version 1.0) [Data set]. Zenodo.
doi.org
Dewi Endah Kharismawati & Toni Kazic. (2025). Maize Stand Counting (MaSC): Automated and Accurate
Maize Stand Counting from UAV Imagery Using Image Processing and Deep
Learning. arXiv preprint arXiv:2510.07580; manuscript submitted to *IEEE Journal of Selected Topics in Signal Processing*. doi.org
The pairwise homography matrices in data/raw_mode/H_asift_group_002.csv were computed with the previously developed DroneZaic algorithm. Users of these transformations should also cite:
DroneZaic: A robust end-to-end pipeline for mosaicking freely flown aerial video of agricultural fields. DOI: 10.1002/ppj2.70033
The MaSC implementation, validation utilities, and future code updates are maintained in the MaizeStandCounting_MaSC Git…. To clone the repository, use git clone github.com. Cite the Zenodo dataset for the deposited data and results; follow the citation instructions in the code repository when reusing the software.
MaSC is an end-to-end system for converting low-altitude RGB UAV imagery into a stand count for each maize row. It was designed for inexpensive UAVs and affordable computing hardware, without requiring geographic coordinates for every image. The 2024 evaluation imagery was collected on June 12 at approximately 10 m above ground level. The broader image collection described in the paper used manually flown DJI Phantom 4 Pro and DJI Mavic 2 Pro UAVs at approximately 5–30 m above ground level, below 3.2 km/h, with nadir and oblique video recorded at 24 or 30 frames per second.
The two MaSC modes differ in how they place detections into a common coordinate system. After that step, they share the same orientation correction, range detection, row detection, and weighted stand-counting procedure.
Both modes use the YOLOv9 maize-seedling detector trained and benchmarked separately on the Maize Seedling Detection Dataset (MSDD). The detector operates on 640 × 640 pixel inputs with a confidence threshold of 0.30. YOLOv9 was selected because it achieved the strongest single-plant detection performance among the models evaluated in the associated MSDD study (reported mAP@0.5 of 0.916), while remaining fast enough for practical use.
YOLOv9 is the official and only detector used to produce the MaSC mosaic-mode and raw-frame results reported in the manuscript. The included YOLO11 and YOLOv12 weights are retained as ablation/benchmark artifacts from the comparative detector study. They allow researchers to inspect or repeat the model comparison, but they are not interchangeable with YOLOv9 when reproducing the reported MaSC stand counts.
The detector has three classes:
| Class ID | Meaning | Contribution to stand count |
|---|---|---|
| 0 | Single maize plant | 1 |
| 1 | Two touching/grouped maize plants | 2 |
| 2 | Three touching/grouped maize plants | 3 |
This weighted interpretation is essential: the number of detection boxes is not necessarily the final number of maize plants. A double-class box adds two stands and a triple-class box adds three. The multi-plant classes address seedlings whose leaves overlap or whose plants appear as a tight group.
| Path | Role in this release |
|---|---|
models/yolov9_models/best.pt | Official YOLOv9 checkpoint used by the MaSC pipeline and required to reproduce the reported MaSC detections and stand counts. |
models/yolo11_models/best.pt | Best YOLO11 validation checkpoint from the detector ablation/benchmark study; not used for the official MaSC results. |
models/yolo11_models/last.pt | Final YOLO11 training checkpoint from the ablation/benchmark study; not used for the official MaSC results. |
models/yolov12_models/best.pt | Best YOLOv12 validation checkpoint from the detector ablation/benchmark study; not used for the official MaSC results. |
models/yolov12_models/last.pt | Final YOLOv12 training checkpoint from the ablation/benchmark study; not used for the official MaSC results. |
Use models/yolov9_models/best.pt for MaSC replication. The best.pt and last.pt names identify the validation-selected and final-epoch checkpoints, respectively, within their model-specific training runs.
Mosaic mode accepts an RGB mosaic created by DroneZaic or another mosaicking system such as WebODM. Because a field-scale mosaic is too large for direct detector input, MaSC performs the following steps:
attributes_1280.npz.Mosaic mode is convenient when an orthomosaic or other premosaicked image already exists, but registration, interpolation, and blending can distort individual seedlings. The paper shows that WebODM mosaics may contain holes and misregistered or “melted” plants; MaSC nevertheless detected most seedlings in the evaluated WebODM example.
Raw mode performs detection before image blending and uses DroneZaic transformations to combine detections geometrically:
H(i→i+1) and composes the required transforms to obtain the mapping from frame Fi to reference frame F0.Raw mode preserves repeated observations of the same plant across overlapping frames. A plant missed in one image may be detected in a later image, after which NMS consolidates the aligned duplicates. This is the main reason raw mode can recover detections lost in a single view. Its accuracy depends on precise homographies: registration errors can prevent boxes from overlapping and therefore cause duplicated plants to survive NMS.
MaSC supports both continuous production fields and genetic nurseries. In a production field, an entire continuous row can be counted without subdivision. In a nursery, unplanted alleys divide rows into ranges, and row positions may change between ranges because of terrain, row curvature, planting-density variation, and mosaic distortion. Nursery analysis therefore detects ranges first and then detects rows independently inside every range:
prediction_on_each_row.csv and spatial row rectangles plus counts to rows_coordinate_and_count.mat.The two modes were compared with consensus manual counts collected June 18–19, 2024, six to seven days after the June 12 UAV flight. Three people counted each row independently and repeated disagreements until reaching consensus. This timing difference matters because additional emergence or mortality may have occurred between imaging and manual counting.
| Mode | R² | MAE (plants/row) | RMSE (plants/row) | Bias (plants/row) | Within ±2 | Within ±5 |
|---|---|---|---|---|---|---|
| Mosaic | 0.616 | 4.20 | 5.77 | −4.10 | 42.7% | 68.1% |
| Raw frames | 0.906 | 1.97 | 2.85 | −1.19 | 66.8% | 93.5% |
Both modes tended to undercount, as indicated by negative bias, but raw-frame processing agreed more closely with manual counts. The manuscript reports processing 83 full-resolution frames in 60.63 seconds, including 25.02 seconds for detection. The deposited data/raw_mode/raw/ directory contains the 77-frame segment described in this archive, so users should use the deposited file inventory—not the manuscript timing experiment—to determine the number of frames available here.
At the time this README was updated, the archive contained 473 files totaling approximately 1.98 GiB, including this README and LICENSE.txt.
| Content | Quantity | Format |
|---|---|---|
| Raw UAV frames | 77 | PNG |
| Pairwise raw-frame homographies | 76 matrices | CSV |
| Input mosaics | 2 | PNG |
| All image products | 310 PNG/JPG files | PNG, JPG |
| Text/CSV data products | 150 files | TXT, CSV |
| MATLAB data products | 4 | MAT |
| NumPy metadata products | 1 | NPZ |
| Trained model weights | 5 | PyTorch .pt |
| Associated manuscript | 1 |
The two input mosaics are alternative representations of the same general type of field imagery. data/mosaic/global_mosaic_7.png is the DroneZaic/DMC mosaic used by the mosaic_mode results, while data/mosaic_odm/34_597_preprocessed.png is the ODM/WebODM mosaic used by the webodm_matlab results.
.
├── README.md
├── LICENSE.txt
├── models/
│ ├── yolo11_models/
│ │ ├── best.pt
│ │ └── last.pt
│ ├── yolov12_models/
│ │ ├── best.pt
│ │ └── last.pt
│ └── yolov9_models/
│ └── best.pt
├── data/
│ ├── raw_mode/
│ │ ├── H_asift_group_002.csv
│ │ └── raw/ # 77 sequential UAV video frames
│ ├── mosaic/
│ │ └── global_mosaic_7.png # DroneZaic/DMC mosaic
│ └── mosaic_odm/
│ └── 34_597_preprocessed.png # ODM/WebODM mosaic
└── results/
├── raw_mode/ # results generated from raw frames
│ ├── yolo_result/
│ │ └── labels/
│ └── mosaic/
├── mosaic_mode/
│ └── dmc_result/ # results generated from DroneZaic mosaic
│ └── fragment_1280/
│ └── yolo_result/
└── webodm_matlab/
└── webodm_1920x1920/ # results generated from ODM mosaic
└── fragment/
data/data/raw_mode/raw/This directory contains 77 sequential RGB UAV video frames:
24r_06_12_601_605_frame_000117.png
...
24r_06_12_601_605_frame_000193.png
The frame number is the final six-digit component of each filename. The sequence is continuous from frame 117 through frame 193. Each image is 1275 × 699 pixels and is stored as a 24-bit RGB PNG. Preserve the numeric filename order when reproducing pairwise registration or temporal processing.
data/raw_mode/H_asift_group_002.csvThis headerless CSV contains 76 pairwise projective transformations (homographies) calculated by DroneZaic for the 77-frame ordered sequence. There is one row for each adjacent frame pair. Each row contains nine floating-point values representing a 3 × 3 homography in row-major order:
h11,h12,h13,h21,h22,h23,h31,h32,h33
For row i, reshape the values as:
H_i = [[h11, h12, h13],
[h21, h22, h23],
[h31, h32, h33]]
The first matrix belongs to the first adjacent pair in the sorted sequence (frame_000117.png and frame_000118.png), the second belongs to frames 118 and 119, and so forth. As defined in the manuscript, each pairwise matrix H(i→i+1) maps coordinates from frame Fi to the following frame Fi+1. MaSC composes the pairwise transformations needed to map every frame into the coordinate system of reference frame F0. Preserve the stored precision and multiplication order when reproducing cumulative registration. Do not add a header row before loading the file as a numeric matrix. Loading and validation scripts are maintained in the MaSC GitHub repository rather than duplicated in this data archive.
data/mosaic/global_mosaic_7.pngThis is the 5445 × 5178 pixel, three-channel DroneZaic/DMC mosaic used as input to the mosaic-mode workflow. It is the parent image for the 1280 × 1280 fragments and the results under results/mosaic_mode/dmc_result/.
data/mosaic_odm/34_597_preprocessed.pngThis is the 8806 × 11565 pixel, four-channel (RGB plus alpha) preprocessed ODM/WebODM mosaic used by the WebODM/MATLAB workflow. The corresponding results are under results/webodm_matlab/webodm_1920x1920/. Files named no_alpha are RGB derivatives in which the alpha channel has been removed for downstream processing.
results/Most files in a labels/ directory use one detection per line in an extended YOLO-style normalized format:
class_id x_center y_center width height confidence
class_id: 0 for a single plant, 1 for a two-plant group, and 2 for a three-plant group. These classes contribute one, two, and three plants, respectively, to the final stand count.x_center, y_center: center of the detected bounding box, normalized by image width and height.width, height: bounding-box dimensions normalized by image width and height.confidence: detector confidence score.To recover pixel coordinates for an image of width W and height H:
x_min = (x_center - width / 2) * W
x_max = (x_center + width / 2) * W
y_min = (y_center - height / 2) * H
y_max = (y_center + height / 2) * H
The WebODM aggregate prediction file is an exception and is described separately below.
results/raw_mode/This directory contains the MaSC outputs produced by detecting maize plants in the 77 raw UAV frames and transferring/combining detections spatially using the pairwise registration information.
yolo_result/: 77 PNG images with detections rendered on their respective raw frames.yolo_result/labels/: 77 extended YOLO-format detection files, one per raw frame.bounding_box_mosaic.csv: 511 consolidated detections in headerless comma-separated extended YOLO format: class_id,x_center,y_center,width,height,confidence. Coordinates are normalized relative to the raw-mode mosaic product.mosaic/2024-10-04_23-01-30_range02.png: reconstructed raw-mode mosaic used for spatial aggregation and inspection.mosaic_with_bbox_fragment_raw.png: raw-mode mosaic with consolidated plant bounding boxes.mosaic_with_range_fragment_raw.png: raw-mode mosaic with range divisions overlaid.mosaic_with_row_fragment_raw.png: raw-mode mosaic with row divisions overlaid.rows_coordinate_and_count.mat: MATLAB Level-5 file containing rowsz, a 28 × 5 float64 matrix. Each row follows [x_start, x_end, y_start, y_end, stand_count] in pixels.prediction_on_each_row.csv: headerless 28 × 2 table containing [row_index, predicted_stand_count]. Indices are one-based in this file.range_plot_original_smooth.png: diagnostic plot used to locate range boundaries from the spatial detection distribution.row_gaps_on_range0.png: diagnostic visualization of row gaps for range 0.final_stand_count_per_row.png: final raw-mode count visualization.results/mosaic_mode/dmc_result/This directory contains outputs produced from data/mosaic/global_mosaic_7.png.
fragment_1280/1280_fragment_*.png: 25 image tiles, each 1280 × 1280 pixels. Tiles overlap so detections near tile edges can be retained and reconciled.attributes_1280.npz: NumPy archive containing object array att. The stored dictionary records the horizontal and vertical tiling offsets (h and w: [0, 1152, 2304, 3456, 4608, 5760]) and source mosaic dimensions (height=5178, width=5445, channel=3). The 1152-pixel step with a 1280-pixel tile corresponds to 128 pixels of nominal overlap between adjacent full tiles.fragment_1280/yolo_result/: the retained inference-result set. It contains 25 annotated tile images, a corresponding labels/ directory with 25 extended YOLO-format detection files, and mosaic_prediction_normalized_1280.txt, which stores the merged mosaic-level normalized predictions.mosaic_with_bbox_fragment_1280.png: mosaic with consolidated bounding boxes.mosaic_with_range_fragment_1280.png: mosaic with detected range boundaries.mosaic_with_row_fragment_1280.png: mosaic with detected row boundaries.rows_coordinate_and_count.mat: MATLAB Level-5 file containing rowsz, a 110 × 5 float64 matrix in the form [x_start, x_end, y_start, y_end, stand_count].prediction_on_each_row.csv: headerless 110 × 2 table containing [row_index, predicted_stand_count]; row indices are one-based.range_plot_original_smooth.png: range-boundary diagnostic plot.row_plot_original_smooth.png: row-boundary diagnostic plot.row_gaps_on_range0.png through row_gaps_on_range3.png: row-gap diagnostics for four zero-based ranges.final_stand_count_per_row.png: final mosaic-mode count visualization.The .npz metadata uses a pickled Python object. NumPy users must specify allow_pickle=True; load it only from a trusted copy of this archive. Refer to the MaSC GitHub repository for the corresponding loading code.
results/webodm_matlab/webodm_1920x1920/This directory contains the alternative mosaic workflow based on the ODM/WebODM product.
34_597_preprocessed_no_alpha.png: RGB image derived from the input mosaic by removing its alpha channel.fragment/: 42 fragments (frag000001 through frag000042). For each fragment, the archive includes the fragment PNG, a TXT prediction file, and a JPG detection visualization, for a total of 126 files.34_597_preprocessed_no_alpha_prediction.txt: 2,502 merged detections, one per line, in space-delimited pixel format class_id x y width height confidence. In contrast to the normalized files in labels/, these coordinate and size values are pixel-valued.34_597_preprocessed_no_alpha_with_bbox.png: RGB mosaic with bounding boxes.webodm_yolo_detection.png: WebODM/MATLAB detection visualization.attributes.mat: MATLAB Level-5 file containing structure att with tiling/image fields h, w, height, width, and channel.rows_coordinate.mat: MATLAB Level-5 file containing rows, a 312 × 5 uint16 matrix in the form [x_start, x_end, y_start, y_end, stand_count].The deposited files support three levels of reproducibility: re-running plant detection when the paper's code and trained model are available, re-running spatial aggregation/counting from the detection text files, and directly verifying the published counts and figures.
Download the Zenodo archive and extract it without changing the directory or filenames. Verify that data/ and results/ are siblings of this README. Zenodo provides checksums for deposited files; use those checksums to verify download integrity.
data/raw_mode/raw/. Use H_asift_group_002.csv to associate consecutive frames and reproduce the same pairwise spatial registration. Per-frame detections are available in results/raw_mode/yolo_result/labels/.data/mosaic/global_mosaic_7.png, reproduce the overlapping 1280-pixel tiling using attributes_1280.npz, run the detector on each tile, and map detections back to mosaic coordinates using the stored tile offsets. Reconcile duplicate boxes in overlap regions before row/range aggregation.data/mosaic_odm/34_597_preprocessed.png, remove or ignore the alpha channel as required, reproduce fragmentation using attributes.mat, run the detector, and combine fragment predictions in the parent-mosaic coordinate system.To reproduce the official MaSC results, use YOLOv9 with models/yolov9_models/best.pt, a 640 × 640 detector input, and the preprocessing and thresholds specified in the associated paper and MaSC source-code repository. Do not substitute the deposited YOLO11 or YOLOv12 checkpoints: those files belong to the ablation/benchmark study and were not used to generate the reported MaSC mosaic-mode or raw-frame results. The executable source and validation utilities are intentionally maintained on GitHub rather than duplicated in this data deposit.
For an output-only verification, compare newly generated detections against the deposited label files. Important checks include:
Map each consolidated detection center into the common mosaic coordinate system. Use the row/range boundary procedure described in the paper. The deposited diagnostic figures (range_plot_original_smooth.png, row_plot_original_smooth.png, and row_gaps_on_range*.png) allow the inferred boundaries to be visually checked.
For each region in rows_coordinate_and_count.mat or rows_coordinate.mat, count detection centers falling within the rectangle [x_start, x_end] × [y_start, y_end]. Be consistent about inclusive/exclusive boundary handling to prevent double-counting points lying exactly on a shared boundary.
The Python validation scripts are maintained in the MaSC GitHub repository. The following MATLAB checks provide a lightweight alternative for verifying the deposited table dimensions:
raw = load('results/raw_mode/rows_coordinate_and_count.mat');
raw_count_table = readmatrix('results/raw_mode/prediction_on_each_row.csv');
assert(isequal(size(raw.rowsz), [28 5]));
assert(isequal(size(raw_count_table), [28 2]));
dmc = load('results/mosaic_mode/dmc_result/rows_coordinate_and_count.mat');
dmc_count_table = readmatrix( ...
'results/mosaic_mode/dmc_result/prediction_on_each_row.csv');
assert(isequal(size(dmc.rowsz), [110 5]));
assert(isequal(size(dmc_count_table), [110 2]));
Compare reproduced results with the deposited *_with_bbox_*, *_with_row_*, *_with_range_*, and final_stand_count_per_row.png images. These files make coordinate-offset, tile-merging, row-orientation, and boundary-assignment errors easier to diagnose.
x increasing to the right and y increasing downward, unless the corresponding implementation explicitly converts them.labels/ and bounding_box_mosaic.csv are normalized to [0, 1] relative to the relevant image.row_gaps_on_range0.png use zero-based range numbers, whereas prediction_on_each_row.csv uses one-based row indices.readmatrix, Python NumPy, or pandas.load or Python scipy.io.loadmat.attributes_1280.npz contains an object array and therefore requires allow_pickle=True; load it only from a trusted copy of this archive.Suggested Python packages for inspecting the deposit are Python 3, NumPy, SciPy, Pillow or OpenCV, pandas, and Matplotlib. Exact software and hardware requirements for re-running MaSC inference should be taken from the associated code release and paper.
yolo_result/ and raw-frame detection outputs were generated with the official YOLOv9 MaSC detector. YOLO11 and YOLOv12 weights are provided only for detector ablation/benchmark reuse.Except where otherwise noted, this dataset is licensed under the Creative Commons Attributio… (CC BY 4.0). Users may share and adapt the material for any purpose provided that appropriate credit is given, a link to the license is supplied, and changes are indicated.
Any third-party software (including DroneZaic, the detector implementation, MATLAB, and WebODM) remains governed by its own license and is not redistributed by this archive unless explicitly included. The license status of the associated manuscript may be governed separately by its publisher.
For questions about the dataset, paper, or reproduction workflow, contact:
Dewi Endah Kharismawati, Ph.D.
The Ohio State University
kharismawati.2@osu.edu
orcid.org