Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Hyperseed 🌱

An experimental Python tool for hyperspectral seed image analysis. Inspired by (Reddy, et.al 2023, Sensors)[https://pmc.ncbi.nlm.nih.gov/articles/PMC9961513/]

🌟 Features

  • ENVI Format Support: Read and process ENVI format hyperspectral data from Specim SWIR cameras
  • Automatic Calibration: White/dark reference correction with automatic bad pixel interpolation
  • Intelligent Outlier Removal: Automatically detect and remove reference objects, calibration targets, and anomalies
  • Advanced Preprocessing: Multiple spectral preprocessing methods (SNV, derivatives, baseline correction, etc.)
  • Smart Segmentation: Multiple algorithms for accurate seed detection and isolation
  • Spectral Extraction: Extract average spectral signatures from individual seeds
  • Spatial Preservation: Maintain seed coordinates and morphological properties
  • Comprehensive Visualizations: Auto-generate distribution, segmentation, and spectral plots
  • Batch Processing: Process multiple datasets efficiently with parallel support
  • Flexible Configuration: YAML-based configuration system
  • User-Friendly CLI: Intuitive command-line interface with rich output

📋 Requirements

  • Python 3.10 or higher
  • 8GB+ RAM recommended
  • Optional: GPU with Metal (macOS) or CUDA support for acceleration

🚀 Installation

From Source

# Clone the repository
git clone [repository-url]
cd hyperseed

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install in development mode
pip install -e ".[dev]"

Using pip from Github Source

pip install --no-cache-dir --force-reinstall https://github.com/nishad/hyperseed/archive/main.zip

📖 Quick Start

Basic Usage

Analyze a single hyperspectral dataset:

hyperseed analyze dataset/sample_001 --output results.csv --export-plots

Recommended Usage

# Optimal settings for seed analysis with visualizations
hyperseed analyze dataset/sample_data \
    --output results.csv \
    --min-pixels 50 \
    --preprocess minimal \
    --export-plots

Advanced Usage

# Batch process multiple datasets in parallel
hyperseed batch dataset/ \
    --output-dir results/ \
    --min-pixels 50 \
    --parallel 4

# Disable outlier removal if needed
hyperseed analyze dataset/sample \
    --output results.csv \
    --no-outlier-removal

# Generate and use custom configuration
hyperseed config --output my_config.yaml --preset minimal
hyperseed analyze dataset/sample --config my_config.yaml

📁 Expected Data Structure

Hyperseed expects hyperspectral data in the following directory structure:

dataset/
├── capture/
│   ├── data.raw              # Main hyperspectral data
│   ├── data.hdr              # ENVI header file
│   ├── WHITEREF_data.raw     # White reference
│   ├── WHITEREF_data.hdr
│   ├── DARKREF_data.raw      # Dark reference
│   └── DARKREF_data.hdr
├── calibrations/bpr/         # Optional bad pixel maps
│   ├── bprmap.bpr
│   └── bprmap.hdr
└── metadata/                 # Optional metadata
    └── data.xml

⚙️ Configuration

Create a configuration file to customize the analysis pipeline:

# config.yaml
calibration:
  apply_calibration: true
  clip_negative: true
  clip_max: 1.0

preprocessing:
  method: minimal  # Options: minimal, standard, advanced, none
  snv: false
  smoothing: true
  smoothing_window: 11
  baseline_correction: false

segmentation:
  algorithm: watershed  # Options: threshold, watershed, connected, combined
  min_pixels: 50
  reject_overlapping: true
  remove_outliers: true  # Automatic outlier removal (enabled by default)
  outlier_min_area: 50
  outlier_max_area: 2000

output:
  format: csv
  include_plots: true
  include_coordinates: true

📊 Output Format

The tool generates multiple outputs:

CSV Spectra File

seed_id,index,centroid_y,centroid_x,area,eccentricity,solidity,band_1000nm,band_1005nm,...
1,0,234.5,156.2,435,0.34,0.92,0.234,0.237,...
2,1,345.6,234.1,421,0.28,0.94,0.229,0.232,...

Visualization Plots (when using --export-plots)

  • *_distribution.png: Spatial and area distribution of seeds
  • *_segmentation.png: Numbered seed visualization with boundaries
  • *_spectra.png: Individual and mean spectral curves
  • *_spectra_statistics.png: Statistical analysis of spectral variability

🔬 Processing Pipeline

  1. Data Loading: Read ENVI format hyperspectral data
  2. Calibration: Apply white/dark reference correction with bad pixel interpolation
  3. Preprocessing: Apply spectral preprocessing methods (minimal recommended for segmentation)
  4. Segmentation: Detect and isolate individual seeds using smart algorithms
  5. Validation: Filter seeds based on size and shape criteria
  6. Outlier Removal: Automatically remove reference objects and anomalies
  7. Extraction: Extract average spectrum for each valid seed
  8. Export: Save results with comprehensive spatial and spectral information

Command-Line Documentation

For detailed usage instructions, see the CLI Documentation.

🛠️ Development

Running Tests

# Run all tests
pytest

# Run with coverage
pytest --cov=hyperseed

# Run specific test module
pytest tests/test_preprocessing.py -v

Code Quality

# Format code
black hyperseed/

# Check code style
ruff check hyperseed/

# Type checking
mypy hyperseed/

📚 API Usage

from hyperseed import ENVIReader, Settings
from hyperseed.core.calibration import ReflectanceCalibrator
from hyperseed.core.preprocessing import PreprocessingPipeline
from hyperseed.core.segmentation import SeedSegmenter
from hyperseed.core.extraction import SpectralExtractor

# Load data
reader = ENVIReader("path/to/data.hdr")
data = reader.read_data()
wavelengths = reader.get_wavelengths()

# Calibrate (automatically handles bad pixel correction)
calibrator = ReflectanceCalibrator(clip_negative=True, clip_max=1.0)
calibrated, reader = calibrator.calibrate_from_directory("path/to/dataset")

# Preprocess
settings = Settings()
preprocessor = PreprocessingPipeline(settings.preprocessing)
processed = preprocessor.fit_transform(calibrated)

# Segment
segmenter = SeedSegmenter(settings.segmentation)
mask, n_seeds = segmenter.segment(processed)

# Extract spectra
extractor = SpectralExtractor()
results = extractor.extract(calibrated, mask, wavelengths)

# Save results
extractor.save_csv("results.csv")

Release files for hyperseed 0.1.0a3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hyperseed 0.1.0a3
File Size Uploaded
hyperseed-0.1.0a3.tar.gz 81.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hyperseed 0.1.0a3
File Interpreter ABI Platform
hyperseed-0.1.0a3-py3-none-any.whl Python 3 none any Details

Total release size: 182.2 kB

Release files / hyperseed-0.1.0a3.tar.gz

Download URL hyperseed-0.1.0a3.tar.gz
Size 81.0 kB
Tags Source
SHA-256 checksum
How to use checksums
320e61c0bfc522412407eec4f934d2a799e68ceead316a66da68e6836a43ef50
BLAKE2b-256 checksum
How to use checksums
58f198e52113e0742379683e21332234b667c05f1332286ecb75a72b6b979556
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / hyperseed-0.1.0a3-py3-none-any.whl

Download URL hyperseed-0.1.0a3-py3-none-any.whl
Size 101.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ad2bc4b6bffe79bae359fde40d6b1f5c34c37bf2a11b9a418a2d8339647ec5d7
BLAKE2b-256 checksum
How to use checksums
8330b3248479544db1bcd07a813169e8f5e96e9924519dfa83c41a48e15c5c49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release history Release notifications | RSS feed

This release

0.1.0a3 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page