Featherfield
GitHub

Open source·Lightweight·Field-first

Feather-light tools for the field.

Featherfield builds open-source, lightweight alternatives to heavy field-measurement software — apps that give farmers and ecologists real numbers from an ordinary photo, on ordinary hardware.

The canopy on this page isn’t a stock image. It is generated from a known leaf area, photographed, and measured live in your browser by the same algorithm as our first tool, hemispheR-py — then checked against it.

  • Agriculture
  • Forestry & ecology
  • MIT licensed
  • 0 dependencies on this page
rendering canopy…
Le effective LAI
—
L corrected LAI
—
LX clumping index
—
DIFN open sky
—

 

Settings

Your photo never leaves this browser tab. It is read, measured and discarded locally. Assumes a circular fisheye image centred in the frame, blue channel, gamma 0.85 and a 70° analysis limit — the defaults of hemispheR-py. For other masks and cameras, use the Python tool.

MIT

Every tool is open source. No accounts, no licence keys.

3packages

numpy, pandas and Pillow are all hemispheR-py needs — no OpenCV, no R.

0dependencies

on this page: system fonts, no libraries, no trackers.

—

reference canopies on which this page’s JavaScript matches the Python tool exactly.

Tools

One tool out. More on the way.

Each Featherfield tool starts from a field measurement that normally needs heavy, closed or expensive software, and rebuilds it small, open and checkable.

ReleasedPython · MIT

hemispheR-py

Canopy structure from one fisheye photo.

Point it at an upward-facing hemispherical photo and it returns effective and corrected leaf area index, the clumping index, gap fraction by zenith ring and canopy openness — the numbers ecologists and foresters use to describe how much light a canopy lets through. It is a from-scratch Python port of the hemispherical-photography workflow, without the heavy R / OpenCV stack.

Input
An upward-facing fisheye photo (JPG, PNG or TIFF).
Output
Effective LAI, corrected LAI, clumping index, DIFN, and the full ring × sector gap-fraction table.
Needs
Python with numpy, pandas and Pillow.
Comes as
A script, a Streamlit web app, and an Android app — the Canopy Analyzer listed on the lab’s tools page.
# edit CONFIG (your image path) at the top of the script first git clone https://github.com/realgauravvyas/hemispheR-py pip install numpy pandas pillow python core/hemispherR-py.py
Next

The next one

Same rules, a different measurement.

Light enough for a phone or an old laptop. Open enough to read and change. Checked against a reference so you can trust the number. Every Featherfield tool starts from the same three things:

  • A measurement people already make in the field,
  • a method that is heavy, closed or costly today,
  • a reference we can check our version against.

Know one? Tell us which measurement you wish your phone could make.

Why

Field work shouldn’t need a workstation.

Farmers and ecologists make decisions standing in a plot, a stand or a paddock. The tools that measure what they care about too often assume a desktop, a licence and a stable connection. We build the opposite.

01

Open by default

Code is MIT-licensed, methods are written down, and every number can be re-derived. No accounts, no licence keys, no usage fees.

02

Light by design

Few dependencies and small installs that run on modest hardware — the kind people actually carry into a field. hemispheR-py needs three packages; this page needs none.

03

Field-first

Photo in, numbers out. Workflows shaped by what someone does standing in the crop or the canopy, not at a workstation.

04

Verified, not claimed

Each tool is held to a reference implementation and the evidence is published. This page re-runs that check on itself every time it loads.

Method

Nothing here is faked.

The canopy above is rendered from a known leaf area Λ, then measured as if it were a photograph. The measurement is a step-for-step port of hemispheR-py’s pipeline — down to numpy’s rounding — so the two give the same answers on the same pixels.

Import

Mask the fisheye circle, take the blue channel (sky is bright in blue, leaves are dark), gamma-correct and scale to 0–255.

Binarize

Otsu’s method picks the threshold that best splits sky from canopy — once for the whole frame, or per compass quadrant when the light is uneven.

Gap fraction

Map each pixel to its view-zenith angle through the lens model, bin into 7 rings × 8 sectors and take the fraction of sky in each.

Canopy attributes

Invert Beer–Lambert over the rings to get leaf area index, then compare with the per-sector estimate to get the clumping index.

T(θᵢ) is the fraction of sky pixels in zenith ring i, and wᵢ = sin θᵢ / Σⱼ sin θⱼ.

Le = 2 · Σᵢ −ln T(θᵢ) · cos θᵢ · wᵢeffective LAI — assumes leaves are placed at random (Miller 1967)
L = 2 · Σᵢ meanj[ −ln T(θᵢ, φⱼ) ] · cos θᵢ · wᵢcorrected LAI — logs are taken per sector first (after Lang & Xiang 1986)
LX = Le / Lclumping index — 1 for a random canopy, lower when leaves are clumped
DIFN = 100 · Σᵢ T(θᵢ) sin θᵢ cos θᵢ / Σⱼ sin θⱼ cos θⱼdiffuse non-interceptance — the percentage of the sky that gets through

Round trip

Render a canopy of known leaf area, measure the picture, compare. Over 24 canopies per setting, random canopies read about 6% low: pixels that blend leaf edge and sky tip toward “sky”. The error is steady from Λ = 1 to 4.

Clumping

Gather the same leaves into clusters and more light gets through, so Le falls by about 10–15% — while the corrected L typically stays within about 5% of the truth. That is the clumping index doing its job. Try the slider.

Parity with the Python tool

The same 12 canopies, run through the real hemispheR-py, give identical thresholds and identical Le, L, LX and DIFN — across lenses, channels, global and zonal thresholds, and ring counts. Your browser repeats the comparison on every load; CI blocks deploys if it ever fails.

What this does not prove. A synthetic canopy tests the arithmetic and the port, not your camera. Real photos add exposure, lens, mask and sky-condition error — the sky/canopy threshold is the biggest — which is why the Python tool exposes mask, channel, gamma, lens and thresholds. Shoot level, under even sky, and treat any single number as an estimate.

About

Who’s building this.

Featherfield is founded by Gaurav Vyas — B.Sc. (Hons.) in Data Science & AI at IIT Guwahati, with a Post Graduate Diploma in Applied Statistics at ISI Kolkata.

hemispheR-py began as a research project in the Agro-geoinformatics Lab at IIT Guwahati: a Python-based framework for automatic plant biophysical variable extraction from hemispherical canopy images. The lab lists the work on its researcher page and its tools page.

It stands on the R package hemispheR by Francesco Chianucci and Martin Macek (MIT-licensed; Chianucci & Macek 2023, Agricultural and Forest Meteorology) — credit where it’s due.

The plan is simple: keep building small, open tools like this one for agriculture and forestry, and keep checking them against the truth.

Featherfield is an independent venture. It is not an IIT Guwahati entity, and the institute does not endorse it.

Build with us.

Featherfield is early: one released tool and a clear direction. If you farm, do fieldwork, or write code that belongs in a field bag, we’d like to hear what you need measured.