Wie man das Mondgeländerelief aus einem einzigen Bild extrahiert — eine experimentelle 2.5D-Pipeline
Zusammenfassung: Ich beschreibe ein Forschungsprojekt, das versucht, eine relative Höhenkarte der Mondoberfläche aus einer einzelnen Orbitalaufnahme zu schätzen. Ohne Stereoskopie, ohne maschinelles Lernen — nur klassische Schattenanalyse, Helligkeitsgradienten und georeferenzierte Daten.
Das Problem: 3D aus 2D
Jede Aufnahme der Mondoberfläche ist eine Projektion von 3D auf 2D. Die Höheninformation wird dabei „flachgedrückt“. Um sie wiederherzustellen, stehen uns einige Indizien zur Verfügung:
- Schatten — je länger der Schatten, desto höher das Objekt (bei bekannten Beleuchtungsparametern)
- Helligkeitsgradienten — abrupte Helligkeitsänderungen deuten auf Hänge hin
- Albedo — das Oberflächenmaterial verändert ebenfalls die Helligkeit, was die beiden obigen Punkte verkompliziert
Das Problem besteht darin, dass Albedo und Topographie miteinander verschränkt sind. Ein heller Fleck auf einem Bild kann eine Ebene aus hellem Regolith oder ein zur Sonne geneigter Hang sein. Eine vollständige Trennung aus einer einzelnen Aufnahme ist nicht möglich — das ist eine fundamentale physikalische Einschränkung. Das Projekt erkennt dies offen an und baut sein gesamtes Vertrauenssystem um diese Beschränkung herum auf.

