Depth Estimation: Tiefe aus Bildern vorhersagen (Teil 2.2)

15.06.2025 · von Claude Widmer · 3 Min Lesezeit

Depth Estimation: Tiefe aus Bildern vorhersagen (Teil 2.2)

🏞️ Depth Estimation: Tiefe aus Bildern vorhersagen (Teil 2.2)

In diesem Teil meiner Serie geht es um ein zentrales Thema der Computer Vision: Depth Estimation – also die Schätzung von Tiefeninformationen aus 2D-Bildern. Ziel ist es, für jedes Pixel im Bild die Entfernung zur Kamera zu bestimmen. Das eröffnet ganz neue Möglichkeiten für die Analyse von Strassenszenen, die Kombination mit Segmentierungsergebnissen und die Entwicklung von Anwendungen wie 3D-Rekonstruktion, Navigation oder automatisierte Sicherheitsbewertungen.


🧠 Motivation & Bedeutung

Warum ist Depth Estimation so spannend? In klassischen Segmentierungsaufgaben erkennen Modelle wie YOLOv11n, welche Objekte im Bild sind und wo sie sich befinden. Aber: Sie wissen nichts über die räumliche Tiefe! Erst mit einer Tiefenkarte kann man z.B. beurteilen, wie weit ein Fussgänger von der Kamera entfernt ist, wie hoch ein Hindernis ist oder wie sich die Szene in 3D rekonstruieren lässt.

Anwendungsbeispiele:

  • Automatisierte Analyse von Schulwegen: Wie weit sind Hindernisse entfernt? Wo gibt es Engstellen?
  • 3D-Visualisierung und Augmented Reality
  • Navigation für autonome Fahrzeuge oder Roboter
  • Kombination mit Segmentierung für noch präzisere Analysen

🔬 Technischer Ansatz: Von Segmentierung zu Tiefe

Nach der erfolgreichen Segmentierung mit YOLOv11n (siehe letzter Blog) folgt nun die Tiefenschätzung. Ich verwende dafür das Modell LiheYoung/depth-anything-large-hf aus der HuggingFace-Transformers-Bibliothek. Dieses Modell basiert auf modernen Vision-Transformern und ist in der Lage, aus beliebigen RGB-Bildern hochaufgelöste Tiefenkarten zu berechnen.

🛠️ Pipeline im Detail

  1. Vorbereitung der Bilder:

    • Die Eingangsbilder stammen aus dem Mapillary-Datensatz und wurden bereits für die Segmentierung verwendet.
    • Die Bilder werden als RGB geladen und ggf. auf eine einheitliche Grösse skaliert.
  2. Tiefenschätzung:

    • Das Modell wird mit dem HuggingFace-Pipeline-Interface geladen:
    from transformers import pipeline
    pipe_v3 = pipeline("depth-estimation", model="LiheYoung/depth-anything-large-hf")
    • Für jedes Bild wird die Tiefenkarte berechnet und als NumPy-Array gespeichert.
  3. Invertierung & Normalisierung:

    • Da die Roh-Tiefenwerte oft invertiert sind (niedrige Werte = weit entfernt), werden sie umgerechnet, sodass grössere Werte grössere Tiefe bedeuten.
    • Ungültige Werte (z.B. Maskenbereiche) werden mit 9999 markiert und bei der Statistik ignoriert.
  4. Visualisierung:

    • Die Tiefenkarten werden mit einer Colormap (z.B. plasma) eingefärbt und als PNG gespeichert.
    • Zusätzlich werden Vergleichsbilder mit den Segmentierungsergebnissen und den Originalbildern erzeugt.
  5. Statistische Auswertung:

    • Für alle gültigen Tiefenwerte werden Minimum, Maximum, Mittelwert, Median und Standardabweichung berechnet.
    • Die Resultate werden für spätere Analysen gespeichert.

📊 Visualisierung & Vergleich

Ein wichtiger Teil der Arbeit ist der direkte Vergleich zwischen Originalbild, Segmentierung und Tiefenkarte. Dafür habe ich eine Pipeline entwickelt, die für jedes Bild ein Vergleichsbild mit allen drei Varianten erzeugt:

  • Originalbild
  • Tiefenkarte (Colormap)
  • Segmentierungsergebnis (YOLO)

Die Resultate werden als grosse Vergleichsbilder gespeichert und können direkt in einer Galerie betrachtet werden.

Vergleich Segmentierung & Depth


🔜 Ausblick: Was kommt als Nächstes?

Im nächsten Schritt plane ich, die Tiefeninformationen noch enger mit den Segmentierungsergebnissen zu verknüpfen. Ziel ist es, für jede erkannte Objektklasse (z.B. Fussgänger, Fahrzeuge, Strasse) die durchschnittliche Tiefe zu berechnen.

Technische Ideen für die nächsten Schritte:

  • Objektbasierte Tiefenstatistik: Für jedes Segment die mittlere und maximale Tiefe berechnen
  • Vergleich mit Ground Truth: Validierung der Tiefenkarten mit Referenzdaten

Claude 👨‍💻