Commit Graph

2 Commits

Author SHA1 Message Date
NoahC 80f2e92d24 Write camera attitude for Metashape: XMP-Camera YPR + reference CSV
Photogrammetry software (Agisoft Metashape, Pix4D) could not read the
camera orientation, and the pitch convention was wrong.

- Emit attitude as XMP-Camera:Yaw/Pitch/Roll (Pix4D namespace Metashape
  reads) instead of the ignored XMP-GPano:Pose* tags, via a bundled
  firemapper.ExifTool_config (stock exiftool can't write that namespace).
- Add session_map.metashape_ypr(): pitch 0 = nadir, +90 = forward, so
  thermal -> 0, cam25 -> ~25, cam45 -> ~45, with aircraft attitude and the
  platform sweep folded in (decomposed from the shared camera geometry).
- Write a Metashape/Pix4D reference CSV (GPS + YPR per frame) on every
  Embed run, as a robust alternative to the embedded tags.
- Fix camera detection to key off each image's immediate parent dir, so
  embedding a parent folder that groups several sessions no longer mis-tags
  every RGB frame as nadir (dropping the off-nadir mounting angle).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 17:06:41 +02:00
NoahC 9629a07399 Add FireMapper post-processing toolchain
EXIF/GPS embedding, session-wide thermal stretch, and an OpenStreetMap
view of trigger points and image footprints, wrapped in a Tkinter GUI.

- embed_metadata.py: write JSON sidecars into image EXIF/XMP, with true
  camera orientation (aircraft attitude + platform roll + mounting offset)
- stretch_thermal.py: rescale 16-bit thermal frames to a session-wide
  window (8-bit palettes), embedding GPS/orientation EXIF in the output
- session_map.py: shared camera geometry (orientation + oblique footprints)
- firemapper_gui.py: GUI with Embed / Thermal Stretch / Map tabs

Includes CLAUDE.md and an end-user manual (manual.html). Capture data and
derived outputs (tens of GB) are git-ignored.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 09:39:54 +02:00