binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparitybinocular_disparity — Berechnet die Disparität für ein rektifiziertes Bildpaar mit Hilfe
von Korrelationsmethoden.
Die verwendete Korrelationsfunktion wird durch den Parameter
MethodMethodMethodMethodmethodmethod bestimmt, welcher drei Berechnungsmethoden
unterscheidet:
'sad'"sad""sad""sad""sad""sad": Summe der absoluten Differenzen (Summed Absolute Differences)
mit .
'ssd'"ssd""ssd""ssd""ssd""ssd": Summe der quadrierten Differenzen (Summed Squared Differences)
mit .
'ncc'"ncc""ncc""ncc""ncc""ncc": Normalisierte Kreuzkorrelation (Normalized Cross Correlation)
mit .
wobei
, , , :
Zeilen- und Spaltenkoordinaten der
korrespondierenden Pixel der beiden Eingabebilder,
, :: Grauwerte der nicht vorverarbeiteten Eingabebilder,
: Größe des Korrelationsfensters,
: mittlerer Grauwert innerhalb eines
Korrelationsfensters der Breite und Höhe .
Die Methoden 'sad'"sad""sad""sad""sad""sad" und 'ssd'"ssd""ssd""ssd""ssd""ssd" vergleichen direkt
die Grauwerte der Pixel innerhalb des Grauwertfensters, wohingegen
'ncc'"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""ncc" vorzuziehen. Ansonsten sind 'sad'"sad""sad""sad""sad""sad" und
'ssd'"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 in den Methoden 'sad'"sad""sad""sad""sad""sad" und
'ssd'"ssd""ssd""ssd""ssd""ssd" fällt (die beste Güte ist 0), während sie in der
Methode 'ncc'"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_disparityBinocularDisparityBinocularDisparityBinocularDisparitybinocular_disparity zu verbessern, wird
durch den Parameter NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels 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. TextureThreshTextureThreshTextureThreshTextureThreshtextureThreshtexture_thresh und
ScoreThreshScoreThreshScoreThreshScoreThreshscoreThreshscore_thresh werden auf jeder Stufe angewendet, so dass die
mit DisparityDisparityDisparityDisparitydisparitydisparity und ScoreScoreScoreScorescorescore 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""interpolation" für den Parameter
SubDisparitySubDisparitySubDisparitySubDisparitysubDisparitysub_disparity schließlich berechnet die Disparitäten
Subpixel genau. Das Verhalten wird ausgeschaltet indem der Parameter
auf 'none'"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 (C++)
// 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,
&CamPoseRect1,&CamPoseRect2,&RelPosRect);
// 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");
}
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_disparityBinocularDisparityBinocularDisparityBinocularDisparitybinocular_disparity den Wert TRUE.