Sensor setup

Captures come from a calibrated virtual stereo rig modelled on the Stereolabs ZED Mini. The rig orbits each target tree at a fixed metric distance, sweeping roughly 356° per elevation ring.

Every capture set stores its intrinsics in camera_poses.json alongside the exact per-frame extrinsics, so nothing has to be inferred from the imagery.

Calibration from example_25

Optics

Camera model
Stereolabs ZED Mini (simulated, HD1080)
Resolution
1920 × 1080 px
fx, fy
960.0, 960.0
cx, cy
960.0, 540.0
Focal length
2.1 mm
Sensor width
4.2 mm
Field of view (H)
90.0°

Rig & orbit

Baseline
63.0 mm
Camera distance
400.0 cm, fixed
Orbit sweep
356.0°
Elevations
0°, +45°, −45°
Depth range
0.1 – 15.0 m
Total captures
48

File conventions

ModalityFormat on disk
Stereo pair
left/ right/
8-bit PNG, sRGB, 1920×1080.
Depth
*_depth/
Float metric depth in EXR and *_m.npy; *_mm.png as a 16-bit millimetre map; *_vis.png for preview only.
Disparity
*_disparity/
Float pixels in *_px.npy; *_px16.png as a 16-bit map; plus a visualisation.
Normals
*_normal/
World-space normals in EXR and *_world.npy, plus an RGB-encoded visualisation.
Segmentation
*_seg/
Colourised *_color.png, per-pixel integer *_id.png, and an *_instances.json legend mapping IDs to labels and classes.
Point clouds
pointcloud/
Per-frame PLY for left and right, plus merged scene-wide aggregates in raw and coloured variants.

Anything ending _vis is a preview render, never the ground truth — train and evaluate against the EXR or NPY files.

Filename pattern

All capture files share the same stem:

{capture_index:03d}_{orbit_ring}_{frame_in_ring:02d}.{ext}

So 015_horizontal_15_vis.png is capture 15, on the horizontal (0° elevation) ring, frame 15 within that ring — and its ground-truth companion is 015_horizontal_15.exr in the same folder. Additional rings appear as up45 and down45.

Depth ↔ disparity

The two are interchangeable given the calibration above:

Z = fx · B / d          d = fx · B / Z

fx = 960.0 px      (horizontal focal length)
B  = 63.0 mm     (stereo baseline)
Z  = metric depth in millimetres
d  = disparity in pixels

Both representations ship with every frame, so there is no need to convert — they are provided together as a cross-check.