binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMs (Operator)

Name

binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMs — Berechnet die Disparität für ein rektifiziertes Stereobildpaar mit Hilfe von Multi-Scanline-Optimierung.

Signatur

binocular_disparity_ms(ImageRect1, ImageRect2 : Disparity, Score : MinDisparity, MaxDisparity, SurfaceSmoothing, EdgeSmoothing, GenParamName, GenParamValue : )

Herror binocular_disparity_ms(const Hobject ImageRect1, const Hobject ImageRect2, Hobject* Disparity, Hobject* Score, const Hlong MinDisparity, const Hlong MaxDisparity, const Hlong SurfaceSmoothing, const Hlong EdgeSmoothing, const char* GenParamName, const char* GenParamValue)

Herror T_binocular_disparity_ms(const Hobject ImageRect1, const Hobject ImageRect2, Hobject* Disparity, Hobject* Score, const Htuple MinDisparity, const Htuple MaxDisparity, const Htuple SurfaceSmoothing, const Htuple EdgeSmoothing, const Htuple GenParamName, const Htuple GenParamValue)

void BinocularDisparityMs(const HObject& ImageRect1, const HObject& ImageRect2, HObject* Disparity, HObject* Score, const HTuple& MinDisparity, const HTuple& MaxDisparity, const HTuple& SurfaceSmoothing, const HTuple& EdgeSmoothing, const HTuple& GenParamName, const HTuple& GenParamValue)

HImage HImage::BinocularDisparityMs(const HImage& ImageRect2, HImage* Score, Hlong MinDisparity, Hlong MaxDisparity, Hlong SurfaceSmoothing, Hlong EdgeSmoothing, const HTuple& GenParamName, const HTuple& GenParamValue) const

HImage HImage::BinocularDisparityMs(const HImage& ImageRect2, HImage* Score, Hlong MinDisparity, Hlong MaxDisparity, Hlong SurfaceSmoothing, Hlong EdgeSmoothing, const HString& GenParamName, const HString& GenParamValue) const

HImage HImage::BinocularDisparityMs(const HImage& ImageRect2, HImage* Score, Hlong MinDisparity, Hlong MaxDisparity, Hlong SurfaceSmoothing, Hlong EdgeSmoothing, const char* GenParamName, const char* GenParamValue) const

HImage HImage::BinocularDisparityMs(const HImage& ImageRect2, HImage* Score, Hlong MinDisparity, Hlong MaxDisparity, Hlong SurfaceSmoothing, Hlong EdgeSmoothing, const wchar_t* GenParamName, const wchar_t* GenParamValue) const   (Nur Windows)

static void HOperatorSet.BinocularDisparityMs(HObject imageRect1, HObject imageRect2, out HObject disparity, out HObject score, HTuple minDisparity, HTuple maxDisparity, HTuple surfaceSmoothing, HTuple edgeSmoothing, HTuple genParamName, HTuple genParamValue)

HImage HImage.BinocularDisparityMs(HImage imageRect2, out HImage score, int minDisparity, int maxDisparity, int surfaceSmoothing, int edgeSmoothing, HTuple genParamName, HTuple genParamValue)

HImage HImage.BinocularDisparityMs(HImage imageRect2, out HImage score, int minDisparity, int maxDisparity, int surfaceSmoothing, int edgeSmoothing, string genParamName, string genParamValue)

Beschreibung

binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsBinocularDisparityMs berechnet die Disparität zwischen zwei rektifizierten Stereobildern ImageRect1ImageRect1ImageRect1ImageRect1imageRect1 und ImageRect2ImageRect2ImageRect2ImageRect2imageRect2 mit Hilfe von Multi-Scanline-Optimierung. Das resultierende Disparitätsbild wird in DisparityDisparityDisparityDisparitydisparity zurückgegeben. Im Gegensatz zu binocular_distance_msbinocular_distance_msBinocularDistanceMsBinocularDistanceMsBinocularDistanceMs wird das Ergebnis nicht in Abstandswerte umgerechnet.

