1 Punkte von GN⁺ 2025-08-24 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Line-Scan-Kameras eignen sich sehr gut dafür, bewegte Objekte wie Züge hochauflösend und ohne Verzerrungen aufzunehmen
  • Für die Bildverarbeitung werden verschiedene Algorithmen und Verfahren benötigt, etwa Erkennung von Regions of Interest, Geschwindigkeitsschätzung und Resampling
  • Maßnahmen zur Qualitätsverbesserung wie das Entfernen horizontaler und vertikaler Streifen sowie Rauschunterdrückung sind wichtig
  • Die Implementierung umfasst die Verarbeitung großer Datenmengen, den Einsatz von Python, numpy und verschiedene experimentelle Verbesserungen
  • Der Vergleich mit Beispielen von Line-Scan-Fotos anderer Fotografen kann zusätzliche Erkenntnisse liefern

Überblick über Line-Scan-Kameras

  • Eine Line-Scan-Kamera scannt Bilder mit einer oder zwei Pixelzeilen mit sehr hoher Geschwindigkeit
  • Die Kamera ist fest montiert, und während der Zug an ihr vorbeifährt, wird seine gesamte Form aufgezeichnet
  • Ein statischer Hintergrund wiederholt sich in allen vertikalen Spalten des Bildes, wodurch der charakteristische Streifeneffekt entsteht
  • Dieses Verfahren ermöglicht hochauflösende Fotos ohne Verzerrung über die gesamte Zuglänge hinweg und ist daher auch für Hobbys wie Zugmodellierung nützlich
  • Auch filmbasierte Strip-Kameras arbeiten nach einem ähnlichen Prinzip, unterscheiden sich jedoch dadurch, dass wegen Empfindlichkeitsproblemen die Filmgeschwindigkeit manuell angepasst werden muss

Kameraausrüstung

  • Verwendet wird das Modell [Alkeria Necta N4K2-7C] mit einem 4096×2 doppelten Bayer-Array-Bildsensor
  • Die Rohdaten werden als 16-Bit-Binärarray gespeichert
  • Die Aufnahmen entstehen in verschiedensten Umgebungen, darunter städtische U-Bahnen

Erkennung von Regions of Interest (ROI)

  • Bei langen Scans fallen große Mengen an Hintergrunddaten an, daher ist ein Algorithmus zur automatischen Erkennung bewegter Objektbereiche unverzichtbar
  • Durch die Kombination einer Energiefunktion (gradientenbasiert) mit maximalen Pixelwerten werden vertikale Strukturen (Bewegung) und horizontale Strukturen (Hintergrund) unterschieden
  • Das Bild wird in mehrere Chunks aufgeteilt, und für jeden Chunk wird anhand der 99. Perzentil-Energie ein Score berechnet
  • Chunks mit einem Score von mindestens dem 1,5-Fachen des Minimums gelten als Bereiche mit bewegten Objekten
  • Frühere Verfahren ließen sich nicht gut verallgemeinern; der aktuelle Ansatz arbeitet in unterschiedlichen Situationen effizienter

Geschwindigkeitsschätzung

  • Wenn sich das Motiv bewegt, führen Fehler bei der Geschwindigkeitsschätzung zu Verzerrungen, bei denen das Bild gestreckt oder gestaucht wird
  • Durch den Vergleich der beiden grünen Kanäle der Kamera wird für jeden Chunk die Bewegungsgeschwindigkeit berechnet
  • Für jeden Chunk werden kleine Verschiebungen von -7 bis +7 angewendet, anschließend wird aus dem Absolutwert der Kanalunterschiede ein Cost-Array erzeugt
  • Um einen Subpixel-Peak zu finden, wird eine gaußbasierte Interpolation im Stil von [mean shift] verwendet; per Spline wird die Gesamtänderung korrigiert
  • Die extrahierten Spline-Werte entsprechen dem Sample-Abstand in der ursprünglichen Zeitreihe und werden zur Korrektur der Bildverzerrung genutzt

Resampling

  • Entsprechend dem Spline werden die Sample-Positionen berechnet und daraus ein neues Bild extrahiert
  • Ausnahmefälle werden berücksichtigt, etwa Spiegelung bei negativem Spline oder Fehlerbehandlung bei Werten nahe 0
  • Für jede Sample-Position wird auch die Sample-Breite gespeichert; mit geeigneten Windowing-Funktionen wie dem Hann-Fenster wird die Anti-Aliasing-Leistung verbessert
  • Eine einfache Spaltenauswahl oder ein rechteckiges Fenster ist ungeeignet, da beim Upsampling grobe Artefakte entstehen

