acd22d41dc83aa1a15a170da395c1f8a44de0482
Replace parallel chunk strategy with sequential incremental assembly: 1. Start with first 20 images, full cpfind + optimize 2. Add 5 new images at a time with 5-image bridge to existing set 3. cpfind only on bridge+new group (small, fast) 4. Remap CPs to global indices and accumulate This ensures spatial coherence: each new batch is constrained by the already-stable panorama, preventing orientation flips that occurred with the parallel chunk approach. Images are sorted by azimuth, so consecutive indices = spatial neighbors (guaranteed contiguity). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mars Panorama Pipeline
Automated panorama stitching for NASA Mars rovers (Perseverance, Curiosity) using Hugin CLI tools in Docker.
Quick Start
# Build the image
docker build -t mars-panorama-pipeline .
# Run a NavCam panorama (sol 1813)
docker run --rm \
-v /mnt/astro/mars_rovers:/data \
-v /mnt/astro/mars_rovers/images/panorama/perseverance:/output \
mars-panorama-pipeline \
--sol 1813 --camera NAVCAM_LEFT
# Run a Mastcam-Z panorama (sol 1817)
docker run --rm \
-v /mnt/astro/mars_rovers:/data \
-v /mnt/astro/mars_rovers/images/panorama/perseverance:/output \
mars-panorama-pipeline \
--sol 1817 --camera MCZ_LEFT
# List available sequences for a sol
docker run --rm \
-v /mnt/astro/mars_rovers:/data \
mars-panorama-pipeline \
--sol 1813 --camera NAVCAM_LEFT --list-only
With Docker Compose
docker compose run panorama --sol 1813 --camera NAVCAM_LEFT
Pipeline Steps
- Find sequence — Query MySQL for panorama-capable image sequences
- Combine tiles — NavCam tiles 01+04 with 16px overlap blending
- CLAHE preprocessing — Vignette correction + contrast normalization (for cpfind only)
- cpfind — Feature matching on CLAHE images (aggressive params)
- cpclean — Remove outlier control points
- Swap to originals — Replace CLAHE images with originals in PTO
- autooptimiser — Geometry-only optimization (NO photometric -m flag)
- nona + verdandi — Remap and blend final panorama (verdandi eliminates overexposure at seams)
- Export PNG — Convert TIFF output to PNG
Supported Cameras
| Camera | Rover | FOV | Tile combining |
|---|---|---|---|
| NAVCAM_LEFT/RIGHT | Perseverance | 82.17° (combined) | Yes (01+04, 16px overlap) |
| MCZ_LEFT/RIGHT | Perseverance | 25.6° (wide zoom) | No |
Configuration
Environment variables (or .env file):
MYSQL_HOST— MySQL server (default: 192.168.1.42)MYSQL_PORT— MySQL port (default: 3306)MYSQL_USER— MySQL user (default: soldan)MYSQL_PASSWORD— MySQL passwordMYSQL_DATABASE— Database name (default: mars_rovers)
Description
Languages
Python
96.4%
Dockerfile
3.6%