binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsbinocular_disparity_ms (Operator)

Name

binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsbinocular_disparity_ms — 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)

def binocular_disparity_ms(image_rect_1: HObject, image_rect_2: HObject, min_disparity: int, max_disparity: int, surface_smoothing: int, edge_smoothing: int, gen_param_name: MaybeSequence[str], gen_param_value: MaybeSequence[str]) -> Tuple[HObject, HObject]

Beschreibung

binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsbinocular_disparity_ms berechnet die Disparität zwischen zwei rektifizierten Stereobildern ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 und ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 mit Hilfe von Multi-Scanline-Optimierung. Das resultierende Disparitätsbild wird in DisparityDisparityDisparitydisparitydisparity zurückgegeben. Im Gegensatz zu binocular_distance_msbinocular_distance_msBinocularDistanceMsBinocularDistanceMsbinocular_distance_ms wird das Ergebnis nicht in Abstandswerte umgerechnet.

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

Die Eingabeparameter ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 und ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 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_camerascalibrate_camerasCalibrateCamerasCalibrateCamerascalibrate_cameras, gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapgen_binocular_rectification_map und map_imagemap_imageMapImageMapImagemap_image rektifiziert werden.

Die Breiten von ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 und ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 können sich unterscheiden, die Höhe muss jedoch übereinstimmen. Für ein Pixel in ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 wird das homologe Pixel in ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 ausgewählt, indem die entsprechende Zeile in ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 abgesucht wird und beide Pixel basierend auf einem Ähnlichkeitsmaß gematcht werden. Die Disparität ist die Anzahl der Pixel, welche ein Pixel in ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 verschoben werden muss, um das homologe Pixel in ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 zu erreichen.

Der Suchbereich wird durch den minimalen und maximalen Disparitätswert MinDisparityMinDisparityMinDisparityminDisparitymin_disparity und MaxDisparityMaxDisparityMaxDisparitymaxDisparitymax_disparity festgelegt. Falls der minimale und maximale Disparitätswert ein leeres Tupel sind, wird der Suchbereich automatisch aus den Eingabebildern ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 und ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 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 SurfaceSmoothingSurfaceSmoothingSurfaceSmoothingsurfaceSmoothingsurface_smoothing und EdgeSmoothingEdgeSmoothingEdgeSmoothingedgeSmoothingedge_smoothing gesteuert. SurfaceSmoothingSurfaceSmoothingSurfaceSmoothingsurfaceSmoothingsurface_smoothing steuert die Glattheit innerhalb von Oberflächen. Hohe Werte unterdrücken Disparitätsdifferenzen von einem Pixel. EdgeSmoothingEdgeSmoothingEdgeSmoothingedgeSmoothingedge_smoothing 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 GenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und die entsprechenden Werte GenParamValueGenParamValueGenParamValuegenParamValuegen_param_value werde unterstützt:

'consistency_check'"consistency_check""consistency_check""consistency_check""consistency_check"

Aktiviert einen optionalen Nachbearbeitungsschritt zur Erhöhung der Robustheit. Auf 'true'"true""true""true""true" gesetzt, werden nur noch diejenigen Disparitätswerte zurückgegeben, die übereinstimmend sowohl bei einer Suche eines Referenzmusters von ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 in ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 als auch von ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 in ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 gefunden werden. Der Wert 'false'"false""false""false""false" deaktiviert dieses Verhalten.

Werteliste: 'true'"true""true""true""true", 'false'"false""false""false""false".

Default: 'true'"true""true""true""true".

'disparity_offset'"disparity_offset""disparity_offset""disparity_offset""disparity_offset"

Passt die Anpassung des grob-zu-fein-Ansatzes an Diskontinuitäten. Um so höher der mit GenParamValueGenParamValueGenParamValuegenParamValuegen_param_value gesetzte Wert, desto mehr Laufzeit wird beansprucht.

Wertevorschläge: 2, 3, 4.

Default: 3.

'method'"method""method""method""method":

Bestimmt die zur Berechnung der Disparitäten verwendete Methode. Folgende Parameter GenParamValueGenParamValueGenParamValuegenParamValuegen_param_value können dazu gesetzt werden:

  • 'accurate'"accurate""accurate""accurate""accurate": Verwendet die genauste Methode zur Berechnung, hat jedoch im Vergleich zu den weiteren Methoden höhere Laufzeit und Speicherverbrauch.

  • 'fast'"fast""fast""fast""fast": Verwendet das grob-zu-fein-Schema zur Verbesserung der Laufzeit. Dieses funktioniert ähnlich zu dem grob-zu-fein-Schema, welches in binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparitybinocular_disparity beschrieben wird.

    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 MinDisparityMinDisparityMinDisparityminDisparitymin_disparity und MaxDisparityMaxDisparityMaxDisparitymaxDisparitymax_disparity beim Durchlaufen der Pyramide schätzt. Als Konsequenz müssen weder MinDisparityMinDisparityMinDisparityminDisparitymin_disparity noch MaxDisparityMaxDisparityMaxDisparitymaxDisparitymax_disparity 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.

  • 'very_fast'"very_fast""very_fast""very_fast""very_fast": Reduziert die Laufzeit noch weiter im Vergleich zu 'fast'"fast""fast""fast""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'"num_levels""num_levels""num_levels""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'"fast""fast""fast""fast" oder 'very_fast'"very_fast""very_fast""very_fast""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'"accurate""accurate""accurate""accurate" Methode.