Für diese Aufgabe können die drei Operatoren binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparity, binocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMgBinocularDisparityMg und binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsBinocularDisparityMs verwendet werden. binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparity liefert robuste Ergebnisse in gut texturierten Bereichen, doch scheitert auf schwachen Texturen. binocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMgBinocularDisparityMg interpoliert schwach texturierte Bereiche, doch glättet Disparitätssprünge. binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsBinocularDisparityMs bewahrt Disparitätssprünge und interpoliert teilweise.

Die Eingabeparameter ImageRect1ImageRect1ImageRect1ImageRect1imageRect1 und ImageRect2ImageRect2ImageRect2ImageRect2imageRect2 müssen ein Paar rektifizierter Stereobilder darstellen, d.h. korrespondierende Punkte müssen in derselben Zeile liegen. Falls diese Annahme nicht zutrifft, können die Bilder mit den Operatoren calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras, gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMap und map_imagemap_imageMapImageMapImageMapImage rektifiziert werden.

Die Breiten von ImageRect1ImageRect1ImageRect1ImageRect1imageRect1 und ImageRect2ImageRect2ImageRect2ImageRect2imageRect2 können sich unterscheiden, die Höhe muss jedoch übereinstimmen. Für ein Pixel in ImageRect1ImageRect1ImageRect1ImageRect1imageRect1 wird das homologe Pixel in ImageRect2ImageRect2ImageRect2ImageRect2imageRect2 ausgewählt, indem die entsprechende Zeile in ImageRect2ImageRect2ImageRect2ImageRect2imageRect2 abgesucht wird und beide Pixel basierend auf einem Ähnlichkeitsmaß gematcht werden. Die Disparität ist die Anzahl der Pixel, welche ein Pixel in ImageRect1ImageRect1ImageRect1ImageRect1imageRect1 verschoben werden muss, um das homologe Pixel in ImageRect2ImageRect2ImageRect2ImageRect2imageRect2 zu erreichen. Der Suchbereich wird durch den minimalen und maximalen Disparitätswert MinDisparityMinDisparityMinDisparityMinDisparityminDisparity und MaxDisparityMaxDisparityMaxDisparityMaxDisparitymaxDisparity festgelegt. Falls der minimale und maximale Disparitätswert ein leeres Tupel sind, wird der Suchbereich automatisch aus den Eingabebildern ImageRect1ImageRect1ImageRect1ImageRect1imageRect1 und ImageRect2ImageRect2ImageRect2ImageRect2imageRect2 berechnet.

Um die Laufzeit zu verbessern kann ein ein grob-zu-fein Schema verwendet werden. Dieses funktioniert ähnlich zu dem grob-zu-fein Schema welches in binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparity beschrieben wird. Das grob-zu-feine Schema wird verwendet, wenn GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'method'"method""method""method""method" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf 'fast'"fast""fast""fast""fast" gesetzt werden. Die Standardmethode ist 'accurate'"accurate""accurate""accurate""accurate". Besonders für große Bilder und einen großen Suchbereich der Disparitätswerte erfordert die 'fast'"fast""fast""fast""fast" Methode deutlich weniger Speicherplatz und ist deutlich schneller als die 'accurate'"accurate""accurate""accurate""accurate" Methode. Das grob-zu-fein Schema hat den weiteren Vorteil, dass es automatisch die Reichweite von MinDisparityMinDisparityMinDisparityMinDisparityminDisparity und MaxDisparityMaxDisparityMaxDisparityMaxDisparitymaxDisparity beim Durchlaufen der Pyramide schätzt. Als Konsequenz müssen weder MinDisparityMinDisparityMinDisparityMinDisparityminDisparity noch MaxDisparityMaxDisparityMaxDisparityMaxDisparitymaxDisparity gesetzt werden. Allerdings sind die Disparitätsbilder für die 'fast'"fast""fast""fast""fast"-Methode weniger genau als für den 'accurate'"accurate""accurate""accurate""accurate" Standardansatz . Insbesondere bei starken Disparitätssprüngen ist die 'fast'"fast""fast""fast""fast" Methode ungenauer. Die Laufzeit kann noch weiter reduziert werden indem die 'method'"method""method""method""method" auf 'very_fast'"very_fast""very_fast""very_fast""very_fast" gesetzt wird. 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 durch das Setzen von GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'num_levels'"num_levels""num_levels""num_levels""num_levels" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf die Zahl der Ebenen zu setzen.

