reconstruct_surface_stereo
— Oberflächenrekonstruktion mit kalibriertem Mehrbild-Stereoaufbau.
reconstruct_surface_stereo(Images : : StereoModelID : ObjectModel3D)
Der Operator reconstruct_surface_stereo
rekonstruiert eine
Oberfläche aus den Bildern Images
, welche vom
am Stereomodell StereoModelID
angehängten kalibrierten Kamerasetup
aufgenommen worden sind. Die rekonstruierte Oberfläche wird im
HALCON-3D-Objektmodell ObjectModel3D
zurückgegeben.
Die Zusammenfassung der notwendigen Vorbereitungsschritte:
Kalibriertes Kamerasetup erstellen oder einlesen
(mit calibrate_cameras
kann beispielsweise ein Mehrkamerasystem
kalibriert, mit create_camera_setup_model
erstellt und
konfiguriert werden).
Stereomodell mit create_stereo_model
unter Angabe der
Methode Method
='surface_pairwise' oder
'surface_fusion' erstellen (siehe 'Rekonstruktionsalgorithmus').
Parameter für die Bildrektifizierung mit
set_stereo_model_param
setzen und anschließend die
Bildpaare mit set_stereo_model_image_pairs
auswählen.
Umschließenden Quader mit set_stereo_model_param
konfigurieren (GenParamName
='bounding_box' ).
Stereomodellparameter für paarweise Rekonstruktion mit
set_stereo_model_param
konfigurieren.
Für Modelle mit Method
='surface_fusion' die
Parameter für den Fusionsalgorithmus mit
set_stereo_model_param
konfigurieren.
Bilder mit dem kalibrierten Kamerasetup aufnehmen und ins Bildarray
Images
packen.
Oberflächenrekonstruktion mit reconstruct_surface_stereo
durchführen.
Zwischenergebnisse mit get_stereo_model_object
und
get_stereo_model_object_model_3d
abfragen und analysieren.
Nachjustieren der Stereomodellparameter für Verbesserungen in
Qualität und Laufzeit mit set_stereo_model_param
.
Ein Kamerasetupmodell wird dem Stereomodell StereoModelID
bei seinem Erstellen mit create_stereo_model
angehängt. Das
Kamerasetup muss kalibrierte Information über die Kameras
enthalten, mit denen die Bilder in dem Bildarray Images
aufgenommen
worden sind: Das I.
Bild des Arrays entspricht der Kamera
mit Index I-1
des Kamerasetups; die Anzahl der Bilder muss
mit der Anzahl von Kameras im Setup übereinstimmen. Die Bilder in
Images
müssen eine statische Szene darstellen oder alle gleichzeitig
aufgenommen werden, ansonsten kann sich die Oberfläenrekonstruktion
als unmöglich erweisen.
Ein gut kalibriertes Kamerasetup ist die wichtigste Voraussetzung für eine
präse Oberflächenrekonstruktion. Die Kamerakalibrierung für ein
Mehrkamerasetup muss daher besonders sorgfältig durchgeführt werden.
HALCON bietet Kalibrierung von Mehrkamerasystemen mit dem Operator
calibrate_cameras
an. Das resultierende kalibrierte Kamerasetup kann
mit einem nachfolgenden Aufruf von get_calib_data
gelesen werden.
Sollten Kameraparameter und -posen über einen anderen Weg gewonnen worden
sein, so kann alternativ ein Kamerasetup mit dem Operator
create_camera_setup_model
erstellt werden.
Ein gut ausgewählter Satz von Bildpaaren (siehe
set_stereo_model_image_pairs
) spielt eine wichtige Rolle für die
allgemeine Qualität der Rekonstruktion. Einerseits werden Kamerapaare mit
kleinerem Abstand untereinander bevorzugt, weil sie sich besser für
binokulare Disparitätsalgorithmen eignen. Andererseits sollen die Paare
möglichst unterschiedliche Blickwinkel der Szene liefern, sodass, wenn
ein Paar einen bestimmten Bereich der Oberfläche nicht sieht,
dieser von einem anderen Paar abgedeckt wird. Es ist außerdem zu
beachten, dass die Laufzeit der paarweisen Rekonstruktion linear abhängig von
der Anzahl der Bildpaare ist. Man soll deswegen so viele Bildpaare wie nötig
und so wenig wie möglich auswählen, um einen Kompromiss zwischen
Vollständigkeit der Oberfläche und Laufzeit des Operators finden zu können.
Dem Stereomodell wird ein umschließender Quader
zugeordnet; ein gültiger Quader ist eine wichtige Voraussetzung für die
Oberflächenrekonstruktion (siehe set_stereo_model_param
für weitere
Informationen). Der Rekonstruktionsalgorithmus braucht den
umschließenden Quader aus drei Gründen:
Erstens wird die Projektion des
Quaders in jedes Bild eines Bildpaares berechnet, um die Werte
für die Parameter MinDisparity
und MaxDisparity
des internen Aufrufs von binocular_disparity
bzw.
binocular_disparity_ms
zu schätzen. Für den Fall, dass als Methode
binocular_disparity_mg
ausgewählt wurde, wird aus den berechneten
Werten eine geeignete Schätzung für die Parameter InitialGuess
und
InitialLevel
abgeleitet. Die automatische Schätzung wird für diese
Methode nur dann verwendet, wenn sie mit den Standardwerten für diese beiden
Parameter aufgerufen wird. Andernfalls werden die Werte benutzt, die der
Nutzer mit set_stereo_model_param
gesetzt hat.
Zweitens werden die standardmäßig gesetzten Werte für die Parameter der Fusionsmethode basierend auf dem umschließenden Quader berechnet. Sie werden bei einer Anpassung des umschließenden Quaders ebenfalls umgesetzt. Des Weiteren sollte der umschließende Quader sehr eng um das zu rekonstruierende Objekt gesetzt werden, um eine unnötige und oft sehr deutliche Erhöhung der Laufzeit zu vermeiden.
Drittens werden Oberflächenfragmente, welche außerhalb des Quaders liegen,
am Ende des Algorithmus von der Rekonstruktion herausgeschnitten.
Ein viel zu großer Quader kann dazu führen, dass MinDisparity
und
MaxDisparity
zu weit voneinander geschätzt werden, und damit den
internen Aufruf von binocular_disparity
,
binocular_disparity_ms
bzw. binocular_disparity_mg
und
demzufolge von reconstruct_surface_stereo
verlangsamen.
Ein viel zu kleiner Quader kann dazu führen, dass auch erwünschte Punkte aus
der Rekonstruktion herausgeschnitten werden.
Der Algorithmus wird versuchen, eine geschlossene Oberfläche zu rekonstruieren. Falls das Objekt nur von einer Seite aus betrachtet und rekonstruiert wird, legt normalerweise das entgegengesetzte Ende des umschließenden Quaders fest, wo das rekonstruierte Objekt abgeschnitten wird.
Die Stereomodellparameter der paarweisen Rekonstruktion vor den
Fusionsparametern gut zu setzen ist essentiell, da die paarweise
Rekonstruktion des Objekts als Input für den Fusionsalgorithmus dient.
Die Parameter werden bei set_stereo_model_param
genau beschrieben.
Großen Einfluss hat die Wahl der 'disparity_method' .
Die Objekte in der beobachteten Szene sollen auch bestimmte
Oberflächeneigenschaften aufweisen, um die Rekonstruktion zu
ermöglichen. Erstens soll die Oberfläche Lambertsche Eigenschaften
aufweisen, d.h. die Beleuchtung der Oberfläche erscheint konstant
unabhängig vom Blickwinkel. Zweitens sollte die Oberfläche
ein ausreichendes Muster aufweisen, das möglichst keine wiederholenden
Fragmente hat.
get_stereo_model_object
liefert Zwischenergebnisse der
Rekonstruktion, wie rektifizierte, Disparitäts- und Scorebilder.
get_stereo_model_object_model_3d
kann für Modelle mit
Method
='surface_fusion' benutzt werden, um das Ergebnis
der paarweisen Rekonstruktion anzuzeigen. Der Absatz "Problembehandlung bei
der Konfiguration des Stereomodells" erklärt, wie die Zwischenergebnisse
benutzt werden können.
Der Operator reconstruct_surface_stereo
führt mehrere paarweise
Stereorekonstruktionen durch und fügt die Ergebnisse anschließend zusammen.
Die Bildpaare dieser paarweisen Rekonstruktion sind in StereoModelID
als Kamerapaare des zugehörigen kalibrierten Kamerasetups gesetzt.
Für jedes Bildpaar werden die Bilder zunächst rektifiziert, bevor intern
einer der Operatoren binocular_disparity
,
binocular_disparity_mg
oder binocular_disparity_ms
aufgerufen wird.
Die Disparitätsinformation wird weiter durch einen internen Aufruf von
disparity_image_to_xyz
in Punkte im Koordinatensystem der
from
-Kamera umgewandelt.
Im nächsten Schritt werden die Punkte in das allgemeine Koordinatensystem des
an StereoModelID
angehängten Kamerasetups transformiert und in einer
Punktwolke zusammen mit den rekonstruierten Punkten aus den anderen
Bildpaaren gespeichert.
Falls für das Stereomodell der Typ 'surface_pairwise' gewählt wurde
(siehe create_stereo_model
), wird die so erhaltene Punktwolke
direkt in
ObjectModel3D
zurückgegeben. Für jeden Punkt wird der Normalenvektor
durch das Legen einer ausgleichenden Ebene durch die benachbarten 3D-Punkte
berechnet.
Im Gegensatz zu surface_normals_object_model_3d
werden die
benachbarten Punkte aber nicht in 3D, sondern einfach in 2D bestimmt,
indem die in den X-, Y- und Z-Koordinatenbildern benachbarten Punkte
verwendet werden. Der Normalenvektor jedes 3D-Punktes wird nun auf den
Normalenvektor der entsprechenden Ebene gesetzt.
Für jeden rekonstruierten 3D-Punkt wird das Qualitätsmaß seiner
Disparität als erweitertes Attribut mit abgespeichert.
Zusätzlich dazu ist ein
Subsampling der transformierten Koordinatenbilder möglich.
Wenn nur ein Bildpaar bearbeitet wird und keine Punktvermaschung
stattfindet, speichert reconstruct_surface_stereo
das Attribut
'xyz_mapping'
im ObjectModel3D
. Dieses Attribut
liefert die Zuordnung einzelner rekonstruierter 3D-Punkte zu den
Bildkoordinaten des ersten Bildes aus dem Paar und ist eine
Voraussetzung, um Operatoren wie segment_object_model_3d
oder
object_model_3d_to_xyz
(mit Type
='from_xyz_map' )
aufzurufen. Es ist zu beachten, dass, wenn mehrere Bildpaare bearbeitet
werden, das Attribut nicht mehr mitgeliefert wird. Dies liegt daran, dass
einzelne 3D-Punkte aus unterschiedlichen Bildpaaren stammen. Damit ist
die Zuordnung zu allgemeinen Bildkoordinaten nicht mehr möglich. Ob das
Attribut im Objekt gespeichert wurde, kann mit
get_object_model_3d_params
mit
GenParamName
='has_xyz_mapping' abgefragt werden.
Die rekonstruierte Punktwolke
ObjectModel3D
kann in einem Nachverarbeitungsschritt vermascht werden.
Für Stereomodelle vom Typ 'surface_pairwise' wird nur der
Poisson-basierte Vermaschungsalgorithmus unterstützt, der sich durch ein
Setzen des Parameters 'point_meshing' auf den Wert
'poisson' einschalten lässt.
Dieser Algorithmus generiert eine sogenannte wasserdichte Vermaschung, d.h.
auch Regionen, welche keine Punktinformation enthalten, werden von der
Vermaschung bedeckt.
Falls für das Stereomodell der Typ 'surface_fusion' gewählt wurde, wird die resultierende Punktwolke der paarweisen Rekonstruktion noch weiter verarbeitet. Ziel ist es, eine möglichst glatte und trotzdem formtreue Oberfläche zu erhalten. Dazu wird der umschließende Quader gesampelt und jedem Sample-Punkt ein Distanzwert zu einer sogenannten Isosurface (bestehend aus Punkten mit Distanzwert 0) zugewiesen. Die endgültigen Distanzwerte (und somit die Isosurface) erhält man durch Minimierung einer Fehlerfunktion basierend auf den paarweise rekonstruierten Punkten. Dadurch erreicht man eine Fusion der paarweisen Einzel-Rekonstruktionen (siehe das an zweiter Stelle der Referenzen erwähnte Paper).
Die Berechnung der Isosurface kann in set_stereo_model_param
mit
den Parametern 'resolution' , 'surface_tolerance' ,
'min_thickness' und 'smoothing' beeinflusst werden.
Der Abstand zwischen Abtastpunkten im umschließenden Quader (in jeder
Koordinatenrichtung) wird mit dem Parameter 'resolution'
eingestellt.
Der Parameter 'smoothing' reguliert die 'Unruhe' der
Distanzfunktion, indem er die zwei Terme der Fehlerfunktion zueinander
gewichtet:
Datentreue gegenüber der ursprünglichen Punktwolke aus der paarweisen
Rekonstruktion einerseits und Totalvariation der Distanzfunktion
andererseits.
Der gewünschte Wert des Parameters für einen bestimmten Datensatz muss durch
Ausprobieren gefunden werden. Zu kleine Werte für diesen Parameter führen
dazu, dass die Oberfläche viele Ausreißer enthält. Dies ist sogar dann der
Fall, wenn die Oberfläche deswegen große Sprünge aufweist. Zu große Werte
hingegen führen dazu, dass der Algorithmus sich nicht mehr auf die
Eingangspunktwolke, welche durch die paarweise Rekonstruktion erstellt wurde,
stützt.
Datentreue gegenüber der ursprünglichen Oberfläche aus der paarweisen
Rekonstruktion wird nicht im gesamten umschließenden Quader betrachtet,
sondern nur in Sichtkegeln von den Kameras zur paarweise rekonstruierten
Oberfläche.
Ein Abtastpunkt in einem solchen Kegel wird als sicher außerhalb des Objekts
(vor der Oberfläche) oder sicher innerhalb des Objekts (hinter der
Oberfläche) angesehen bezüglich dieser Kamera, wenn sein Abstand zur
ursprünglichen Oberfläche einen bestimmten Wert übersteigt, der durch
den Parameter 'surface_tolerance' gesetzt werden kann.
Die Länge des zu berücksichtigenden Sichtkegels einer Kamera hinter der mit
der paarweisen Rekonstruktion erstellten Oberfläche kann durch den
Parameter 'min_thickness' gesetzt werden (siehe auch
set_stereo_model_param
).
'min_thickness' darf nicht kleiner als
'surface_tolerance' werden.
(1) | (2) |
Die Punkte des in ObjectModel3D
zurückgegebenen Objektmodells
werden auf der Isofläche extrahiert, auf der die Distanzfunktion Null ist.
Die Normalen werden aus dem Gradienten der Distanzfunktion berechnet.
Für die Methode 'surface_fusion' müssen zwar mehr Parameter
eingestellt werden als für rein paarweise Rekonstruktion, die Nachbearbeitung
der erzeugten Punktwolke wird aber meist stark vereinfacht. Besonders
Ausreißerunterdrückung, Glättung, gleichmäßiges Subsampling und Füllen von
Löchern kann mit dieser Methode in hoher Qualität erreicht werden. Dasselbe
gilt für die mögliche Vermaschung der rekonstruierten Punktwolke, siehe
den nächsten Absatz. Zu beachten ist auch, dass der Algorithmus versuchen wird, eine
geschlossene Oberfläche
zu rekonstruieren. Falls das Objekt nur von einer Seite aus betrachtet und
rekonstruiert wird, legt normalerweise das entgegengesetzte Ende des
umschließenden Quaders fest, wo das rekonstruierte Objekt abgeschnitten wird.
Die Methode 'surface_fusion' kann deutlich langsamer als einfache
paarweise Rekonstruktion sein, was vor allem vom Parameter
'resolution' beeinflusst wird.
Die rekonstruierte Punktwolke
ObjectModel3D
kann in einem Nachverarbeitungsschritt vermascht
werden. Für Stereomodelle vom Typ 'surface_fusion' wird der Algorithmus
'marching tetrahedra' verwendet, welcher durch ein Setzen des erwähnten
Parameters auf den Wert 'isosurface' aktiviert wird.
Dabei ist zu beachten, dass das Objektmodell in ObjectModel3D
bei
eingeschalteter Vermaschung mehr Punkte aufweist also ohne diese Option.
Dies ist auch bei gleichbleibender Auflösung der Fall.
Es ist möglich, das mit reconstruct_surface_stereo
rekonstruierte
3D-Objektmodell mit Farbinformationen aus den Eingabebildern zu versehen.
Die Berechnung der Farbinformation erfolgt mit der in
set_stereo_model_param
gewählten Methode (siehe dortige Auflistung).
Jeder 3D-Punkt erhält einen Farbwert bestehend aus einem Rot-, Grün-, und
Blaukanal, die im ausgegebenen 3D-Objektmodell ObjectModel3D
als Attribute mit den Namen 'red' , 'green' und
'blue' gespeichert werden.
Diese Attribute können zum Beispiel in der Prozedur
visualize_object_model_3d
mit
GenParamName
= 'red_channel_attrib'
,
'green_channel_attrib'
und 'blue_channel_attrib'
benützt
werden. Die Attribute können auch mittels get_object_model_3d_params
abgerufen werden oder mittels select_points_object_model_3d
oder anderen Operatoren, die erweiterte Attribute verwenden,
weiterverarbeitet werden. Für den Fall, dass zur
Rekonstruktion Grauwertbilder verwendet werden, so wird der Farbwert in den
drei Kanälen auf denselben Wert gesetzt.
Falls Mehrkanalbilder verwendet werden, so wird für die Rekonstruktion des
3D-Objektmodells lediglich der erste Kanal verwendet. Die verbleibenden
Kanäle werden ausschließlich zur Bestimmung der Farbinformation verwendet.
Falls bei der Rekonstruktion ein Stereomodell vom Typ
'surface_fusion' verwendet wurde, so werden Punkte rekonstruiert,
die keine direkte Korrespondenz zu Punkten im Bild haben. Diese Punkte sind
somit unsichtbar, da sie von keiner Kamera aus gesehen werden.
Diese 3D-Punkte erhalten ebenfalls Farbinformationen, indem ihnen der Farbwert
ihres nächsten sichtbaren Nachbarns zugewiesen wird. Im Normalfall ist
diese Berechnung nicht sehr zeitaufwändig und kann aktiviert bleiben.
Es kann jedoch passieren, dass der Wert für den Parameter
'resolution' viel zu fein für die vorliegende Bildauflösung
eingestellt wurde. Dadurch werden sehr viele unsichtbare 3D-Punkte
rekonstruiert. Dies führt dann zu einer sehr zeitaufwändigen
Nachbarschaftssuche und damit zu einer stark erhöhten Laufzeit.
In diesen Fällen sollte entweder der Parameters
'resolution' angepasst werden oder die Bestimmung der Farbwerte
für unsichtbare Punkte deaktiviert werden. Dies lässt sich realisieren, indem
man den Wert des Parameters 'color_invisible' über einen Aufruf
von set_stereo_model_param
auf 'false' setzt. In diesem Fall
werden die Farbwerte von unsichtbaren Punkten auf 255 gesetzt.
Eine richtige Vorbereitung eines Stereomodells ist nicht immer einfach. Bitte halten Sie sich an obenstehenden Ablauf. Wenn die Rekonstruktionsergebnisse nicht befriedigend sind, können die folgenden Verbesserungsmaßnahmen versucht werden:
Wenn der
'persistence' -Modus des Stereomodells eingeschaltet ist
(Aufruf von set_stereo_model_param
mit
GenParamName
='persistence' ), speichert der
nachfolgende Aufruf von reconstruct_surface_stereo
ikonische Zwischenergebnisse, welche zusätzliche Informationen zur
Verfügung stellen. Diese Zwischenergebnisse können mit
get_stereo_model_object
und
get_stereo_model_object_model_3d
abgefragt werden.
Wenn das Kamerasetup mit calibrate_cameras
kalibriert
worden ist, speichert dieser Operator auch Qualitätsinformationen,
z.B. in Form von Standardabweichungen im
Kamerasetupmodell ab. Das dem Stereomodell angehängte
Kamerasetupmodell kann mit dem Operator
get_stereo_model_param
und
GenParamName
='camera_setup_model' abgefragt werden,
die Kameraparameter-Standardabweichungen danach mit dem
Operator get_camera_setup_param
.
Ungewöhnlich hohe Werte der Standardabweichungen können auf eine
schlechte Kamerakalibrierung hindeuten.
Mit eingeschaltetem 'persistence' -Modus
lassen sich die rektifizierten Bilder jedes Bildpaares inspizieren.
Sie werden vom Operator get_stereo_model_object
mit dem entsprechenden Kameraindexpaar [From, To]
im
Parameter PairIndex
und 'from_image_rect' bzw.
'to_image_rect' im ObjectName
zurückgegeben.
Die Bilder deuten auf eine gute Rektifizierung hin, wenn alle
markanten Objektmerkmale in derselben Zeile beider Bilder erscheinen.
Auch eine Diskrepanz in der Größenordnung von nur einigen Zeilen
ist ein klarer Hinweis dafür, dass die Kalibrierung nicht optimal
ist.
Der umschließende Quader sollte sehr eng um das zu rekonstruierende Objekt bzw.
das relevante Volumen gesetzt sein.
Der Algorithmus benutzt die Projektion des Quaders in jedes Bild jedes
Bildpaares, um die Werte für die Parameter MinDisparity
und
MaxDisparity
des internen Aufrufs von
binocular_disparity
bzw. binocular_disparity_ms
zu
schätzen. Diese Werte können mit get_stereo_model_param
abgefragt werden.
Für den Fall, dass als Methode binocular_disparity_mg
ausgewählt
wurde, wird aus den berechneten Werten eine geeignete Schätzung für
die Parameter InitialGuess
und InitialLevel
abgeleitet.
Diese können mit set_stereo_model_param
aber auch überschrieben
werden.
Mit eingeschaltetem 'persistence' -Modus
lassen sich das Disparitäts- und das Maßbild jedes Bildpaares
inspizieren.
Sie werden vom Operator get_stereo_model_object
mit dem
entsprechenden Kameraindexpaar [From, To]
im Parameter
PairIndex
und 'disparity_image' bzw.
'score_image' im ObjectName
zurückgegeben.
Wenn beide Bilder erhebliche Mängel aufweisen (z.B. die tatsächliche
Form der aufgenommenen Oberfläche lässt sich im Disparitätsbild gar
nicht erkennen), müssen die Parameter, die den internen Aufruf
des binocular_disparity
steuern (d.h. alle
Stereomodellparameter, die mit dem Präfix 'binocular_'
beginnen; siehe set_stereo_model_param
), angepasst werden,
bis eine Verbesserung erreicht wird.
Eine Alternative dazu stellt die Wahl einer alternativen Methode zur
Berechnung der Disparitäten dar. HALCON stellt dabei neben dem bereits
erwähnten internen Aufruf von binocular_disparity
auch die
die beiden anderen Methoden binocular_disparity_mg
und
binocular_disparity_ms
zur Verfügung. Diese Verfahren zeichnen
sich beispielsweise durch eine Berechnung von Disparitäten in texturlosen
Bereichen aus, sind aber in den meisten Fällen etwas langsamer als die
auf Kreuzkorrelation basierende Methode.
Allerdings kann es auch für diese beiden Verfahren nötig sein, eine an
die Anwendung spezifische Anpassung der Parameter vorzunehmen. Je nach
gewähltem Verfahren kann der Nutzer die Parameter mit dem Präfix
'binocular_mg_' bzw. 'binocular_ms_' setzen, bis eine
Verbesserung erzielt wurde.
Eine ausführliche Beschreibung der Methoden und ihrer Parameter findet
sich in binocular_disparity
bzw. binocular_disparity_mg
oder binocular_disparity_ms
.
Wenn das mit get_stereo_model_object_model_3d
inspizierte
Ergebnis der paarweisen Rekonstruktion nicht weiter verbessert werden
kann, kann begonnen werden, die Fusionsparameter anzupassen. Für ihre
Beschreibung siehe auch set_stereo_model_param
.
In manchen Fällen ist die paarweise Rekonstruktion des Objekts kaum
erkennbar, kann aber vom Fusionsalgorithmus noch zu einem vernünftigen
Ergebnis verarbeitet werden.
In jedem Fall sollte die paarweise Rekonstruktion genug Punkte als Input
für die Fusion erzeugen.
Um die Laufzeit zu verbessern, können die folgenden Verbesserungsmaßnahmen ausprobiert werden:
Der umschließende Quader sollte sehr eng um das zu rekonstruierende Objekt bzw. das relevante Volumen gesetzt sein. Andernfalls wird die Laufzeit unnötig und - für die Methode 'surface_fusion' - drastisch erhöht.
Der Stereomodellparameter 'rectif_sub_sampling' (siehe
set_stereo_model_param
) steuert den Abtastfaktor im
Rektifikationsschritt. Ein Faktor > 1.0 mindert die Auflösung
der rektifizierten Bilder im Vergleich zu den originalen Bildern.
Damit wird der nachfolgende interne Aufruf der ausgewählten
Disparitätsmethode wesentlich beschleunigt; allerdings sinkt die
Bild- bzw. Rekonstruktionsauflösung. Der Parameter
'rectif_interpolation' kann auch eine Rolle bezüglich der
Geschwindigkeit im Rekonstruktionsschritt spielen, ist dabei
aber eher weniger wichtig.
Das Ziel ist ein Kompromiss zwischen der Vollständigkeit der
Oberflächenrekonstruktion und der Laufzeit.
Im Stereomodell können drei verschiedene Methoden zur Berechnung der
Disparitätsbilder gesetzt werden. Je nachdem, welche dieser Methoden
ausgewählt wurde, steht dem Stereomodell ein spezieller Parametersatz
zur Verfügung, der ein präzises Anpassen der Methode an den verwendeten
Datensatz ermöglicht.
Ist die Methode binocular_disparity
gewählt, so können nur die
Parameter, deren Name mit dem Präfix 'binocular_' beginnen,
gesetzt werden. Für die Methode binocular_disparity_mg
müssen
die Parameter mit dem Präfix 'binocular_mg_' und für die
Methode binocular_disparity_ms
die Parameter mit dem Präfix
'binocular_ms_' verwendet werden.
Parameter bei Verwendung von binocular_disparity
NumLevels
, MaskWidth
, MaskHeight
,
Filter
, SubDisparity
Jeder dieser Parameter von binocular_disparity
hat einen
entsprechenden Stereomodellparameter, dessen Name mit dem
Präfix 'binocular_' beginnt. Diese Parameter haben auch
Einfluss auf die Laufzeit. Daher kann
ein richtiges Anpassen dieser Parameter die Laufzeit des Operators
verbessern.
Parameter bei Verwendung von binocular_disparity_mg
GrayConstancy
, GradientConstancy
,
Smoothness
, InitialGuess
, MGSolver
,
MGCycleType
, MGPreRelax
, MGPostRelax
,
InitialLevel
, Iterations
,
PyramidFactor
Jeder dieser Parameter von binocular_disparity_mg
hat einen
entsprechenden Stereomodellparameter, dessen Name mit dem
Präfix 'binocular_mg_' beginnt. Diese Parameter haben neben
einer Auswirkung auf das Ergebnis auch Einfluss auf die Laufzeit.
Daher kann eine richtige Anpassung dieser Parameter die Laufzeit des
Operators beeinflussen.
Parameter bei Verwendung von binocular_disparity_ms
SurfaceSmoothing
, EdgeSmoothing
,
ConsistencyCheck
, SimilarityMeasure
,
SubDisparity
Jeder dieser Parameter von binocular_disparity_ms
hat einen
entsprechenden Stereomodellparameter, dessen Name mit dem
Präfix 'binocular_ms_' beginnt. Diese Parameter haben neben
einer Auswirkung auf das Ergebnis auch Einfluss auf die Laufzeit.
Daher kann eine richtige Anpassung dieser Parameter die Laufzeit des
Operators beeinflussen.
Neben der Anpassung des Abtastschrittes ist es auch möglich, Punkte
aufgrund ihres berechneten Qualitätsmaßes von der 3D-Rekonstruktion
auszuschließen. Dazu sollten zuerst mit Hilfe eines Aufrufs von
get_stereo_model_object
unter Verwendung von
GenParamName
= 'score_image'
die Maßbilder für die
Disparitätswerte abgefragt werden. Der Nutzer kann anhand der Verteilung
dieser Werte nun entscheiden, ob Disparitäten unterhalb einer bestimmten
Schwelle von der Rekonstruktion ausgeschlossen werden sollen. Dies lässt
sich über das Setzen des Parameters
GenParamName
= 'binocular_score_thresh'
im Operator
set_stereo_model_param
bewerkstelligen.
Wenn Punkte aufgrund ihres Qualitätsmaßes von der Rekonstruktion
ausgeschlossen werden, kann die Laufzeit leicht verbessert werden, da
nicht mehr der komplette Datensatz weiterverarbeitet werden muss.
Da, wie eingangs erwähnt, für jeden 3D-Punkt das berechnete Qualitätsmaß
als zugehöriges Punktattribut mit abgespeichert wird, können auch nach
dem Aufruf von reconstruct_surface_stereo
noch Punkte aufgrund
ihres Qualitätsmaßes von der Punktwolke entfernt werden. Dies hat
den Vorteil, dass ein erneutes Aufrufen von
reconstruct_surface_stereo
nicht nötig ist. Allerdings muss die
Punktwolke während der Rekonstruktion im Gesamten berechnet werden, was
eine höhere Laufzeit zur Folge hat.
Für die Methode 'surface_pairwise' kann ein größerer
Abtastschritt der X-,Y-,Z-Daten im letzten
Rekonstruktionsschritt verwendet werden, indem
GenParamName
='sub_sampling_step' mit
set_stereo_model_param
gesetzt wird. Damit werden die
rekonstruierten Punktwolken deutlich dünner, was ihre
Nachbearbeitung beschleunigt.
Die Methode 'surface_fusion' kann durch Erhöhen des Parameters 'resolution' deutlich beschleunigt werden.
Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.
Images
(input_object) singlechannelimage-array →
object (byte)
Bildarray, das von dem dem Stereomodell angehängten kalibrierten Kamerasetup aufgenommen wurden.
StereoModelID
(input_control) stereo_model →
(handle)
Handle des Stereomodells.
ObjectModel3D
(output_control) object_model_3d →
(handle)
Handle der rekonstruierten Oberfläche.
create_stereo_model
,
get_calib_data
,
set_stereo_model_image_pairs
get_stereo_model_object_model_3d
M. Kazhdan, M. Bolitho, and H. Hoppe: „Poisson Surface Reconstruction.“
Symposium on Geometry Processing (June 2006).,
C. Zach, T. Pock, and H. Bischof: „A globally optimal algorithm for robust
TV-L1 range image integration.“
Proceedings of IEEE International Conference on Computer Vision (ICCV 2007).
3D Metrology