Antwort auf Frage 1 aus Ihrem Qualifikationstest. Von : Menno RubinghDatum: 15.09.2011 -------------------------------------------------------------------------- NB: Dieser Text is ISO-8859-1 plain text, formatiert für viewing mit einem MONOSPACE font. Notation: ^ = Superscript T = Transpose. Beispiel: v^T = transpose von Vektor v. -------------------------------------------------------------------------- Gesehene Literatur: Trucco & Verri, 1998, _Introductory Techniques for 3-D Computer Vision_ Cyganek & Siebert, 2009, _An Introduction to 3D Computer Vision Techniques and Algorithms_ ISBN 978-0-470-01704-3 Wöhler, 2009, _3D Computer Vision: Efficient Methods and Applications_ ISBN 978-3-642-01731-5 INHALT 0 - Übersicht über diesen Text 1 - Calibrated stereo 2 - Uncalibrated stereo 3 - Das Finden von Korrespondenzen ------------------------------------------------------------------------------ 0 -- ÜBERSICHT ÜBER DIESEN TEXT ------------------------------------------------------------------------------ 3D-Stereorekonstruktion bedeutet dass man die 3D-Position von Punkten in einer 3D-Szene feststellt aus Aufnahmen der 3D-Szene die gemacht wurden aus 2 oder mehr unterschiedlichen Kamerapositionen. Bei der Einfachsten, und m.E. auch genauesten (most accurate), Art der 3D-Stereorekonstruktion werden die Kameras fest aufgestellt, und werden die Kameras vorher völlig kalibriert (d.h. sowohl die intrinsic parameters als auch die Position und Orientierung aller einzelnen Kameras relativ zum Welt-Koordinatensystem werden vorher festgestellt). Abschnitt 1 erklärt wie diese "calibrated stereo" funktioniert. Es gibt aber auch Verfahren für 3D-Stereorekonstruktion mit vorher nicht kalibrierten, oder vorher nur teilweise kalibrierten, Kameras. In jedem dieser Verfahren werden, aus gefundenen Korrespondenzen, zugleich mit der 3D-Szene auch die für die Rekonstruktion benötigten parameters festgelegt (nämlich: die intrinsic parameters, und die _relative_ Position und Orientierung der Kameras zu einander). Abschnitt 2 legt dar was ich bis jetzt über diese (teilweise) unkalibrierten stereo-Verfahren verstanden habe. Alle 3D-Stereorekonstruktion beruht auf das Finden von Korrespondenzen zwischen den Abbildungen der 3D-Szene gemacht aus den unterschiedlichen Kamerapositionen. Das finden dieser Korrespondenzen, das vermute ich der fehleranfälligste Schritt in 3D-Stereorekonstruktion ist, behandle ich in Abschnitt 3. Probleme (und Lösungswege) beschreibe ich in jedem Abschnitt separat, nämlich unter dem Thema wo das jeweilige Problem spielt. ------------------------------------------------------------------------------ 1 -- CALIBRATED STEREO ------------------------------------------------------------------------------ "Calibrated stereo" bedeutet dass man die Kameras deren Aufnahmen man zur 3D-Stereorekonstruktion benutzt, vorher völig kalibriert hat. (Dadurch dass man mit jeder Kamera eine Aufnahme macht eines bekannten "calibration rig", das sich auf einer bekannten Position und Orientierung befindet relativ zu dem Koordinatensystem relativ zu der man die 3D Szene vermessen möchte.) D.h. von jeder Kamera sind ihre intrinsic parameters bekannt, und auch ihre Position und Orientierung relativ zu einem "bekannten" Koordinatensytem in der 3D Welt. Bei "calibrated stereo" reichen 2 Kameras aus. Die Kameras sind fest aufgestellt; und sie sind neben einander aufgestellt (ähnlich wie die 2 Augen eines Menschen). Die 3D-Szene wird zugleich von den beiden Kameras fotografiert. Die Aufnahmen der zwei Kameras werden dann abgeglichen: d.h. in den zwei Aufnahmen werden Bild-Punkte gefunden die (wahrscheinlich) die Abbildung sind des gleichen Punktes in der 3D-Szene (siehe Abschnitt 3). Jede gefundene Korrespondenz besteht also aus einem Punkt P1 auf der Bildfläche der Kamera 1, und einem Punkt P2 auf der Bildfläche der Kamera 2. Für jede Korrespondenz berechnet man dann folgende zwei Linien im 3D-Raum: Linie L1 = die Linie durch P1 und das optische Zentrum von Kamera 1, Linie L2 = die Linie durch P2 und das optische Zentrum von Kamera 2. Die 3D Position des 3D-Szenenpunktes das zu dieser Korrespondenz gehört ist der Schnittpunkt dieser 2 Linien. Jede gefundene Korrespondenz liefert also die 3D Position eines Punktes in der 3D-Szene. Für alle Arten von 3D-Stereorekonstruktion gilt noch folgendes: Die Distanz t zwischen den zwei Kameras sollte nicht zu klein sein und nicht zu groß. Bei zu kleiner t ist die Tiefen-Auflösung schlecht; aber bei zu großer t wird es schwieriger, die Bilder der zwei Kameras abzugleichen (zu matchen). [Ausweg aus diesem Widerspruch ist m.E. dass man die Szene aus mehr als 2 Kamerapositionen fotografiert: Entfernt liegende Kamerapositionen liefern gute Tiefen-Auflösung, und die zwischenliegenden Kamerapositionen erlauben das matching zwischen den weitest-entfernten Kamerapositionen.] ------------------------------------------------------------------------------ 2 -- UNCALIBRATED STEREO ------------------------------------------------------------------------------ Es gibt aber auch Verfahren für 3D-Stereorekonstruktion wobei man Kameras benutzen kann die vorher nicht, oder nur teilweise, kalibriert sind. Zur Überschaubarkeit folge ich die Klassifizierung von Trucco&Verri (p. 161-170) die die folgenden Fälle unterscheiden: Fall 1: Die intrinsic parameters (focal length usw.) aller Kameras sind bekannt, aber von keiner Kamera sind die extrinsic parameters (= Position und Orientierung des Kamera-Koordinatensystems relativ zur 3D Szene) bekannt; Fall 2: Weder die intrisic noch die extrinsic parameters der Kameras sind bekannt. >>> Fall 1: Nur die intrinsic parameters bekannt In diesem Fall reichen (wie bei calibrated stereo) 2 Kameras aus um 3D-Rekonstruktion machen zu können. Man geht hier so vor, dass zunächst aus einer Menge Korrespondenzen einige Parameter-Werte bestimmt werden die noch fehlen um überhaupt irgendeine Art 3D-Rekonstruktion machen zu können: Das sind die translation t und die Rotation R der Kamera-Koordinatensystemen der zwei Kameras relativ zu einander. Man führt dazu nach einander die folgenden Schritte aus: A- Bestimmen der fundamental matrix F aus K >= 8 Korrespondenzen, über den Eight-Point-Algorithm. (Trucco&Verri, p. 155-156.) [Note 1] B- Berechnen der essential matrix E aus F. Dies ist möglich, weil die matrices M{int,1} und M_{int,2} der intrinsic parameters der beiden Kameras bekannt sind. C- Aus E ableiten des translation vector t und der Rotationsmatrix R. (Trucco&Verri, p. 164-165.) Die jetzt bekannte t und R erlauben es, eine 3D-Stereorekonstruktion zu machen für alle gefundenen Korrespondenzen. Dabei kann man jedoch nur die 3D-Position der Szenenpunkte feststellen relativ zum Kamera-Koordinatensystem eines der Kameras (wovon man den genauen Bezug relativ zur 3D-Szene nicht kennt). Und es gibt noch eine weitere Einschränkung, nämlich: die 3D-Stereo- rekonstruktion ist in diesem Fall, ohne zusätzliche Information, nur möglich "up to an unknown scale factor", d.h. der Maßstab der rekonstruierten 3D-Szene ist unbekannt. Der Grund dafür ist dass die fundamental und essential matrices F und E Beziehungen sind zwischen einerseits einem Punkt im image von Kamera 1 und andererseits einem Punkt in image von Kamera 2, wobei diese Punkte spezifiziert werden in homogenen Koordinaten (im Sensor-Koordinatensystem für F, und im Kamera-Koordinatensystem für E). Wegen der homogenen Koordinaten sind F und E nur festgelegt up to a scalar factor. Dieser unbekannte scalar factor bewirkt dass der translation vector t in Schritten A,B,C nur festgelegt werden kann up to an unknown scale factor (Trucco&Verri, p. 164). Die Länge von t ist der Abstand zwischen den zwei Kameras ("base line"), und ist der Maßstab bei der 3D-Rekonstruktion. Dies bedeutet dass man mit diesem nur als Richtung bekannten t, ohne weitere Information, nur Rekonstruktion machen kann "up to an unknown scale factor". Dieser "unknown scale factor" lässt sich jedoch bestimmen wenn man den Abstand kennt zwischen zwei der erkannten 3D-Punkten (für "erkannt" siehe Abschnitt 3). Dazu würde es also z.B. ausreichen wenn man in der 3D-Szene zwei gut erkennbare "Kalibrierpunkte" aufnehmen kann mit einem bekannten Abstand dazwischen, oder wenn die Szene gut erkennbare Objekte enthält mit einer bekannten Größe (z.B. Autos). Am Ende dieses Abschnittes behandle ich einige Probleme die auftreten im Eight-Point-Algorithm (benutzt in Schritt A oben). >>> Fall 2: Kameras völlig unkalibriert Für Fall 2 behaupten Trucco&Verri (p. 161-170) dass dort nur Rekonstruktion möglich sei "up to an unknown, global projective transformation"; dies würde m.E. die Rekonstruktion für die meisten praktischen Zwecke sinnlos machen. Wöhler, p. 32-40, fasst jedoch einigermaßen ausführlich einen Ansatz zusammen aus Hartley & Zisserman, 2003, _Multiple View Geometry in Computer Vision_, der Wöhler "metric self-calibration" nennt, und dessen Ziel es laut Wöhler ist, diese unbekannte projective transformation festzustellen. Einfacher gesagt, besteht dieser Ansatz darin, dass aus einer Menge Korrespondenzen (gefunden in der 3D-Szene) zugleich die 3D-Szene _UND_ auch die intrinsic parameters abgeleitet werden (Wöhler p. 7-8). Der Name "self-calibration" bedeutet, dass zugleich auch die intrinsic parameters festgestellt werden (entweder in expliziter oder in impliziter Form). Die Vorgehensweise bei self-calibration ist ähnlich zu einer normalen Kalibrierung, und erfordert wieder Minimierung der Abweichung zwischen Messwerten und Modell-Vorhersage. Fazit für Fall 2 ist daher m.E. dass dort, über den Mehraufwand der self-calibration, in prinzip auch Rekonstruktion möglich ist "up to an unknown scale factor", und ohne Bezug zu einem Koordinatensystem in der 3D-Welt -- d.h. genau wie in Fall 1. Den (sehr interessanten) Ansatz von Hartley & Zisserman genauer zu studieren habe ich leider noch keine Zeit gefunden. Sicher scheint mir, dass sie unmöglich eine _genauere_ Rekonstruktion liefern kann als Fall 1 (oder als kalibrierte Rekonstruktion). Wöhler p. 35 lässt mich befürchten, dass metric self-calibration möglicherweise _mehr_ als 2 Aufnahmen der 3D Szene erfordern könnte aus unterschiedlichen Kamerapositionen. >>> Fazit über uncalibrated stereo insgesamt Ich vermute dass es für viele Anwendungen ausreicht, eine 3D Szene zu rekonstruieren, und unwichtig ist, die Position oder Orientierung der Szene festzustellen relativ zu einem bekannten Koordinatensystem in der 3D-Welt. Für solche Anwendungen scheint mir Fall 1 sehr praktisch: Das Kalibrieren der intrinsic parameters ist relativ einfach und unafwendig (geht gemäß Zhang 2000 mit einem "handheld" planaren calibration rig ohne Bezug zu einem festen 3D-Welt-Koordinatensystem); und man erspart sich die genaue Postitionierung eines Kalibriermusters (die man benötigt hätte zur Feststellung der extrinsic parameters). >>> Probleme im Eight-Point-Algorithm Der Eight-Point-Algorithm wird benutzt fürs bestimmen der fundamental matrix F aus K >= 8 Korrespondenzen, in dem Fall 1 wobei die intrinsic parameters der beiden Kameras bekannt sind. Einige der Probleme die in diesem Eight-Point-Algorithm auftreten sind folgende: [Note 2] (1) Die K Korrespondenzen woraus F abgeleitet wird sollten keine "degenerate configurations" bilden (Trucco&Verri, p. 155). Bei einer degenerate configuration ist die Berechnung numerisch instabil und die berechnete F nutzlos. Es geht hier darum, dies in der Berechnung zu detektieren. Das ist, wie auch bei Kalibrierung, auch hier m.E. wieder möglich in dem man in der SVD-decomposition die man sowieso braucht (Trucco&Verro, p. 155-156) überprüft ob es mehr als nur eine near-zero singular value gibt. Wenn das der Fall ist, dann sollte die Berechnung zurückgeben dass aus den Korrespondenzen keine sinnvolle F abgeleitet werden kann. (2) False matches, d.h. image-Punkte die einander Zugeordnet wurden aber nicht Abbildung desselben 3D-Szenenpunktes sind. Lösung: Wenn es mehr als die minimale Anzahl von 8 Korrespondenzen gibt, ist es möglich die false matches automatisch zu erkennen, nämlich über die RANSAC Methode (random sample consensus) (Gyganek&Siebert, p.49-54). Das funktioniert wie folgt: Man wählt random 8 der Korrespondenzen aus, und berechnet daraus einen fundamental matrix F. Dann berechnet man fur jede der restlichen Korrespondenzen eine real Zahl d (siehe unten) die bewertet wie gut die Korrespondenz passt zum Modell F. Die Korrespondenzen wofür d größer ist als ein Schwellenwert dTh (siehe unten) ordnet man ein als outliers (false matches) relativ zu dem Modell F. Obiges wiederholt man einige Male, mit unterschiedlichen Mengen von 8 Korrespondenzen. Die F wofür man unter den restlichen Korrespondenzen die wenigsten outliers zählt, ist die beste F; und man verwirft die Korrespondenzen die outliers sind relativ zu dieser F. Eine geeignete Bewertungs-Zahl d kann man m.E. wie folgt berechnen. Gegeben eine Korrespondenz {P1,P2} zwischen einen Punkt P1 im image der Kamera 1, und einen Punkt P2 im image der Kamera 2. Zunächst werden beide Punkte P1 und P2 umgerechnet von Sensor- Koordinaten (= Pixel-Koordinaten) nach Kamera-Koordinaten (= im Kamera-Koordinatensystem der jeweiligen Kamera). Das umrechnen ist möglich weil wir die intrinsic parameters der beiden Kameras kennen. Sensor-Koordinaten für P1 und P2 sind in den Berechnungen unten unerwünscht weil das die unten berechtenen Abstände verzerren könnte. Mit P1 und P2 in homogenen Koordinaten müsste dann gelten: P1^T E P2 = 0, oder P1^T L1 = 0 wo L1 = E P2 die epipolar line ist in image 1 die korrespondiert mit Punkt P2 in image 2. Die essential matrix E ist bekannt aus E = M_{int,2}^T F M_{int,1} (wir kennen die intrinsic parameters). Dann den Abstand d1 berechnen, in image plane 1, zwischen P1 und L1 (d.h. Abstand zwischen Punkt und Linie in 2D Fläche). Ähnlich kann man auch den Abstand d2 berechnen, in image plane 2, zwischen P2 und der Linie L2 = F^T P1. Als Bewertungs-Zahl d, der bewertet wie gut die Korrespondenz {P1,P2} dem Modell F folgt, könnten z.B. geeignet sein: d = d1, oder d = d2, oder d = d1 + d2, oder auch d = d1^2 + d2^2 (wo ich vermute das letztere die Beste sein dürfte). Für den benötigten Schwellenwert dTh sollte man dann nehmen: den kleinsten Wert der einen richtigen match (keinen false match) noch durchlässt wenn man in P1 und L1 (und P2 und L2) diejenige Abweichungen einbezieht die man wegen Meßungenauigkeit erwarten kann. (3) Im Eight-Point-Algorithm (wie beschrieben in Trucco&Verri, p. 155-156) wird F dadurch bestimmt dass eine "purely algebraic error measure" minimiert wird, die keine physische Bedeutung hat. Wie dies auch bei Kalibrierung der Fall war, wird dies (m.E. zu recht) kritisiert von Wöhler (p. 31). Lösung: Genau wie bei Kalibrierung, sollte man die gemäß Trucco&Verri, p. 155-156, bestimmte F nur als initial guess benutzen für eine anschließende Optimierung wobei man eine physisch sinnvolle error measure minimiert. Wöhler p. 31 schlägt die folgende error measure vor: Eg = SUM [ d1^2 + d2^2 ] (Gleichung U1) wo d1 = Abstand in image 1 zwischen Punkten P1 und P1e d2 = Abstand in image 2 zwischen Punkten P2 und P2e P1, P2 = Gemessene Korrespondenz-Punkte P1e, P2e = Estimated Korrespondenz-Punkte und wo summiert wird über alle Korrespondenzen. Wöhler berichtet dass Hartley & Zisserman (2003, _Multiple View Geometry in Computer Vision_) die estimates P1e und P2e wie folgt nehmen: P1e = M_{ext,1} pW (Gleichung U2a) P2e = M_{ext,2} pW (Gleichung U2b) wo pW = 3D scene point, in Kamera-Koordinatensystem von Kamera 1, in homogenen Koordinaten M_{ext,1} = Matrix die pW abbildet auf image plane 1 M_{ext,2} = Matrix die pW abbildet auf image plane 2 +- -+ M_{ext,1} = | I 0 | , I = 3x3 identity matrix +- -+ 0 = 3x1 zero vector +- -+ M_{ext,2} = | R t | , R = unknown 3x3 rotation matrix +- -+ t = unknown 3x1 translation vector. P1, P2, P1e, P2e sind hier stets in homogenen Koordinaten. Und wichtig ist dass P1, P2, P1e, P2e -- genau wie in Problem (2) oben -- auch hier stets spezifiziert sind in Kamera-Koordinaten (in den Kamera-Koordinatensystemen von Kamera 1 und 2), und nicht in Sensor-Koordinaten, damit in den d1 und d2 keine Verzerrungen auftreten. [Note 3] Die einfache Form von M_{ext,1} kommt daher weil die pW spezifiziert werden im Kamera-Koordinatensystem von Kamera 1. Dies bewirkt auch, dass es eine sehr einfache Beziehung gibt zwischen der essential matrix E und den "Blöcken" R und t aus M_{ext,2} : Wenn E definiert wird so dass P2^T E P1 = 0, dann gilt E^T = R^T S oder E = - S R, wobei S = cross product matrix für vector t. Die unknowns sind: alle unabhängige Parameter in R und t, und alle Koordinaten der 3D scene points pW die gehören zu den in Betracht genommenen Korrespondenzen (wo die pW im Kamera-Koordinatensystem von Kamera 1). Der Fehler Eg ist nicht-linear in diesen unknowns, so dass nicht- lineare Minimierung eingesetzt werden muss, d.h. Levenberg-Marquard. Für die nicht-lineare Minimierung benutzt man als initial guess: die essential matrix E = M_{int,2}^T F M_{int,1} mit der F gefunden aus dem Eight-Point-Algorithm, und die Punkte pW die zugleich gefunden wurden aus dem Eight-Point-Algorithm. Output der nicht-linearen Minimierung sind: ein verfeinerter E (woraus direkt der verfeinerte F folgt), und verfeinerte 3D scene points pW. ------------------------------------------------------------------------------ 3 -- DAS FINDEN VON KORRESPONDENZEN ------------------------------------------------------------------------------ Das Finden von Korrespondenzen ist der Grundlage (basis, foundation) worauf alle 3D-Stereorekonstruktion beruht. Und ich würde vermuten, dass es auch der fehleranfälligste Schritt ist in 3D-Stereorekonstruktion. Damit die Formulierungen übersichtlich bleiben, gehe ich in diesem Abschnitt davon aus, dass 2 fest aufgestellte Kameras benutzt werden. Die Aufnahmen die gleichzeitig von Kameras 1 und 2 gemacht werden bezeichne ich als "Bild 1" und "Bild 2" (respectively). Beim finden der Korrespondenzen geht es darum, die _Orte_ P1 und P2 in den zwei Aufnahmen zu finden die (wahrscheinlich) die Abbildung des gleichen 3D-Szenenpunktes sind. Das finden der Korrespondenzen beruht notwendigerweise auf das Vergleichen von (kleinen) Bild-Ausschnitten aus den zwei Kameras auf Ähnlichkeit; es ist eine Suche nach die Positionen P1 und P2 in den Aufnahmen von Kamera 1 und 2 (respectively) wo ein Bildausschnitt rund P1 (in Bild 1) die größte Ähnlichkeit hat zu einem Bildausschnitt rund P2 (in Bild 2). Für das verwendete Ähnlichkeits-Maß zwischen den zwei Bildausschnitten gibt es viele Möglichkeiten, z.B. Korrelation, oder Ecken/Kanten-erkennung. >>> Problem: 2D-Suche Das größte Problem beim Finden von Korrespondenzen ist, denke ich, dass es zeitaufwendig ist, über die ganze 2D-Flache eines Bildes zu suchen nach einer Korrespondenz für eine gegebene Position in dem anderen Bild. Die wichtigste Hilfe dabei, die Suche nach Korrespondenzen zu beschleunigen ist der epipolar constraint: Gegeben eine Position P1 in Bild 1, muss die dazugehörende Position P2 in Bild 2 liegen auf der epipolar line in Bild 2 festgelegt durch P1. Diese epipolar line kann man berechnen wenn man die relative Position und Orientierung der beiden Kameras kennt, oder wenn man die fundamental matrix F kennt (letzteres ist eine schwächere Bedingung weil F nur bekannt sein kann up to a multiplicative factor). Das beschränkt die Suche nach P2 zu einer 1D-Suche. [ Das gleiche gilt natürlich auch umgekehrt: Gegeben P2, muss die zugehördende P1 liegen auf der epipolar line in Bild 1 festgelegt durch P2 in Bild 2. ] Um die Suche noch weiter zu vereinfachen, ist es ist auch möglich, die beiden Bilder so zu verzerren dass in beiden Bildern alle mögliche epipolar lines horizontal laufen. Diese Verzerrung (die man "rectification" nennt) besteht darin, dass man für jede Kamera das Bild berechnet, dass aufgenommen wäre wenn die Kameras eine "canonical" Orientierung gehabt hätte, d.h. mit der Bildfäche parallel zur base line (= Linie zwischen den optical centers der beiden Kameras). Sinn dieser rectification ist dass die 1D-Suche nach Korrespondenzen vereinfacht wird. Ich vermute, dass für viele Algorithmen für matching zwischen Bildausschnitten diese Vereinfachung wirklich sehr hilfreich sein würde. >>> Problem: Occlusion In fast allen 3D Szenen gibt es 3D-Szenenpunkte die nur von einer der zwei Kameras gesehen werden, und von der anderen Kamera nicht sichtbar sind. Dieses Dies nennt man "occlusion". Das Problem bei occlusion ist dass es für einige Punkte in Bild 1 keine Korrespondenz gibt in Bild 2, und/oder umgekehrt. Das bedeutet m.E. dass die Korrespondenz-Suche nicht einfach nur die beste Korrespondenz P2 in Bild 2 suchen kann (für einen gegebenen Punkt P1 in Bild 1), sondern eigentlich auch erkennen können müsste ob es überhaupt in Bild 2 eine Korrespondenz für P1 gibt. Folgdende Wege zur Lösung sind mir eingefallen. Jeder Ansatz liefert dabei einen Beitrag, und die Ansätze sollten m.E. am besten alle zugleich angewendet werden. A- Bei der Korrespondenz-Suche könnte man als output nicht nur die Positionen {P1,P2} der besten gefundenen Korrespondenz zurückgeben, sondern auch eine real Zahl, die ausdrückt wie gut die Übereinstimmung (der match) ist. [Diese Zahl wird sowieso schon von dem verwendeten Bildausschnitt-matching-Verfahren geliefert.] Das erlaubt es, Korrespondenzen zu verwerfen -- d.h. zu schliessen dass es für einen gegebenen P1 oder P2 keine Korrespondenz gibt im anderen Bild -- wenn die matching-Qualitätszahl schlechter ist als einen Schwellenwert. Ich denke dass jede praktische 3D-Rekonstruktion mindestens eine einfache Art dieser filtering braucht Eine weiterführende Idee wäre, dass die Korrespondenz-Suche für einen gegebenen Punkt P1 in Bild 1 nicht nur _eine_ Korrespondenz P2 in Bild 2 zurückgibt, sondern eine Menge; und dabei für jeden P2 die matching-Qualitätszahl. Die Gesamt-output der Korrespondenz-Suche für zwei Aufnahmen besteht dann aus eine Liste mit Einträgen { P1, P2, Qualitätszahl }, wo auch Einträge mit gleichen P1 und P2 vorkommen. Diese Liste wäre dann input für eine Weiterverarbeitung W, die dann als ihre output schliesslich die endgültige 3D-Stereorekonstruktion liefert. Sinn dieser Idee ist dass der Weiterverarbeitung W Information zur verfügung steht über die ganze 3D-Szene (in contrast zu eine Korrespondenz-Suche, die eine Korrespondenz P2 sucht für einen gegebenen P1, und die nur lokale information sieht). Eine Idee für eine vielleicht mögliche Art Weiterverarbeitung W gebe ich unten in Punkt C. B- Constraints einbeziehen. (Siehe unten, unter heading "False matches"). Die einzigen "harten" constraints scheinen mir der epipolar contraint und der uniqueness constraint. Wie unten unter "False matches" geschrieben, behandelt man m.E. die anderen "constraints" besser als Ingredienten die einfliessen in der Berechnung der matching-Qualitätszahl. D.h. diese constraints haben dann ihren Einfluss Über die Auswertung dieser matching-Qualitätszahl. C- Vielleicht wäre eine einfache Art Modellierung der rekonstrierten 3D-Welt möglich, wobei man die 3D-Szene modelliert als einer Menge von möglichst großen und "einfachen" 3D-Objekten (große, glatte Oberflächen). Dabei würde man z.B. so vorgehen können dass man beim Aufbau des 3D-Modells inkrementell vorgeht, nämlich die Korrespondenzen mit der besten matching Qualität zuerst. Ich "ahne" irgendwie dass es dann vielleicht möglich sein könnte, beim späteren hinzufügen von weniger guten Korrespondenzen zu detektieren wenn so eine spätere Korrespondenz schlecht passt in dem bis dann aufgebauten 3D-Modell. Eine Variante wäre, ähnlich vorzugehen wie beim RANSAC-Verfahren, in Abschnitt 2 (heading "Probleme im Eight-Point-Algorithm"), d.h. aufgrund der besten Korrespondenzen mehrere alternative 3D-Modelle durchzuprobieren; und dann schliesslich das einfachste Modell auszuwählen und alle (wenig guten) Korrespondenzen zu verwerfen die nicht in diesem Modell passen. [ So eine 3D-Modellierung würde auch dazu beitragen, "Lücken" zu füllen in der 3D-Rekonstruktion, sowohl Lücken verursacht durch occlusion als auch durch fehlende Textur (siehe unten). ] >>> Problem: False matches Eine "false match" ist eine detektierte aber falsche Korrespondenz {P1,P2}, d.h. wobei P1 und P2 in Wirklichkeit nicht die Abbildung des gleichen 3D-Szenenpunktes sind. Das erste Werkzeug, false matches zu verhindern, ist das Einbeziehen von constraints für P1 und P2. Der wichtigste nicht-triviale constraint ist der epipolar constraint (siehe oben unter heading "Problem: 2D-Suche"), die die zu einer P1 gehördenen P2 einschränkt auf einer Linie in Bild 2 (und umgekehrt). Das heißt dass man eine Korrespondenz {P1,P2} wo P1 und P2 nicht in der gleichen epipolar plane liegen ohne weiteres verwerfen kann. Cyganek & Siebert, p. 66-71, geben eine lange Liste weiterer constraints. Der einzige weitere harte" constraint scheint mir die triviale "uniqueness constraint" (für gegebener P1 in Bild 1 kann es höchstens nur eine zugehörende P2 in Bild 2 geben und umgekehrt). [Note 4] Alle anderen von Cyganek&Siebert aufgelisteten constraints beleuchten unterschiedliche Weisen wie die gematchten Bildausschnitte ähnlich sein müssten wenn sie tatsächlich Abbildungen des gleichen 3D-Szenenpunktes sind. Diese Art constraint kann man m.E. wahrscheinlich am besten implementieren direkt in den Routinen die zwei Bildausschnitten machen, nämlich in der Implementierung der Berechnung der matching-Qualitätszahl, und in der Berechnung der zugehörenden Schwellenwerte. Unwahrscheinliche (d.h. unähnliche Bildausschnitte) matches würden dadurch dann automatisch verworfen werden. [Bemerkung: Möglich nützlich scheint es mir auch, aus einem Bildausschnitt- matching-Verfahren nicht nur eine Qualitätszahl zurückzugeben, sondern einen Vektor von mehreren Qualitätszahlen, nämlich eine Zahl für jedes unterschiedliche matching-criterion. Dies erlaubt es, separate Schwellenwerte zu handhaben für die unterschiedlichen matching criteria.] In Korrespondenz-Suche (und/oder bei der Auswertung von Korrespondenzen) würde ich auch immer sicherstellen und automatisch überprüfen wollen dass für jede Korresponzenz von Bild 1 nach Bild 2 (P1 in Bild 1 gegeben, P2 in Bild 2 gefunden), die gleiche Korrespondenz auch umgekehrt gefunden wird (P2 in Bild 2 gegeben, P1 in Bild 1 gefunden). Ein intelligenteres, RANSAC-ähnliches Verfahren (siehe Abschnitt 2, heading "Probleme im Eight-Point-Algorithm") fürs detektieren von false matches ist nur dann möglich, wenn man ein fitting macht eines Modells auf die Korrespondenzen. [RANSAC war in Abschnitt 2 nur möglich weil die fundamental matrix als Modell auf die Daten gefittet wurde.] Unter heading "Problem: Occlusion" (Punkt C) nenne ich eine Idee dafür wie man für _alle_ gefundenen Korrespondenzen ein Modell fitten könnte. Der Vorteil den das bringt liegt nicht nur im so gefundenen Modell an sich, sondern m.E. vor allem darin, dass man aufgrund des Modells false matches detektieren kann. >>> Problem: Glatte Oberflächen ohne Textur Korrespondenzsuche beruht darauf, dass Bildausschnitte aus den zwei Bildern gematcht werden, d.h. auf Ähnlichkeit überprüft werden. Damit ein "match" erkannt werden kann, ist es notwendig dass die Bildausschnitte erkennbare "features" enthalten. Glatte Oberflächen ohne Textur enthalten keinerlei features, und sind daher m.E. unmöglich matchbar. Das bedeutet dass eine 3D-Szene die große Oberflächen ohne Textur enthält, in diesen Oberflächen große Lücken aufweisen wird in der 3D-Rekonstruktion. Für einen möglichen Ansatz, diese Lücken zu füllen greife ich wieder zurück auf meine Idee aus Punkt C in heading "Problem: Occlusion" oben, über das fitten eines 3D-Modells. >>> Problem: Specular surfaces Specular reflection ist Spiegelung in glatten Oberflächen, wie z.B. die hellen aufleuchtenden Stellen in der glatten Oberfläche eines 3D-Objekts wo das Licht aus Sonne oder aus artifiziellen Lichtquellen in die Kamera hineinreflektiert wird. Das Problem bei dieser Spiegelung ist dass diese hell Aufleuchtenden Stellen deutlich erkennbare features sind (die daher als Korrespondenz gut detektiert werden), und dass sie bei der 3D-Rekonstruktion nicht rekonstriert werden auf der Z-Position (Tiefe, Abstand zur Kamera) der spiegelnden Oberfläche, sondern auf einer weiter entfernt liegenden Z-Position -- genau wie bei einem Spiegel. Hier sollte man m.E. in Betracht ziehen dass auch ein Mensch diese Fehler macht in seiner 3D-Rekonstruktion : Der Mensch "sieht" in einem Spiegel nicht die Oberfläche des Spiegels, sondern sieht die gespiegelten Objekte, und rekonstruiert diese als sich befindend hinter der Spiegel-Oberfläche. Daher scheint es mir, dass bei _sehr starker_ specular reflection es auch bei computer vision Verfahren vielleicht erlaubt (oder vielleicht sogar erwünscht) sein könnte, sich wie der Mensch von der Spiegelung "tauschen zu lassen". Damit wäre das Problem beschränkt auf kleinere specular reflections in nicht extrem stark spiegelden Oberflächen. Dieses restliche Problem kann man einordnen als das finden von Ausreisser (outliers): Punkte wofür die rekonstruierte 3D-Position weitab liegt von der 3D-Position rekonstruiert für die benachbarten Bildpunkte -- oder sogar auch weitab liegt von der 3D-Position rekonstruiert für die meisten Bildpunkte im gesamtem Bild. Je weiter die reflektierte Lichtquelle entfernt ist, desto deutlicher ist der Ausreisser. Ich vermute dass in der Praxis viele 3D-Szenen so sind dass die Lichtquellen deutlich entfernt liegen von den Oberflächen worin sie sich spiegeln. Für Aussenaufnahmen bei Tageslicht ist das klar der Fall. Das würde die Ausreisser so deutlich machen dass nur ein sehr einfaches Modell dazu ausreicht (alle 3D-Szenenpunkte begrenzt zu einer 3D "bounding box" begrenzter Abmessungen), die Ausreisser wegfiltern zu können. Für Aufnahmen bei artifizieller Beleuchtung würde es ausreichen, falls es nicht möglich ist specular reflection ganz vorzubeugen (in dem man die Beleuchting ausschliesslich über indirektem "Streu-Licht" gestaltet), dass die zu vermessende 3D-Szene begrenzte Abmessungen hat, und dass die Lichtquellen deutlich entfernt von der 3D-Szene aufgestellt werden. Eine andere Idee für artifiziell beleuchteten Szenen ist: Die konstante Szene mehrmals fotografieren, bei unterschiedlichen Positionen der Lichtquellen. Für jede Lichtquellenposition die 3D-Rekonstruktion berechnen. Die rekonstruierten 3D-Szenenpunkte die zwischen den 3D-Rekonstruktionen nicht gleich sind, sind die specular reflections. ------------------------------------------------------------------------------ Anmerkungen ----------- [Note 1] Während Schritt A sind die epipoles noch nicht bekannt. Die bei Schritt A benutzten Korrespondenzen müssen daher gefunden werden ohne Hilfe von epipolar lines !, d.h. über 2D Suche. (Für epipolar lines, siehe Abschnitt 3.) Nach Schritt C sind die epipoles bekannt, wodurch ab dann das Finden von Korrespondenzen beschleunigt wird. Daher scheint es mir eine Überlegung wert, für Schritt A nur eine Untermenge der potentiell findbaren Korrespondenzen zu benutzen, nämlich nur die Korrespondenzen die am leichtesten zu detektieren sind. Weitere Korrespondenzen kann man dann (leichter) finden nachdem nach Schritt C die epipoles bekannt sind. Natürlich würde mann in Fall 1 auf jeden Fall die 3D Positionen berechnen für _alle_ gefundenen Korrespondenzen (sowohl die initiellen die man für Schritt A benutzt, als auch die später mit Hilfe der epipoles gefundenen). [Note 2] Weiter gibt es für Schritt A die zwei zu beachtende Sachen die in Trucco&Verri, p. 155-156, schon deutlich beschrieben werden: - Um numerische Instabilität vorzubeugen sollte die Matrix A (mit den Meßwerten, d.h. den Korrespondenzen) in Trucco&Verri p. 155 normiert werden. (Und die gefundene F muss dann nachher natürlich entsprechend "denormiert" werden.) - Die berechnete F sollte korrigiert werden so dass sie singular wird (mit nullspace 1-dimensional). SVD berechnen und den kleinsten singular value auf 0 setzen. [Note 3] Wöhler p. 31 benutzt Gleichungen U2a und U2b, mit matrices M_{ext,1} und M_{ext,2} wie von mir gegeben, und mit P1e und P2e in Sensor-Koordinaten, was mir ein Versehen scheint. [Note 4] Unter dem uniqueness constraint schreiben Cyganek & Siebert, p. 66, noch dass dieser constraint nicht gilt für "transparent objects". Ich vermute jedoch, dass durchsichtige 3D-Objekte in der Praxis wenig problematisch sein dürften. Grund: Ein Mensch das genau gleiche Problem, und "löst" es dadurch dass er die durchsichtigen Objekte eigentlich gar nicht "sieht". In computerisierte Stereorekonstruktion gelangt man, m.E., automatisch auf die gleiche Lösung -- d.h. durchsichtige Objekte verschwinden in der 3D-Rekonstruktion -- wenn man das logische Problem der mehrfachen Korrespondenzen für durchsichtige 3D-Objekte einfach ignoriert. [NB: Specular reflection von sonst unsichtbaren durchsichtigen 3D-Objekten mit glatten, spiegelnden Oberflächen ist ein völlig anderes Problem, das nichts mit Durchsichtigkeit zu tun hat. Der Mensch sieht hier auch nur die specular reflection, und nicht das durchsichtige Material.]