Das Ähnlichkeitsmaß kann festgelegt werden, indem GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'similarity_measure'"similarity_measure""similarity_measure""similarity_measure""similarity_measure" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf den gewünschten Wert gesetzt wird. In den beiden Fällen 'census_dense'"census_dense""census_dense""census_dense""census_dense" (default) und 'census_sparse'"census_sparse""census_sparse""census_sparse""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'"census_dense""census_dense""census_dense""census_dense" verwendet ein Fenster von 9 x 7 Pixeln. 'census_sparse'"census_sparse""census_sparse""census_sparse""census_sparse" verwendet ein Fenster von 15 x 15 Pixeln, von welchen jedoch nur ein Teil ausgewertet wird. Während 'census_dense'"census_dense""census_dense""census_dense""census_dense" besser für feine Strukturen geeignet ist, liefert 'census_sparse'"census_sparse""census_sparse""census_sparse""census_sparse" robustere Ergebnisse in schwach texturierten Bereichen.

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 SurfaceSmoothingSurfaceSmoothingSurfaceSmoothingSurfaceSmoothingsurfaceSmoothing und EdgeSmoothingEdgeSmoothingEdgeSmoothingEdgeSmoothingedgeSmoothing gesteuert. SurfaceSmoothingSurfaceSmoothingSurfaceSmoothingSurfaceSmoothingsurfaceSmoothing steuert die Glattheit innerhalb von Oberflächen. Hohe Werte unterdrücken Disparitätsdifferenzen von einem Pixel. EdgeSmoothingEdgeSmoothingEdgeSmoothingEdgeSmoothingedgeSmoothing 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 resultierende Disparität wird in dem einkanaligen Bild DisparityDisparityDisparityDisparitydisparity zurückgegeben. Ein Qualitätsmaß für jeden Disparitätswert wird in ScoreScoreScoreScorescore ausgegeben. Es enthält das beste (niedrigste) Ergebnis des optimierten Ähnlichkeitsmaßes eines Referenzpixels.

Schließlich gibt es zwei optionale Nachbearbeitungsschritte. Wird GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'consistency_check'"consistency_check""consistency_check""consistency_check""consistency_check" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf 'true'"true""true""true""true" (default) gesetzt, werden nur noch diejenigen Disparitätswerte zurückgegeben, die übereinstimmend bei einer Suche eines Referenzmusters von ImageRect1ImageRect1ImageRect1ImageRect1imageRect1 in ImageRect2ImageRect2ImageRect2ImageRect2imageRect2 als auch von ImageRect2ImageRect2ImageRect2ImageRect2imageRect2 in ImageRect1ImageRect1ImageRect1ImageRect1imageRect1 gefunden werden. Der Wert 'false'"false""false""false""false" schaltet dieses Verhalten aus.

Wird GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'sub_disparity'"sub_disparity""sub_disparity""sub_disparity""sub_disparity" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf 'true'"true""true""true""true" (default) gesetzt, werden kontinuierliche Werte für die bisher ganzzahligen Disparitätswerte geschätzt. Der Wert 'false'"false""false""false""false" schaltet dieses Verhalten aus.

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 indem GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'method'"method""method""method""method" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf 'fast'"fast""fast""fast""fast" oder 'very_fast'"very_fast""very_fast""very_fast""very_fast" gesetzt werden), 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'"accurate""accurate""accurate""accurate" Methode.

Ausführungsinformationen

Parameter

ImageRect1ImageRect1ImageRect1ImageRect1imageRect1 (input_object)  singlechannelimage objectHImageHImageHobject (byte*) *erlaubt für Compute Devices