Werteliste: 'accurate'"accurate""accurate""accurate""accurate", 'fast'"fast""fast""fast""fast", 'very_fast'"very_fast""very_fast""very_fast""very_fast".

Default: 'accurate'"accurate""accurate""accurate""accurate".

'num_levels'"num_levels""num_levels""num_levels""num_levels":

Bestimmt GenParamValueGenParamValueGenParamValuegenParamValuegen_param_value die Anzahl an Pyramiden, die beim grob-zu-fein-Schema verwendet wird. Ist GenParamValueGenParamValueGenParamValuegenParamValuegen_param_value auf 'auto'"auto""auto""auto""auto" gesetzt, wird die Anzahl Pyramiden automatisch berechnet.

Wertevorschläge: 2, 3, 'auto'"auto""auto""auto""auto".

Default: 'auto'"auto""auto""auto""auto".

'similarity_measure'"similarity_measure""similarity_measure""similarity_measure""similarity_measure":

Legt das verwendete Ähnlichkeitsmaß fest. In den beiden Fällen 'census_dense'"census_dense""census_dense""census_dense""census_dense" 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 und eignet sich besser für feine Strukturen.

  • '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. Liefert robustere Ergebnisse in schwach texturierten Bereichen.

Werteliste: 'census_dense'"census_dense""census_dense""census_dense""census_dense", 'census_sparse'"census_sparse""census_sparse""census_sparse""census_sparse".

Default: 'census_dense'"census_dense""census_dense""census_dense""census_dense".

'sub_disparity'"sub_disparity""sub_disparity""sub_disparity""sub_disparity":

Auf 'true'"true""true""true""true" gesetzt, werden kontinuierliche Werte für die bisher ganzzahligen Disparitätswerte geschätzt. Der Wert 'false'"false""false""false""false" schaltet dieses Verhalten aus.

Werteliste: 'true'"true""true""true""true", 'false'"false""false""false""false".

Default: 'true'"true""true""true""true".

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.

Ausführungsinformationen

Parameter

ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 (input_object)  singlechannelimage objectHImageHObjectHObjectHobject (byte*) *erlaubt für Compute Devices

Rektifiziertes Bild von Kamera 1.

ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 (input_object)  singlechannelimage objectHImageHObjectHObjectHobject (byte*) *erlaubt für Compute Devices

Rektifiziertes Bild von Kamera 2.

DisparityDisparityDisparitydisparitydisparity (output_object)  singlechannelimage objectHImageHObjectHObjectHobject * (real)

Disparität.

ScoreScoreScorescorescore (output_object)  singlechannelimage objectHImageHObjectHObjectHobject * (real)

Güte der berechneten Disparität.

MinDisparityMinDisparityMinDisparityminDisparitymin_disparity (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Minimale erwartete Disparität.

Default: -30

Wertebereich: -32768 ≤ MinDisparity MinDisparity MinDisparity minDisparity min_disparity ≤ 32768

Restriktion: MinDisparity <= MaxDisparity

MaxDisparityMaxDisparityMaxDisparitymaxDisparitymax_disparity (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Maximale erwartete Disparität.

Default: 30

Wertebereich: -32768 ≤ MaxDisparity MaxDisparity MaxDisparity maxDisparity max_disparity ≤ 32768

Restriktion: MinDisparity <= MaxDisparity

SurfaceSmoothingSurfaceSmoothingSurfaceSmoothingsurfaceSmoothingsurface_smoothing (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Glättung von Oberflächen.

Default: 50

Wertevorschläge: 20, 50, 100

Restriktion: SurfaceSmoothing >= 0

EdgeSmoothingEdgeSmoothingEdgeSmoothingedgeSmoothingedge_smoothing (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Glättung von Kanten.

Default: 50

Wertevorschläge: 20, 50, 100

Restriktion: EdgeSmoothing >= 0

GenParamNameGenParamNameGenParamNamegenParamNamegen_param_name (input_control)  attribute.name(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

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

Default: []

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

GenParamValueGenParamValueGenParamValuegenParamValuegen_param_value (input_control)  attribute.value(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

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

Default: []

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", 'auto'"auto""auto""auto""auto"

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_msBinocularDisparityMsBinocularDisparityMsbinocular_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>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

map_imagemap_imageMapImageMapImagemap_image

Nachfolger

thresholdthresholdThresholdThresholdthreshold, disparity_to_distancedisparity_to_distanceDisparityToDistanceDisparityToDistancedisparity_to_distance, disparity_image_to_xyzdisparity_image_to_xyzDisparityImageToXyzDisparityImageToXyzdisparity_image_to_xyz

Alternativen

binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparitybinocular_disparity, binocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMgbinocular_disparity_mg, binocular_distancebinocular_distanceBinocularDistanceBinocularDistancebinocular_distance, binocular_distance_mgbinocular_distance_mgBinocularDistanceMgBinocularDistanceMgbinocular_distance_mg, binocular_distance_msbinocular_distance_msBinocularDistanceMsBinocularDistanceMsbinocular_distance_ms

Siehe auch

map_imagemap_imageMapImageMapImagemap_image, gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapgen_binocular_rectification_map, binocular_calibrationbinocular_calibrationBinocularCalibrationBinocularCalibrationbinocular_calibration

Modul

3D Metrology