binocular_disparity_ms — Berechnet die Disparität für ein rektifiziertes Stereobildpaar mit Hilfe
von Multi-Scanline-Optimierung.
binocular_disparity_ms(ImageRect1, ImageRect2 : Disparity, Score : MinDisparity, MaxDisparity, SurfaceSmoothing, EdgeSmoothing, GenParamName, GenParamValue : )
binocular_disparity_ms berechnet die Disparität zwischen
zwei rektifizierten Stereobildern ImageRect1 und
ImageRect2 mit Hilfe von Multi-Scanline-Optimierung. Das
resultierende Disparitätsbild wird in Disparity zurückgegeben.
Im Gegensatz zu binocular_distance_ms wird das Ergebnis nicht in
Abstandswerte umgerechnet.
Für diese Aufgabe können die drei Operatoren binocular_disparity,
binocular_disparity_mg und binocular_disparity_ms
verwendet werden. binocular_disparity liefert robuste Ergebnisse
in gut texturierten Bereichen, doch scheitert auf schwachen Texturen.
binocular_disparity_mg interpoliert schwach texturierte Bereiche,
doch glättet Disparitätssprünge. binocular_disparity_ms bewahrt
Disparitätssprünge und interpoliert teilweise.
Die Eingabeparameter ImageRect1 und ImageRect2 müssen
ein paar rektifizierter Stereobilder enthalten, d.h. korrespondierende
Punkte müssen in derselben Zeile liegen. Falls diese Annahme
nicht zutrifft, können die Bilder mit den Operatoren
calibrate_cameras, gen_binocular_rectification_map
und map_image rektifiziert werden.
Die Breiten von ImageRect1 und ImageRect2 können
sich unterscheiden, die Höhe muss jedoch übereinstimmen.
Für ein Pixel in ImageRect1
wird das homologe Pixel in ImageRect2 ausgewählt, indem
die entsprechende Zeile in ImageRect2 abgesucht wird
und beide Pixel basierend auf einem Ähnlichkeitsmaß gematcht werden.
Die Disparität ist die Anzahl der Pixel, welche ein Pixel
in ImageRect1 verschoben werden muss, um das homologe Pixel
in ImageRect2 zu erreichen.
Der Suchbereich wird durch den minimalen und maximalen Disparitätswert
MinDisparity und MaxDisparity festgelegt. Falls der
minimale und maximale Disparitätswert ein leeres Tupel sind, wird
der Suchbereich automatisch aus den Eingabebildern ImageRect1
und ImageRect2 berechnet.
Um aus dem Ähnlichkeitsmaß die Disparitäten zu berechnen,
werden die Zwischenergebnisse mit Hilfe einer Multi-Scanline-Methode
optimiert. Die Optimierung steigert die Robustheit
in schwach texturierten Bereichen ohne Disparitätssprünge zu glätten.
Die Optimierung wird durch die beiden Parameter
SurfaceSmoothing und EdgeSmoothing gesteuert.
SurfaceSmoothing steuert die Glattheit innerhalb von Oberflächen.
Hohe Werte unterdrücken Disparitätsdifferenzen von einem Pixel.
EdgeSmoothing steuert die Häufigkeit und die Form von Kanten.
Niedrige Werte lassen viele Kanten zu,
hohe Werte führen zu weniger und runderen Kanten.
Für beide Parameter liegt ein sinnvoller Wertebereich
üblicherweise zwischen 0 und 100. Sind beide Parameter
auf null gesetzt, wird keine Optimierung durchgeführt.
Die Berechnung der Disparitäten kann durch generische Parameter
gesteuert werden.
Die folgenden generischen Parameter GenParamName
und die entsprechenden Werte GenParamValue werde unterstützt:
Aktiviert einen optionalen Nachbearbeitungsschritt zur Erhöhung der
Robustheit. Auf 'true' gesetzt,
werden nur noch diejenigen Disparitätswerte zurückgegeben,
die übereinstimmend sowohl bei einer Suche eines Referenzmusters
von ImageRect1 in ImageRect2 als auch
von ImageRect2 in ImageRect1 gefunden werden.
Der Wert 'false' deaktiviert dieses Verhalten.
Werteliste: 'true', 'false'.
Default: 'true'.
Passt die Anpassung des grob-zu-fein-Ansatzes an Diskontinuitäten.
Um so höher der mit GenParamValue gesetzte Wert, desto
mehr Laufzeit wird beansprucht.
Wertevorschläge: 2, 3, 4.
Default: 3.
Bestimmt die zur Berechnung der Disparitäten verwendete Methode.
Folgende Parameter GenParamValue können dazu gesetzt werden:
'accurate': Verwendet die genauste Methode zur Berechnung, hat jedoch im Vergleich zu den weiteren Methoden höhere Laufzeit und Speicherverbrauch.
'fast':
Verwendet das grob-zu-fein-Schema zur Verbesserung
der Laufzeit. Dieses funktioniert ähnlich zu dem grob-zu-fein-Schema,
welches in binocular_disparity beschrieben wird.
Besonders für große Bilder und einen großen
Suchbereich der Disparitätswerte erfordert die 'fast' Methode
deutlich weniger Speicherplatz und ist deutlich schneller
als die 'accurate' Methode. Das grob-zu-fein-Schema
hat den weiteren Vorteil, dass es automatisch die Reichweite von
MinDisparity und MaxDisparity beim Durchlaufen
der Pyramide schätzt. Als Konsequenz müssen weder MinDisparity
noch MaxDisparity gesetzt werden. Allerdings sind die
Disparitätsbilder für die 'fast'-Methode weniger genau als für den
'accurate' Standardansatz. Insbesondere
bei starken Disparitätssprüngen ist die 'fast' Methode ungenauer.
'very_fast': Reduziert die Laufzeit noch weiter im Vergleich zu 'fast'. Dieser Ansatz geht jedoch von zahlreichen Annahmen aus, die zu einer Glättung der Disparitäten bei Diskontinuitäten führen können. Standardmäßig wird die Anzahl der Pyramidenstufen des grob-zu-fein-Schemas automatisch geschätzt. Es ist jedoch möglich, die Anzahl der Stufen explizit zu setzen (siehe 'num_levels').
Die Laufzeit des Operators verhält sich in etwa linear zur Bildbreite, zur Bildhöhe und zum Disparitätsbereich. Folglich sollte der Disparitätsbereich für große Bilder so klein wie möglich gewählt werden. Die Laufzeit der grob-zu-fein-Methode (wird verwendet für 'fast' oder 'very_fast'), verhält sich linear zur Bildbreite und zur Bildhöhe. Für kleine Bilder und kleine Disparitätsbereiche kann die Laufzeit der grob-zu-fein-Methode größer sein als die der 'accurate' Methode.
Werteliste: 'accurate', 'fast', 'very_fast'.
Default: 'accurate'.
Bestimmt GenParamValue die Anzahl an Pyramiden, die
beim grob-zu-fein-Schema verwendet wird.
Ist GenParamValue auf 'auto' gesetzt,
wird die Anzahl Pyramiden automatisch berechnet.
Wertevorschläge: 2, 3, 'auto'.
Default: 'auto'.
Legt das verwendete Ähnlichkeitsmaß fest. In den beiden Fällen 'census_dense' und 'census_sparse' basiert das Ähnlichkeitsmaß auf der Census-Transformation. Ein transformiertes Bild enthält für jedes Pixel Information über die Topologie der Intensitäten innerhalb eines Supportfensters.
'census_dense': Verwendet ein Fenster von 9 x 7 Pixeln und eignet sich besser für feine Strukturen.
'census_sparse': Verwendet ein Fenster von 15 x 15 Pixeln, von welchen jedoch nur ein Teil ausgewertet wird. Liefert robustere Ergebnisse in schwach texturierten Bereichen.
Werteliste: 'census_dense', 'census_sparse'.
Default: 'census_dense'.
Auf 'true' gesetzt, werden kontinuierliche Werte für die bisher ganzzahligen Disparitätswerte geschätzt. Der Wert 'false' schaltet dieses Verhalten aus.
Werteliste: 'true', 'false'.
Default: 'true'.
Die resultierende Disparität wird in dem einkanaligen Bild
Disparity zurückgegeben. Ein Qualitätsmaß
für jeden Disparitätswert wird in Score ausgegeben.
Es enthält das beste (niedrigste) Ergebnis
des optimierten Ähnlichkeitsmaßes eines Referenzpixels.
ImageRect1 (input_object) singlechannelimage → object (byte*) *erlaubt für Compute Devices
Rektifiziertes Bild von Kamera 1.
ImageRect2 (input_object) singlechannelimage → object (byte*) *erlaubt für Compute Devices
Rektifiziertes Bild von Kamera 2.
Disparity (output_object) singlechannelimage → object (real)
Disparität.
Score (output_object) singlechannelimage → object (real)
Güte der berechneten Disparität.
MinDisparity (input_control) integer → (integer)
Minimale erwartete Disparität.
Default: -30
Wertebereich:
-32768
≤
MinDisparity
≤
32768
Restriktion:
MinDisparity <= MaxDisparity
MaxDisparity (input_control) integer → (integer)
Maximale erwartete Disparität.
Default: 30
Wertebereich:
-32768
≤
MaxDisparity
≤
32768
Restriktion:
MinDisparity <= MaxDisparity
SurfaceSmoothing (input_control) integer → (integer)
Glättung von Oberflächen.
Default: 50
Wertevorschläge: 20, 50, 100
Restriktion:
SurfaceSmoothing >= 0
EdgeSmoothing (input_control) integer → (integer)
Glättung von Kanten.
Default: 50
Wertevorschläge: 20, 50, 100
Restriktion:
EdgeSmoothing >= 0
GenParamName (input_control) attribute.name(-array) → (string)
Parametername(n) für das Multi-Scanline-Verfahren.
Default: []
Werteliste: 'consistency_check', 'disparity_offset', 'method', 'num_levels', 'similarity_measure', 'sub_disparity'
GenParamValue (input_control) attribute.value(-array) → (string)
Parameterwert(e) für das Multi-Scanline-Verfahren.
Default: []
Wertevorschläge: 'accurate', 'fast', 'very_fast', 'census_dense', 'census_sparse', 'true', 'false', 'auto'
read_image (BaseballL, 'stereo/epipolar/baseball_l')
read_image (BaseballR, 'stereo/epipolar/baseball_r')
binocular_disparity_ms (BaseballL, BaseballR, Disparity, Score, \
-40, -10, 50, 50, [], [])
Sind die Parameterwerte korrekt, dann liefert
binocular_disparity_ms den Wert 2 (
H_MSG_TRUE)
. Das Verhalten bei
leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels
set_system('no_object_result',<Result>) festlegen.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
threshold,
disparity_to_distance,
disparity_image_to_xyz
binocular_disparity,
binocular_disparity_mg,
binocular_distance,
binocular_distance_mg,
binocular_distance_ms
map_image,
gen_binocular_rectification_map,
binocular_calibration
3D Metrology