binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparity — Berechnet die Disparität für ein rektifiziertes Bildpaar mit Hilfe
von Korrelationsmethoden.
binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparity berechnet mit Hilfe von
Korrelationsmethoden pixelweise Korrespondenzen zwischen zwei
rektifizierten Bildern. Im Unterschied zu binocular_distancebinocular_distanceBinocularDistanceBinocularDistanceBinocularDistance
werden die Ergebnisse nicht in Distanzwerte transformiert.
SUM(x) ist die gemittelte Summe von x in einem Fenster der Größe
(2m+1) x (2n+1). gm(r,c) ist der mittlere Grauwert von g(r',c') in
diesem Fenster in Zeile r und Spalte c. g1 und g2 sind Grauwerte in
den nicht vorberarbeiteten Eingabebildern.
Die Methoden 'sad'"sad""sad""sad""sad" und 'ssd'"ssd""ssd""ssd""ssd" vergleichen direkt
die Grauwerte der Pixel innerhalb des Grauwertfensters, wohingegen
'ncc'"ncc""ncc""ncc""ncc" den mittleren Grauwert und seine Varianz innerhalb
des Grauwertfensters ausgleicht. Wenn zwei Bilder in ihrer
Helligkeit und ihrem Kontrast unterschiedlich sind, ist daher
'ncc'"ncc""ncc""ncc""ncc" vorzuziehen. Ansonsten sind 'sad'"sad""sad""sad""sad" und
'ssd'"ssd""ssd""ssd""ssd" vorzuziehen, da sie aufgrund einfacherer interner
Berechnungen schneller sind.
Es muss darauf geachtet werden, dass die Güte der Korrelation für
steigende S in den Methoden 'sad'"sad""sad""sad""sad" und
'ssd'"ssd""ssd""ssd""ssd" fällt (die beste Güte ist 0), während sie in der
Methode 'ncc'"ncc""ncc""ncc""ncc" steigt (die beste Güte ist 1.0).
Die Anzahl der Pyramidenstufen, welche verwendet werden um das
Zeitverhalten von binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparity zu verbessern, wird
durch den Parameter NumLevelsNumLevelsNumLevelsNumLevelsnumLevels bestimmt. Einem grob-zu-fein
Schema folgend werden die Disparitätsbilder der höheren Stufen
berechnet und in rechteckige Bildteile von ähnlicher Disparität
unterteilt um den Suchbereich auf der nächst niedrigeren Stufe für
diesen Bildausschnitt einzuschränken. TextureThreshTextureThreshTextureThreshTextureThreshtextureThresh und
ScoreThreshScoreThreshScoreThreshScoreThreshscoreThresh werden auf jeder Stufe angewendet, so dass die
mit DisparityDisparityDisparityDisparitydisparity und ScoreScoreScoreScorescore zurückgegebene Bildregion
als die Schnittmenge der Bildregionen auf jeder einzelnen Stufe
definiert ist. Im allgemeinen lohnt sich das Verwenden von
Pyramidenstrukturen um so mehr, je mehr das Disparitätsbild in
homogene Bereiche unterteilt werden kann und je größer der
Disparitätsbereich definiert werden muss. Auf der anderen Seite
können zu hohe Pyramidenstufen durch ihre grobe Auflösung wichtige
Texturinformationen verlieren, so dass falsche Disparitätswerte
zurückgegeben werden können.
Der Wert 'interpolation'"interpolation""interpolation""interpolation""interpolation" für den Parameter
SubDisparitySubDisparitySubDisparitySubDisparitysubDisparity schließlich berechnet die Disparitäten
Subpixel genau. Das Verhalten wird ausgeschaltet indem der Parameter
auf 'none'"none""none""none""none" gesetzt wird.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
Automatisch parallelisiert auf interner Datenebene.
* Set internal and external stereo parameters.
* Note that, typically, these values are the result of a prior
* calibration.
gen_cam_par_area_scan_division (0.01, -665, 5.2e-006, 5.2e-006, \
622, 517, 1280, 1024, CamParam1)
gen_cam_par_area_scan_division (0.01, -731, 5.2e-006, 5.2e-006, \
654, 519, 1280, 1024, CamParam2)
create_pose (0.1535,-0.0037,0.0447,0.17,319.84,359.89, \
'Rp+T', 'gba', 'point', RelPose)
* Compute the mapping for rectified images.
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, RelPose, \
1, 'viewing_direction', 'bilinear', CamParamRect1,CamParamRect2, Cam1PoseRect1, \
Cam2PoseRect2,RelPoseRect)
* Compute the disparities in online images.
while (1)
grab_image_async (Image1, AcqHandle1, -1)
map_image (Image1, Map1, ImageRect1)
grab_image_async (Image2, AcqHandle2, -1)
map_image (Image2, Map2, ImageRect2)
binocular_disparity(ImageRect1, ImageRect2, Disparity, Score, 'sad', \
11, 11, 20, -40, 20, 2, 25, 'left_right_check','interpolation')
endwhile
Beispiel (HDevelop)
* Set internal and external stereo parameters.
* Note that, typically, these values are the result of a prior
* calibration.
gen_cam_par_area_scan_division (0.01, -665, 5.2e-006, 5.2e-006, \
622, 517, 1280, 1024, CamParam1)
gen_cam_par_area_scan_division (0.01, -731, 5.2e-006, 5.2e-006, \
654, 519, 1280, 1024, CamParam2)
create_pose (0.1535,-0.0037,0.0447,0.17,319.84,359.89, \
'Rp+T', 'gba', 'point', RelPose)
* Compute the mapping for rectified images.
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, RelPose, \
1, 'viewing_direction', 'bilinear', CamParamRect1,CamParamRect2, Cam1PoseRect1, \
Cam2PoseRect2,RelPoseRect)
* Compute the disparities in online images.
while (1)
grab_image_async (Image1, AcqHandle1, -1)
map_image (Image1, Map1, ImageRect1)
grab_image_async (Image2, AcqHandle2, -1)
map_image (Image2, Map2, ImageRect2)
binocular_disparity(ImageRect1, ImageRect2, Disparity, Score, 'sad', \
11, 11, 20, -40, 20, 2, 25, 'left_right_check','interpolation')
endwhile
Beispiel (HDevelop)
* Set internal and external stereo parameters.
* Note that, typically, these values are the result of a prior
* calibration.
gen_cam_par_area_scan_division (0.01, -665, 5.2e-006, 5.2e-006, \
622, 517, 1280, 1024, CamParam1)
gen_cam_par_area_scan_division (0.01, -731, 5.2e-006, 5.2e-006, \
654, 519, 1280, 1024, CamParam2)
create_pose (0.1535,-0.0037,0.0447,0.17,319.84,359.89, \
'Rp+T', 'gba', 'point', RelPose)
* Compute the mapping for rectified images.
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, RelPose, \
1, 'viewing_direction', 'bilinear', CamParamRect1,CamParamRect2, Cam1PoseRect1, \
Cam2PoseRect2,RelPoseRect)
* Compute the disparities in online images.
while (1)
grab_image_async (Image1, AcqHandle1, -1)
map_image (Image1, Map1, ImageRect1)
grab_image_async (Image2, AcqHandle2, -1)
map_image (Image2, Map2, ImageRect2)
binocular_disparity(ImageRect1, ImageRect2, Disparity, Score, 'sad', \
11, 11, 20, -40, 20, 2, 25, 'left_right_check','interpolation')
endwhile
Beispiel (HDevelop)
* Set internal and external stereo parameters.
* Note that, typically, these values are the result of a prior
* calibration.
gen_cam_par_area_scan_division (0.01, -665, 5.2e-006, 5.2e-006, \
622, 517, 1280, 1024, CamParam1)
gen_cam_par_area_scan_division (0.01, -731, 5.2e-006, 5.2e-006, \
654, 519, 1280, 1024, CamParam2)
create_pose (0.1535,-0.0037,0.0447,0.17,319.84,359.89, \
'Rp+T', 'gba', 'point', RelPose)
* Compute the mapping for rectified images.
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, RelPose, \
1, 'viewing_direction', 'bilinear', CamParamRect1,CamParamRect2, Cam1PoseRect1, \
Cam2PoseRect2,RelPoseRect)
* Compute the disparities in online images.
while (1)
grab_image_async (Image1, AcqHandle1, -1)
map_image (Image1, Map1, ImageRect1)
grab_image_async (Image2, AcqHandle2, -1)
map_image (Image2, Map2, ImageRect2)
binocular_disparity(ImageRect1, ImageRect2, Disparity, Score, 'sad', \
11, 11, 20, -40, 20, 2, 25, 'left_right_check','interpolation')
endwhile
Beispiel (HDevelop)
* Set internal and external stereo parameters.
* Note that, typically, these values are the result of a prior
* calibration.
gen_cam_par_area_scan_division (0.01, -665, 5.2e-006, 5.2e-006, \
622, 517, 1280, 1024, CamParam1)
gen_cam_par_area_scan_division (0.01, -731, 5.2e-006, 5.2e-006, \
654, 519, 1280, 1024, CamParam2)
create_pose (0.1535,-0.0037,0.0447,0.17,319.84,359.89, \
'Rp+T', 'gba', 'point', RelPose)
* Compute the mapping for rectified images.
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, RelPose, \
1, 'viewing_direction', 'bilinear', CamParamRect1,CamParamRect2, Cam1PoseRect1, \
Cam2PoseRect2,RelPoseRect)
* Compute the disparities in online images.
while (1)
grab_image_async (Image1, AcqHandle1, -1)
map_image (Image1, Map1, ImageRect1)
grab_image_async (Image2, AcqHandle2, -1)
map_image (Image2, Map2, ImageRect2)
binocular_disparity(ImageRect1, ImageRect2, Disparity, Score, 'sad', \
11, 11, 20, -40, 20, 2, 25, 'left_right_check','interpolation')
endwhile
Ergebnis
Sind die Parameterwerte korrekt, dann liefert
binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparity den Wert 2 (H_MSG_TRUE).