Pipeline-Architektur
Der Code ist in 7 Stufen unterteilt, wobei jede Stufe ihr eigenes Diagnosebild erzeugt:
Stufe 1 — Schattenerkennung
Die Schattenmaske wird mit einer Perzentilmethode (Standard: die dunkelsten 15 % der Pixel) oder einer Standardabweichungsmethode generiert. Dies ist ein heuristischer Ansatz — dunkles Material kann fälschlicherweise als Schatten klassifiziert werden.
01_shadow_mask.png
Stufe 2 — Höhen aus Schatten
Aus der Schattenmaske werden Schattenlängen gemessen und in relative Höhen umgerechnet:
height = shadow_length_px × pixel_scale_m × tan(sun_elevation°)
Die Annahme ist, dass schattenspendende Objekte vertikal sind. Das ist eine Näherung, aber ausreichend für Felsen und Kraterränder.
02_shadow_length_map.png
03_shadow_height_map.png
Stufe 3 — Albedo-Karte
Der Algorithmus interpoliert die „erwartete“ Hintergrundhelligkeit aus sogenannten Inspect Boxes — kleinen Fenstern, die die Materialhelligkeit an bekannten geographischen Punkten abtasten. In Version 2.6 werden die Positionen dieser Fenster aus tatsächlichen Mondkoordinaten (Breite/Länge) aus QuickMap-Daten abgeleitet und nicht zufällig platziert.
04_albedo_reference_map.png
Stufe 4 — Helligkeitsnormalisierung
Die beobachtete Helligkeit wird durch die erwartete Albedo-Helligkeit geteilt, um den Einfluss der Topographie zu isolieren:
normalized = observed / expected_albedo
05_normalized_brightness.png
Stufe 5 — Gradienten
Auf der normalisierten Helligkeit werden räumliche Gradienten (Betrag und Richtung) berechnet. Ein starker Gradient weist auf einen Hang hin; die Gradientenrichtung gibt Aufschluss über die Hangneigung.
06_gradient_magnitude.png
07_gradient_direction.png ← HSV-Visualisierung: Farbton = Richtung
Stufe 6 — Vertrauenskarte (Confidence Map)
Das ist das Herzstück des Projekts. Die Vertrauenskarte kombiniert 5 unabhängige Komponenten:
| Komponente | Was sie misst |
|---|---|
| Shadow distance | Nähe zu Schattenkanten |
| Gradient | Stärke des Helligkeitsgradienten |
| Texture variance | Lokale Varianz (Textur) |
| Albedo stability | Nähe zu den Inspect Boxes |
| Failure penalty | Abzug für Bereiche, die grundsätzlich nicht analysierbar sind |
Endgültige Vertrauenskarte = gewichtete Summe der Komponenten × Abzug für fehlgeschlagene Regionen.
08_confidence_map.png ← Grün = hohes Vertrauen, Rot = niedrig
Stufe 7 — Endgültige Höhenkarte
Höhen aus Schatten und gradientenbasierte Hangneigungen werden kombiniert. In Bereichen mit niedrigem Vertrauen werden die Ergebnisse zum Median hin geglättet — um zu vermeiden, dass Rauschen als Gelände dargestellt wird.
09_height_map.png
10_height_map_confidence_overlay.png ← Höhen + Vertrauen als Deckkraft
Eingabedaten: QuickMap
Das Projekt verwendet Daten von QuickMap (LROC, Arizona State University):
- LROC-NAC-Bild — eine hochauflösende Orbitalaufnahme (~1 m/Pixel bei voller Auflösung)
- Region Data CSV — Messpunkte aus QuickMap mit: geographischen Koordinaten (Breite/Länge), Geländehöhe (TerrainHeight), Hangneigung (Slope), optischer Zusammensetzung und weiteren Parametern
Eine .vrt-Datei (GDAL Virtual Dataset) liefert die Georeferenzierungsmetadaten: Koordinatensystem, geographische Transformation und Pixelmaßstab.
Projektiterationen
Der Code durchlief drei Iterationen, wobei jede eine neue Schicht hinzufügte:
Iteration 2 — grundlegende Pipeline (Schatten + Gradienten + Vertrauenskarte)
Iteration 2.5 — Diagnoseschicht: Aufschlüsselung der Vertrauenskarte in 5 Komponenten, Gradientenhistogramm, Ausreißer-Overlay, Schatten-Gradienten-Interaktion. Ziel: „Vertraue ich der Pipeline aus den richtigen Gründen?“
Iteration 2.6 — echte Koordinaten: Inspect Boxes werden anhand von QuickMap-Daten positioniert statt zufällig. Breite/Länge → Pixel-Zuordnung über lineare Näherung (ohne kartographische Projektionskorrektur).
Iteration 3 (validate_iteration3.py) — Trendvalidierung: Vergleich der Gradientenrichtungen mit einem externen DEM (LOLA/LROC). Keine Optimierung — es wird nur die Frage beantwortet: „Sind die rekonstruierten Trends mit der tatsächlichen Topographie vereinbar?“
Was das Projekt nicht tut
Diese Liste ist ebenso wichtig wie die Funktionsliste:
- Erzeugt kein DEM — Höhen sind relativ, ohne absolute Referenz
- Verwendet kein maschinelles Lernen — jeder Schritt ist für Menschen nachvollziehbar
- Ist keine Photogrammetrie — keine Stereopaare, keine Triangulation
- Funktioniert schlecht auf Ebenen — einheitliche Flächen liefern kein topographisches Signal
- Trennt Albedo und Topographie nicht vollständig — das ist aus einem einzelnen Bild unmöglich
Ergebnisse und Validierung
Beim Test an einer beispielhaften Mondregion (7,63° N, 6,53° O), in voller LROC-NAC-Auflösung (1 m/px), unter Verwendung eines synthetischen DEM (kein Zugang zu LOLA während der Tests), klassifiziert die Validierung von Iteration 3:
- ca. 3,6 % der Bereiche mit hohem Vertrauen als übereinstimmend mit dem DEM-Trend
- ca. 17,7 % als nicht übereinstimmend
- den Rest: zu niedriges Vertrauen, um Schlussfolgerungen zu ziehen
Die Ergebnisse werden ehrlich berichtet — das Projekt versucht nicht, diese Zahlen zu erklären oder zu „reparieren“. Inkonsistenz ist Information, kein zu verbergender Fehler.
Potenzial und Anwendungen
Es lohnt sich, den breiteren Kontext der Daten zu erwähnen, auf die dieses Projekt zurückgreift.
Die von LROC NAC aufgenommenen Bilder der Mondoberfläche stellen die detaillierteste Kartierung der Oberfläche eines Himmelskörpers außerhalb der Erde dar. Bei einer Auflösung von ~1 m/Pixel entspricht jedes Pixel einem Quadratmeter Oberfläche — ein Detailgrad, der für keinen anderen Planeten oder Mond im Sonnensystem erreicht wird. Das Fehlen einer Mondatmosphäre eliminiert Unschärfe und optische Verzerrungen, was die Bildqualität zusätzlich erhöht.
QuickMap bietet auch eine 3D-Ansicht, die aus LOLA-Daten (LRO Laser Altimeter) rekonstruiert wird. Sie vermittelt ein erweitertes Bild der Geländeform, stellt die Topographie jedoch — ähnlich wie diese Pipeline — in begrenztem Umfang dar und ist keine vollständige, präzise Photogrammetrie.
Was sich noch daraus gewinnen ließe
Die zentrale einschränkende Prämisse dieses Projekts ist ein einzelnes Bild aus einem einzelnen Winkel. Wären zwei oder mehr Aufnahmen desselben Gebiets in vergleichbarer Auflösung und mit unterschiedlichen Beleuchtungswinkeln verfügbar, wüchsen die analytischen Möglichkeiten erheblich:
Befahrbarkeitsbewertung — Identifikation von Gelände mit minimaler Hangneigung und wenigen Felsbrocken, nützlich für die Routenplanung von Rovern.
Abschätzung der Regolith-Mächtigkeit — Schatten von Felsbrocken und ihre Beziehung zur Umgebung können auf die Tiefe der lockeren Oberflächenschicht hinweisen.
Gesteinsformationsanalyse — die Verteilung und Morphologie von Felsbrocken unter verschiedenen Beleuchtungswinkeln ermöglicht eine vorläufige lithologische Klassifikation.
All das ist derzeit noch Forschungsgebiet, kein fertiges Werkzeug. Aber der Ausgangspunkt ist außergewöhnlich gut: Die Daten sind öffentlich, kostenlos und von höchstmöglicher Qualität.
Code und Lizenz
Der Python-Code (~1.600 Zeilen, ohne externe KI-Frameworks) verwendet ausschließlich: numpy, opencv-python, scipy, matplotlib
Der Quellcode ist öffentlich auf GitHub verfügbar: github.com/MarcinSFox/Lunar_2.5D
Alle Schritte sind explizit und dokumentiert. Jede Stufe erzeugt ihr eigenes Diagnosebild, wodurch nachvollzogen werden kann, wo die Pipeline gut funktioniert und wo sie versagt.
Testdaten: beispielhafte Mondregion (~7,63° N, 6,53° O), LROC-NAC-Bild aus QuickMap, Maßstab ~1 m/px.
Ich betrachte dieses Projekt als Forschungsexperiment und Lernwerkzeug. Die Ergebnisse sind Hypothesen über die Geländeform, keine Messungen. Der Wert des Projekts liegt in der Transparenz der Methode und der expliziten Modellierung der Unsicherheit — nicht in der Genauigkeit der Ergebnisse.