Rektifiziertes Bild von Kamera 1.

ImageRect2ImageRect2ImageRect2ImageRect2imageRect2 (input_object)  singlechannelimage objectHImageHImageHobject (byte*) *erlaubt für Compute Devices

Rektifiziertes Bild von Kamera 2.

DisparityDisparityDisparityDisparitydisparity (output_object)  singlechannelimage objectHImageHImageHobject * (real)

Disparität.

ScoreScoreScoreScorescore (output_object)  singlechannelimage objectHImageHImageHobject * (real)

Güte der berechneten Disparität.

MinDisparityMinDisparityMinDisparityMinDisparityminDisparity (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Minimale erwartete Disparität.

Defaultwert: -30

Typischer Wertebereich: -32768 ≤ MinDisparity MinDisparity MinDisparity MinDisparity minDisparity ≤ 32767

MaxDisparityMaxDisparityMaxDisparityMaxDisparitymaxDisparity (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Maximale erwartete Disparität.

Defaultwert: 30

Typischer Wertebereich: -32768 ≤ MaxDisparity MaxDisparity MaxDisparity MaxDisparity maxDisparity ≤ 32767

Restriktion: MinDisparity <= MaxDisparity

SurfaceSmoothingSurfaceSmoothingSurfaceSmoothingSurfaceSmoothingsurfaceSmoothing (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Glättung von Oberflächen.

Defaultwert: 50

Wertevorschläge: 20, 50, 100

Restriktion: SurfaceSmoothing >= 0

EdgeSmoothingEdgeSmoothingEdgeSmoothingEdgeSmoothingedgeSmoothing (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Glättung von Kanten.

Defaultwert: 50

Wertevorschläge: 20, 50, 100

Restriktion: EdgeSmoothing >= 0

GenParamNameGenParamNameGenParamNameGenParamNamegenParamName (input_control)  attribute.name(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Parametername(n) für das Multi-Scanline-Verfahren.

Defaultwert: []

Werteliste: 'consistency_check'"consistency_check""consistency_check""consistency_check""consistency_check", 'method'"method""method""method""method", 'similarity_measure'"similarity_measure""similarity_measure""similarity_measure""similarity_measure", 'sub_disparity'"sub_disparity""sub_disparity""sub_disparity""sub_disparity"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue (input_control)  attribute.value(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Parameterwert(e) für das Multi-Scanline-Verfahren.

Defaultwert: []

Wertevorschläge: 'accurate'"accurate""accurate""accurate""accurate", 'fast'"fast""fast""fast""fast", 'very_fast'"very_fast""very_fast""very_fast""very_fast", 'census_dense'"census_dense""census_dense""census_dense""census_dense", 'census_sparse'"census_sparse""census_sparse""census_sparse""census_sparse", 'true'"true""true""true""true", 'false'"false""false""false""false"

Beispiel (HDevelop)

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, [], [])

Ergebnis

Sind die Parameterwerte korrekt, dann liefert binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsBinocularDisparityMs den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

map_imagemap_imageMapImageMapImageMapImage

Nachfolger

thresholdthresholdThresholdThresholdThreshold, disparity_to_distancedisparity_to_distanceDisparityToDistanceDisparityToDistanceDisparityToDistance, disparity_image_to_xyzdisparity_image_to_xyzDisparityImageToXyzDisparityImageToXyzDisparityImageToXyz

Alternativen

binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparity, binocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMgBinocularDisparityMg, binocular_distancebinocular_distanceBinocularDistanceBinocularDistanceBinocularDistance, binocular_distance_mgbinocular_distance_mgBinocularDistanceMgBinocularDistanceMgBinocularDistanceMg, binocular_distance_msbinocular_distance_msBinocularDistanceMsBinocularDistanceMsBinocularDistanceMs

Siehe auch

map_imagemap_imageMapImageMapImageMapImage, gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMap, binocular_calibrationbinocular_calibrationBinocularCalibrationBinocularCalibrationBinocularCalibration

Modul

3D Metrology