Demosaicing

  • Wegen des räumlichen Offsets des 2-Spalten-Bayer-Arrays ist ein benutzerdefiniertes Demosaicing mit bilinearer Interpolation erforderlich
  • Nach der Geschwindigkeitsschätzung werden per linearer Interpolation Effekte wie Fringing korrigiert
  • Aufgrund der Unterschiede zwischen den beiden grünen Kanälen könnte sogar eine bessere Vollfarbwiederherstellung möglich sein als bei einem normalen Bayer-Array

Entfernen vertikaler Streifen

  • Durch Clock-Jitter (stripes) und Änderungen der Motivhelligkeit entstehen vertikale Streifen im Bild
  • Mithilfe linearer Regression und gaußscher Gewichtung werden Streifen mit einer spaltenweisen Korrekturfunktion (iteratively reweighted least squares) korrigiert
  • Diese Korrekturfunktionen bilden eine mathematische Gruppenstruktur; um Drift bei kumulierter Korrektur zu vermeiden, wird ein banddiagonales lineares Gleichungssystem als Lösungsansatz erwogen
  • In der Praxis lässt sich hochfrequentes Rauschen auch mit exponentiellen Glättungsfiltern unterdrücken
  • Die Streifenkorrektur muss unbedingt vor der Geschwindigkeitsschätzung erfolgen

Rauschunterdrückung

  • Es wird ein patchbasiertes Verfahren zur Rauschkontrolle (block matching) eingesetzt, das die sich wiederholenden Texturen der Zugoberflächen aktiv ausnutzt
  • Dabei werden Feature-Vektoren von 3×3-Pixel-Patches verwendet, und das Rauschen wird durch gewichtete Mittelwerte innerhalb ähnlicher Patches reduziert
  • Je nach Signalstärke verbessert ein Vorverarbeitungsschritt mit Poisson-Verteilung (Wurzeltransformation) vor dem Vergleich die Leistung
  • Das bisherige Verfahren des Total-Variation-Denoising ist ungeeignet, da dabei zu viel Textur verloren geht
  • Dieses Verfahren hat den Nachteil eines hohen Rechenaufwands und geringer Geschwindigkeit

Korrektur der Schieflage (Skew)

  • Wenn die Kamera nicht vertikal ausgerichtet ist, wirkt das gesamte Bild leicht schief
  • Die Skew-Erkennung sollte nach der Geschwindigkeitsschätzung und vor dem endgültigen Resampling erfolgen, um Informationsverlust zu minimieren
  • Eine automatische Erkennung anhand vertikaler Strukturen ist z. B. per Hough-Transformation möglich

Farbkorrektur

  • Derzeit wird die Farbanmutung mit einer manuellen Korrekturmatrix angepasst
  • In der Praxis ist die Qualität, etwa bei natürlichen Hauttönen, bereits recht gut

Implementierungsdetails

  • Die gesamte Pipeline ist in Python und numpy implementiert
  • Wegen der großen Datenmengen (4096 Zeilen × mehrere hunderttausend Spalten) wurde zur Vermeidung von Speicherengpässen eine stufenweise Verarbeitung in Chunks gewählt
  • Da eine vollständige Speicherallokation auf einmal nicht praktikabel ist, werden die Daten in jeder Stufe teilweise verarbeitet und gespeichert

Erfahrungen bei der Implementierung

  • Es wurde versucht, AI-Tools für die Code-Implementierung einzusetzen, die Ergebnisse waren jedoch begrenzt
  • Häufig erzeugte die AI ineffizienten Code, etwa indem sie lineare Probleme mit unnötiger quadratischer Zeitkomplexität behandelte
  • Bei der Verarbeitung großer Arrays traten Speicherprobleme auf, etwa durch die unnötige Erzeugung vollständiger Masken
  • Bei manchen APIs, der Code-Strukturierung oder der Visualisierung mit Matplotlib konnte AI jedoch hilfreich zur Effizienzsteigerung beitragen

Beispiele für Line-Scan-Zugfotos anderer

Adam Magyar

  • [Adam Magyar] hat mit einer eigenen Schwarzweiß-Line-Scan-Kamera die Projekte "Stainless" und "Urban Flow" umgesetzt
  • Selbst in lichtarmen Umgebungen wie U-Bahn-Innenräumen erzielte er sehr saubere Ergebnisse
  • Für die Aufnahmeposition ist es wichtig, Flackern der U-Bahn-Beleuchtung zu vermeiden

KR64-Blog

  • Auf [kr64.seesaa.net] ist eine große Zahl verschiedener Line-Scan-Zugfotos aus ganz Japan veröffentlicht
  • Vermutlich basieren sie auf einer Film-Slit-Scan-Kamera und weisen eine sehr hohe Vielfalt und Qualität auf
  • Die Website ist wegen technischer Probleme oft nicht erreichbar, eine Kontaktaufnahme ist nicht möglich

Noch keine Kommentare.

Noch keine Kommentare.