What this measures, and why it needed 3D
A photograph flattens a plant. Leaves that sit above one another become one shape, a leaf seen edge-on has no measurable area, and a gap in a blade looks the same as a shadow. This capture is metric and gravity-aligned, so leaf count, leaf area, height and leaf area index stop being estimated from appearance and become geometry.
Canopy cover — the best a single top-down photo can do — is 0.52. It cannot exceed 1.00 no matter how leafy the plant is, because two leaves above each other shadow one patch of ground. The same plant measured in 3D has an LAI of 2.99: the 2D number under-reports the real leaf surface by 5.7×. Averaged over the footprint there are 2.65 leaf layers above every covered patch of ground; 65% of the footprint has two or more, 35% has three or more. A photograph sees only the top one.
1 · The plant, turnable
Drag to rotate, scroll to zoom, and set the splat size and how many are drawn. All 269,833 gaussians are rasterised the way a 3DGS renderer does them — an oriented, alpha-blended ellipse each, depth-sorted every frame, with view-dependent colour from the capture’s spherical harmonics. The measurements are drawn in the same space as the plant, so the rectangle and the height ruler are the actual quantities, not a legend.
The same turn, three ways
All three are live, from the same gaussians and the same splat-size and splats-drawn settings as the view above — drag the orbit slider and they turn together.
2 · Height and footprint
Height: 1.323 m
Measured along the capture's own gravity vector, which was recorded by the device rather than inferred. The canopy itself spans 1.211 m.
Ground rectangle: 0.714 × 0.663 m
The smallest rectangle that encloses the plant's footprint — the LAI denominator. It is a declared choice, and LAI means nothing without naming it.
3 · Every leaflet, measured
Each blade below is the viewer’s own render of that one leaflet, seen down its own normal with the rest of the plant hidden — the same gaussians and the same rasteriser as section 1, which is a view no single photograph of this plant contains. Largest first.
The same question asked in 2D and in 3D
| question | what one photograph gives | what the 3D capture gives |
|---|---|---|
| How many leaflets? | 91 at best, 82 typical — the rest are hidden behind the ones in front | 146, and the count barely moves when the capture is thinned eight-fold |
| How much leaf area? | canopy cover 0.52, capped at 1.00 by construction | 1.415 m² → LAI 2.99 |
| How tall? | not measurable without a scale reference in frame | 1.323 m, from the device's own gravity vector |
| Is a dark patch a hole? | indistinguishable from shadow | an absence of surface, and rankable |
| What angle is each leaf at? | not recoverable from one projection | per-leaf inclination, in degrees |
The leaf-count row is measured, not asserted: each turntable viewpoint was re-rendered as a label image, and a leaf counts as visible only when its own surface survives occlusion into at least 120 pixels. That is the ceiling on what any single image could report.
Leaves with the most missing blade
Fill is the occupied blade divided by its outline. A low value means a gap in the surface: damage, a hole, or tissue the capture never saw. This is the defect a single photo genuinely cannot resolve — in projection a hole and a dark patch are the same pixels; in 3D one is an absence of surface. It does not separate real damage from poor coverage, so treat it as a ranking that tells you which leaves to look at, not as a damage measurement.
Ranked among leaves of at least 40 cm², where the fill fraction is meaningful.
| leaflet | area cm² | fill |
|---|---|---|
| #2 | 141 | 0.33 |
| #3 | 141 | 0.34 |
| #9 | 92 | 0.36 |
| #40 | 52 | 0.47 |
| #44 | 50 | 0.47 |
| #13 | 88 | 0.50 |
4 · How a leaflet is found
The same plant five times, the same camera. The question these answer is “why did it cut there?”, and it is the middle two panels: a boundary is either a bend or a step, and until this pass the method looked only for bends.
one branch, every gaussian, natural colour.
green where a facet agrees with every neighbour, red where it disagrees with any. Red is most of this canopy — the leaves overlap, fold and touch — and the green islands are the flat middles of blades.
the other half, and the one the method was missing: green where a neighbour lies on this facet’s own plane, red where it sits off it. Two leaves one in front of the other are parallel — the bend above sees nothing between them, and only this does.
the blade interiors fall apart on their own once the red is gone, one label each. Nothing here was told how big a leaflet is, or how many to look for.
each label spreads back over the red until it runs into another label, so the blade is whole again and the boundary lands on the crease that separated them.
Why this is a measurement and the old one was not
Region growing used to end a leaflet wherever its running normal had drifted far enough, which is an arbitrary place mid-blade: the instance count slid from 402 to 12 across settings that all looked reasonable. Cutting at creases instead holds the median leaflet to 31.9% across the whole sweep below, and the count to 13% across the plateau. A number that ignores its own knob is a property of the plant.
| crease | leaflets | median cm² | median length cm |
|---|---|---|---|
| 25° | 77 | 52.5 | 13.1 |
| 30° | 99 | 45.6 | 11.6 |
| 35° | 116 | 38.4 | 11.5 |
| 40° | 128 | 38.8 | 10.3 |
| 45° | 146 | 35.8 | 10.6 |
| 50° | 145 | 37.8 | 10.7 |
| 55° | 147 | 37.2 | 10.9 |
What is a leaf here, then?
A money tree carries palmately compound leaves: one leaf is a petiole ending in a whorl of five to seven leaflets. The blade this pipeline resolves is a leaflet, and that is the unit every count in this report uses.
| junction | groups | whorls of 5–7 | singletons |
|---|---|---|---|
| 5 cm | 100 | 1 | 68 |
| 7 cm | 78 | 3 | 40 |
| 9 cm | 62 | 6 | 21 |
| 11 cm | 53 | 9 | 14 |
5 · Is the plant healthy?
The app's generic symptom head cannot answer this: it has no healthy class and always names a symptom family. The D2 healthy/diseased head can, and it is run here over the real photographs.
Over 71 real photographs of the same plant, the head disagrees with itself depending on the viewpoint: 20 of 71 frames cross the threshold. That disagreement is itself the finding — a single photo would have returned one of these two answers with no way to know which.
6 · The ones worth looking at
Picked by a measurement, not by eye. Each one is the extreme of a trait the 3D capture can compute and a single photograph cannot, which is the point of showing them.
#0 · 215cm² · 215 cm²
the biggest single leaflet the capture resolved
#110 · 25 cm² · 25 cm²
the smallest blade above the floor these picks use
#2 · 0.33 · 141 cm²
lowest occupied-blade fraction inside its own outline
#11 · 1.00 · 91 cm²
the blade the capture saw most completely
#109 · 9° · 26 cm²
nearest to horizontal, so nearly its true area from above
#97 · 89° · 29 cm²
nearest to edge-on, where a photograph measures almost nothing
7 · The app, looking at the plant
This is the app’s own camera view, and the thing in front of it is the 3-D capture instead of the plant. Drag inside the phone to walk around it and to raise or lower the camera — from below the pot to almost straight down over the canopy — then press the shutter. The app runs on that view.
Drag the plant to any angle, then press the shutter.
What is live here and what is not
The viewfinder is live: it is the same rasteriser and the same 269,833 gaussians as section 1, free in yaw and pitch, and the picture in the result panel is the exact frame that was on screen when you pressed the shutter. The verdict is not computed in your browser — a report is a single offline file and cannot carry the models. It was computed ahead of time by running the app’s real honesty chain over this same renderer at 252 poses, and the shutter looks up the nearest one, which is never further than 11° away. The images it ran on were rendered by the viewer you are looking at, not photographed.
Renders and photographs are not interchangeable for this: measured on this capture, renders misroute about twice as often as its own photographs. So these numbers describe the app on renders of this plant, which is what a simulator can honestly claim.
What this does not claim
- Every number is an observed quantity. A splat contains only surface some camera saw. This capture is a single planar camera ring, so leaf undersides and the canopy interior are absent by construction — leaf area and leaf count are lower bounds.
- The unit is the LEAFLET, and it is declared. A money tree carries palmately compound leaves, so what this counts is the blade, not the whole leaf. Grouping leaflets back into their whorls is not identifiable from this capture and is reported as nothing.
- LAI is reported against a declared denominator and a declared disc radius. The two estimators that agree are voxel occupancy and the summed disc areas; the summed leaf outlines (1.45) sit below both by construction, because projecting a curved fragment into one plane loses area. Quote the range, not one figure.
- No disease claim is made. This plant is in none of the app's crop classes, so every crop-specific label it can emit is wrong by construction.
- n = 1 plant, one session. Nothing here generalises to another plant.
Segmentation parameters
{
"opacity_min": 0.3,
"densify_spacing_m": 0.001,
"densify_sigma": 1.0,
"area_spacing_m": 0.0005,
"area_voxel_m": 0.004,
"facet_voxel_m": 0.003,
"normal_tolerance_deg": 15.0,
"region_tolerance_deg": 22.0,
"min_facets": 43,
"min_area_cm2": 5.0,
"crease_deg": 45.0,
"facet_step_m": 0.004,
"absorb_tolerance_deg": 50.0,
"absorbed_stragglers": true,
"petiole_junction_m": 0.07
}Appendix · How much of this is the plant, and how much is the method?
Two questions that had to be answered before any number above could be quoted: whether the leaf area is a property of the plant or of the estimator, and whether it is a property of the plant or of how many gaussians the reconstruction spent. Both are settled; the working is here rather than in the way.
A gaussian is a disc, not a point — and the area converges
3 · A gaussian is a disc, not a point
Measuring occupancy over gaussian centres counts samples, not surface — so it rose with however many gaussians the reconstruction happened to spend, and never settled. Every gaussian is now resampled across its own disc before anything is measured, and the same estimator has a plateau.
| disc radius | leaf area (m²) | LAI |
|---|---|---|
| 0.75 σ | 1.276 | 2.69 |
| 1.00 σ | 1.415 | 2.99 |
| 1.25 σ | 1.535 | 3.24 |
| 1.50 σ | 1.641 | 3.47 |
Two estimators bracket it. Summing the disc areas, 1.379 m², ignores overlap and so sits above the true surface; voxel occupancy, 1.415 m², counts a partly covered voxel in full and so does too. They agree to 2.6%, which puts the leaf area near 1.40 m² and the LAI at 2.91–2.99.
The full grid: sample spacing against area voxel
| spacing | foliage points | 12 mm | 8 mm | 6 mm | 4 mm | 3 mm | 2 mm |
|---|---|---|---|---|---|---|---|
| 2.00 mm | 399,508 | 1.300 | 1.249 | 1.211 | 1.131 | 1.036 | 0.805 |
| 1.50 mm | 659,342 | 1.341 | 1.298 | 1.274 | 1.224 | 1.163 | 0.988 |
| 1.00 mm | 1,354,276 | 1.378 | 1.351 | 1.342 | 1.323 | 1.299 | 1.205 |
| 0.75 mm | 2,193,037 | 1.398 | 1.376 | 1.373 | 1.374 | 1.367 | 1.310 |
| 0.50 mm | 3,876,280 | 1.413 | 1.401 | 1.404 | 1.415 | 1.421 | 1.397 |
Every gaussian is treated as a disc of the stated radius on its two long axes. That convention is declared because the leaf area scales with roughly its square, and the summed disc areas are reported beside the occupancy estimate as an overlap-free upper bound on the same quantity.
What the capture’s own density is worth
4 · How much of this is the plant, and how much is the capture?
Sampling is settled; how many gaussians the reconstruction spent is a separate question. The whole pipeline — densify, segment, measure — was re-run on thinned copies of the capture to find out which numbers notice.
Robust: height and footprint
Both are extrema of the cloud, so they survive an eight-fold thinning almost unchanged — height moves 2.2 mm and the rectangle 0.7%. Quote them as measurements.
Bounded below: leaf area, LAI and the leaf count
A gaussian's disc is surface, so throwing gaussians away throws leaf away and these must fall — they are lower bounds on the real plant, not estimates of it. What the sweep shows is that the loss is sub-proportional: half the gaussians still carry 81% of the leaf area, because the discs that remain overlap what the discs that went covered. The last quarter of the gaussians added 7.7%, so a capture with more gaussians would measure a little more leaf surface, not a lot.
Every other reconstruction of this capture on disk was checked, cropped to the same volume: 2 of them contain the identical 269,833 gaussians over the plant. There is no denser model of this plant — this is the whole reconstruction, not a sample of it.
The sweep, and every sibling reconstruction
| Density | Gaussians | Leaves | Height (m) | Rectangle (m²) | Voxel area (m²) | Outlines (m²) | LAI |
|---|---|---|---|---|---|---|---|
| 100.0% | 269,833 | 146 | 1.323 | 0.4735 | 1.415 | 0.685 | 2.99 |
| 75.0% | 202,375 | 128 | 1.322 | 0.4730 | 1.305 | 0.663 | 2.76 |
| 50.0% | 134,916 | 133 | 1.322 | 0.4704 | 1.148 | 0.637 | 2.44 |
| 25.0% | 67,458 | 129 | 1.322 | 0.4693 | 0.847 | 0.576 | 1.81 |
| 12.5% | 33,729 | 81 | 1.320 | 0.4695 | 0.559 | 0.457 | 1.19 |
Deterministic uniform subsets of the SAME capture, measured by the same pipeline. Thinning a cloud can only remove surface, never add it, so every area here is a lower bound and the full-density row is the least-bad one.
| Sibling PLY | Gaussians in file | Inside the plant volume | Leaf area (m²) |
|---|---|---|---|
| plant_3ft_thintiles_297k.ply | 296,568 | 269,833 | 1.415 |
| plant_full_926k.ply | 925,973 | 269,848 | 1.416 |
| plant_lite_150k.ply | 150,000 | 43,645 | 0.659 |