iman1 / README.md
stevafernandes's picture
Upload 6 files
73a6a55 verified
|
Raw
History Blame Contribute Delete
3.47 kB
---
title: Cochlear Neurofilament Tracer
emoji: 🧠
colorFrom: indigo
colorTo: purple
sdk: gradio
sdk_version: 5.49.1
app_file: app.py
pinned: false
license: mit
---
# 🧠 Cochlear Neurofilament Tracer
A HuggingFace app that traces auditory-nerve fibers in confocal z-stacks of the
organ of Corti and quantifies them **per frequency region**, separating
**IHC-innervating** from **OHC-innervating** fibers.
It is an alternative to IMARIS filament tracing that keeps each neuron as a
**single continuous traced element** instead of splitting it into many
threshold-dependent segments.
## Input
- **File type:** Zeiss `.czi` 3D z-stacks. Generic `.tif/.tiff` stacks are also
accepted for flexibility.
- **Channels:**
- *Neurofilament* — traces the neuron.
- *Myo7a* — marks hair cells; used as a reference to separate IHC- vs
OHC-innervating fibers. IHCs form a single row and OHCs form three adjacent
rows, so the Myo7a band is used to place the IHC/OHC boundary.
- **Frequency region:** selectable (8/16/22/32/64 kHz), auto-detected from the
file name when possible.
- Channels are auto-detected from CZI metadata (Alexa-555 → Neurofilament,
Alexa-405 → Myo7a) but can be reassigned in the UI.
## What it does
1. Segments and **skeletonises the Neurofilament network in 3D** using physical
voxel spacing (from CZI metadata, or entered for TIFF).
2. Uses the **Myo7a channel** to place an IHC/OHC boundary. This can be set
manually (ROI 1 vs ROI 2) by moving the boundary slider while viewing the
Myo7a preview, choosing the split axis, and choosing which side is IHC.
Optionally, **Detect hair cells** runs **Cellpose** (or a classical
watershed fallback) on the Myo7a channel to mark hair cells, count them per
region, and *propose* a boundary + side with a confidence score. On dense
fields this detection is often incomplete, so it is a **visual assist**: the
quantified numbers come from the deterministic pipeline and the boundary
stays under your control. Detection is much better on a GPU Space.
3. Computes, per region (Whole field / IHC / OHC):
- **Number of fibers** (continuous skeleton components above a minimum length)
- **Hair cells (Myo7a)** counted in the region (when detection is run)
- **Thickness / diameter** (from the 3D distance transform)
- **Length** (µm, spacing-aware)
- **Branching** (number of branch points)
- **Area covered** within the field of view (µm² and % of FOV)
## Output
- A **black-background image** of the traced neurons in **white** (skeletonised
trace), plus a colour-coded IHC/OHC overlay.
- An **Excel workbook** with all quantification, organized by frequency region,
with IHC and OHC fibers reported separately (tidy "Per region" sheet plus
per-metric frequency × region summary sheets).
The **Batch** tab processes several stacks at once (e.g. all frequency regions
of one cochlea) and compiles one Excel workbook plus a ZIP of skeleton images.
## Notes on method
Confocal images of the organ of Corti are dense, so fully separating every
individual axon is inherently ambiguous. This tool traces the network
continuously and reports metrics **per region surrounding the IHCs / OHCs**,
with a human-in-the-loop boundary for reliable IHC vs OHC assignment. The
`sensitivity` control scales the segmentation threshold to capture more or fewer
thin fibers.
## Local run
```bash
pip install -r requirements.txt
python app.py
```