ClassesClassesClassesClasses | | | | Operators

binocular_distanceT_binocular_distanceBinocularDistancebinocular_distanceBinocularDistanceBinocularDistance (Operator)

Name

binocular_distanceT_binocular_distanceBinocularDistancebinocular_distanceBinocularDistanceBinocularDistance — Compute the distance values for a rectified stereo image pair using correlation techniques.

Signature

binocular_distance(Image1, Image2 : Distance, Score : CamParamRect1, CamParamRect2, RelPoseRect, Method, MaskWidth, MaskHeight, TextureThresh, MinDisparity, MaxDisparity, NumLevels, ScoreThresh, Filter, SubDistance : )

Herror T_binocular_distance(const Hobject Image1, const Hobject Image2, Hobject* Distance, Hobject* Score, const Htuple CamParamRect1, const Htuple CamParamRect2, const Htuple RelPoseRect, const Htuple Method, const Htuple MaskWidth, const Htuple MaskHeight, const Htuple TextureThresh, const Htuple MinDisparity, const Htuple MaxDisparity, const Htuple NumLevels, const Htuple ScoreThresh, const Htuple Filter, const Htuple SubDistance)

Herror binocular_distance(Hobject Image1, Hobject Image2, Hobject* Distance, Hobject* Score, const HTuple& CamParamRect1, const HTuple& CamParamRect2, const HTuple& RelPoseRect, const HTuple& Method, const HTuple& MaskWidth, const HTuple& MaskHeight, const HTuple& TextureThresh, const HTuple& MinDisparity, const HTuple& MaxDisparity, const HTuple& NumLevels, const HTuple& ScoreThresh, const HTuple& Filter, const HTuple& SubDistance)

HImage HImage::BinocularDistance(const HImage& Image2, HImage* Score, const HTuple& CamParamRect1, const HTuple& CamParamRect2, const HTuple& RelPoseRect, const HTuple& Method, const HTuple& MaskWidth, const HTuple& MaskHeight, const HTuple& TextureThresh, const HTuple& MinDisparity, const HTuple& MaxDisparity, const HTuple& NumLevels, const HTuple& ScoreThresh, const HTuple& Filter, const HTuple& SubDistance) const

void BinocularDistance(const HObject& Image1, const HObject& Image2, HObject* Distance, HObject* Score, const HTuple& CamParamRect1, const HTuple& CamParamRect2, const HTuple& RelPoseRect, const HTuple& Method, const HTuple& MaskWidth, const HTuple& MaskHeight, const HTuple& TextureThresh, const HTuple& MinDisparity, const HTuple& MaxDisparity, const HTuple& NumLevels, const HTuple& ScoreThresh, const HTuple& Filter, const HTuple& SubDistance)

HImage HImage::BinocularDistance(const HImage& Image2, HImage* Score, const HTuple& CamParamRect1, const HTuple& CamParamRect2, const HPose& RelPoseRect, const HString& Method, Hlong MaskWidth, Hlong MaskHeight, const HTuple& TextureThresh, Hlong MinDisparity, Hlong MaxDisparity, Hlong NumLevels, const HTuple& ScoreThresh, const HTuple& Filter, const HTuple& SubDistance) const

HImage HImage::BinocularDistance(const HImage& Image2, HImage* Score, const HTuple& CamParamRect1, const HTuple& CamParamRect2, const HPose& RelPoseRect, const HString& Method, Hlong MaskWidth, Hlong MaskHeight, double TextureThresh, Hlong MinDisparity, Hlong MaxDisparity, Hlong NumLevels, double ScoreThresh, const HString& Filter, const HString& SubDistance) const

HImage HImage::BinocularDistance(const HImage& Image2, HImage* Score, const HTuple& CamParamRect1, const HTuple& CamParamRect2, const HPose& RelPoseRect, const char* Method, Hlong MaskWidth, Hlong MaskHeight, double TextureThresh, Hlong MinDisparity, Hlong MaxDisparity, Hlong NumLevels, double ScoreThresh, const char* Filter, const char* SubDistance) const

HImage HPose::BinocularDistance(const HImage& Image1, const HImage& Image2, HImage* Score, const HTuple& CamParamRect1, const HTuple& CamParamRect2, const HString& Method, Hlong MaskWidth, Hlong MaskHeight, const HTuple& TextureThresh, Hlong MinDisparity, Hlong MaxDisparity, Hlong NumLevels, const HTuple& ScoreThresh, const HTuple& Filter, const HTuple& SubDistance) const

HImage HPose::BinocularDistance(const HImage& Image1, const HImage& Image2, HImage* Score, const HTuple& CamParamRect1, const HTuple& CamParamRect2, const HString& Method, Hlong MaskWidth, Hlong MaskHeight, double TextureThresh, Hlong MinDisparity, Hlong MaxDisparity, Hlong NumLevels, double ScoreThresh, const HString& Filter, const HString& SubDistance) const

HImage HPose::BinocularDistance(const HImage& Image1, const HImage& Image2, HImage* Score, const HTuple& CamParamRect1, const HTuple& CamParamRect2, const char* Method, Hlong MaskWidth, Hlong MaskHeight, double TextureThresh, Hlong MinDisparity, Hlong MaxDisparity, Hlong NumLevels, double ScoreThresh, const char* Filter, const char* SubDistance) const

void HOperatorSetX.BinocularDistance(
[in] IHUntypedObjectX* Image1, [in] IHUntypedObjectX* Image2, [out] IHUntypedObjectX*Distance, [out] IHUntypedObjectX*Score, [in] VARIANT CamParamRect1, [in] VARIANT CamParamRect2, [in] VARIANT RelPoseRect, [in] VARIANT Method, [in] VARIANT MaskWidth, [in] VARIANT MaskHeight, [in] VARIANT TextureThresh, [in] VARIANT MinDisparity, [in] VARIANT MaxDisparity, [in] VARIANT NumLevels, [in] VARIANT ScoreThresh, [in] VARIANT Filter, [in] VARIANT SubDistance)

IHImageX* HImageX.BinocularDistance(
[in] IHImageX* Image2, [out] IHImageX*Score, [in] VARIANT CamParamRect1, [in] VARIANT CamParamRect2, [in] VARIANT RelPoseRect, [in] BSTR Method, [in] Hlong MaskWidth, [in] Hlong MaskHeight, [in] VARIANT TextureThresh, [in] Hlong MinDisparity, [in] Hlong MaxDisparity, [in] Hlong NumLevels, [in] VARIANT ScoreThresh, [in] VARIANT Filter, [in] VARIANT SubDistance)

IHImageX* HPoseX.BinocularDistance(
[in] IHImageX* Image1, [in] IHImageX* Image2, [out] IHImageX*Score, [in] VARIANT CamParamRect1, [in] VARIANT CamParamRect2, [in] VARIANT RelPoseRect, [in] BSTR Method, [in] Hlong MaskWidth, [in] Hlong MaskHeight, [in] VARIANT TextureThresh, [in] Hlong MinDisparity, [in] Hlong MaxDisparity, [in] Hlong NumLevels, [in] VARIANT ScoreThresh, [in] VARIANT Filter, [in] VARIANT SubDistance)

static void HOperatorSet.BinocularDistance(HObject image1, HObject image2, out HObject distance, out HObject score, HTuple camParamRect1, HTuple camParamRect2, HTuple relPoseRect, HTuple method, HTuple maskWidth, HTuple maskHeight, HTuple textureThresh, HTuple minDisparity, HTuple maxDisparity, HTuple numLevels, HTuple scoreThresh, HTuple filter, HTuple subDistance)

HImage HImage.BinocularDistance(HImage image2, out HImage score, HTuple camParamRect1, HTuple camParamRect2, HPose relPoseRect, string method, int maskWidth, int maskHeight, HTuple textureThresh, int minDisparity, int maxDisparity, int numLevels, HTuple scoreThresh, HTuple filter, HTuple subDistance)

HImage HImage.BinocularDistance(HImage image2, out HImage score, HTuple camParamRect1, HTuple camParamRect2, HPose relPoseRect, string method, int maskWidth, int maskHeight, double textureThresh, int minDisparity, int maxDisparity, int numLevels, double scoreThresh, string filter, string subDistance)

HImage HPose.BinocularDistance(HImage image1, HImage image2, out HImage score, HTuple camParamRect1, HTuple camParamRect2, string method, int maskWidth, int maskHeight, HTuple textureThresh, int minDisparity, int maxDisparity, int numLevels, HTuple scoreThresh, HTuple filter, HTuple subDistance)

HImage HPose.BinocularDistance(HImage image1, HImage image2, out HImage score, HTuple camParamRect1, HTuple camParamRect2, string method, int maskWidth, int maskHeight, double textureThresh, int minDisparity, int maxDisparity, int numLevels, double scoreThresh, string filter, string subDistance)

Description

binocular_distancebinocular_distanceBinocularDistancebinocular_distanceBinocularDistanceBinocularDistance computes the distance values for a rectified stereo image pair using correlation techniques. The operator first calculates the disparities between the two images Image1Image1Image1Image1Image1image1 and Image2Image2Image2Image2Image2image2 similar to binocular_disparitybinocular_disparityBinocularDisparitybinocular_disparityBinocularDisparityBinocularDisparity. The resulting disparities are then transformed into distance values of the corresponding 3D world points to the rectified stereo camera system as in disparity_to_distancedisparity_to_distanceDisparityToDistancedisparity_to_distanceDisparityToDistanceDisparityToDistance. The distances are returned in the single-channel image DistanceDistanceDistanceDistanceDistancedistance in which each gray value represents the distance of the respective 3D world point to the stereo camera system.

The algorithm requires a reference image Image1Image1Image1Image1Image1image1 and a search image Image2Image2Image2Image2Image2image2 which must be rectified, i.e., corresponding epipolar lines are parallel and lie on identical image rows ( r1=r2 ). In case this assumption is violated the images can be rectified by using the operators calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras, gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMap and map_imagemap_imageMapImagemap_imageMapImageMapImage. Hence, given a pixel in the reference image Image1Image1Image1Image1Image1image1 the homologous pixel in Image2Image2Image2Image2Image2image2 is selected by searching along the corresponding row in Image2Image2Image2Image2Image2image2 and matching a local neighborhood within a rectangular window of size MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth and MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight. For each defined reference pixel the pixel correspondences are transformed into distances of the world points defined by the intersection of the lines of sight of a corresponding pixel pair to the z=0 plane of the rectified stereo system.

For this transformation the rectified internal camera parameters CamParamRect1CamParamRect1CamParamRect1CamParamRect1CamParamRect1camParamRect1 of camera 1 and CamParamRect2CamParamRect2CamParamRect2CamParamRect2CamParamRect2camParamRect2 of camera 2, and the external parameters RelPoseRectRelPoseRectRelPoseRectRelPoseRectRelPoseRectrelPoseRect have to be defined. Latter characterizes the relative pose of both cameras to each other and specifies a point transformation from the rectified camera system 2 to the rectified camera system 1. These parameters can be obtained from the operator calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras and gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMap. After all, a quality measure for each distance value is returned in ScoreScoreScoreScoreScorescore, containing the best result of the matching function S of a reference pixel. For the matching, the gray values of the original unprocessed images are used.

The used matching function is defined by the parameter MethodMethodMethodMethodMethodmethod allocating three different kinds of correlation:

with

r1, c1, r2, c2: row and column coordinates of the corresponding pixels of the two input images,

g1, g2: gray values of the unprocessed input images,

N=(2m+1)(2n+1): size of correlation window

SUM(x): mean value within the correlation window of width 2m+1 and height 2n+1.

Note that the methods 'sad'"sad""sad""sad""sad""sad" and 'ssd'"ssd""ssd""ssd""ssd""ssd" compare the gray values of the pixels within a mask window directly, whereas 'ncc'"ncc""ncc""ncc""ncc""ncc" compensates for the mean gray value and its variance within the mask window. Therefore, if the two images differ in brightness and contrast, this method should be preferred. For images with similar brightness and contrast 'sad'"sad""sad""sad""sad""sad" and 'ssd'"ssd""ssd""ssd""ssd""ssd" are to be preferred as they are faster because of less complex internal computations.

It should be noted that the quality of correlation for rising S is falling in methods 'sad'"sad""sad""sad""sad""sad" and 'ssd'"ssd""ssd""ssd""ssd""ssd" (the best quality value is 0) but rising in method 'ncc'"ncc""ncc""ncc""ncc""ncc" (the best quality value is 1.0).

The size of the correlation window has to be odd numbered and is passed in MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth and MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight. The search space is confined by the minimum and maximum disparity value MinDisparityMinDisparityMinDisparityMinDisparityMinDisparityminDisparity and MaxDisparityMaxDisparityMaxDisparityMaxDisparityMaxDisparitymaxDisparity. Due to pixel values not defined beyond the image border the resulting domain of DistanceDistanceDistanceDistanceDistancedistance and ScoreScoreScoreScoreScorescore is generally not set along the image border within a margin of height MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight/2 at the top and bottom border and of width MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth/2 at the left and right border. For the same reason, the maximum disparity range is reduced at the left and right image border.

Since matching turns out to be highly unreliable when dealing with poorly textured areas, the minimum variance within the correlation window can be defined in TextureThreshTextureThreshTextureThreshTextureThreshTextureThreshtextureThresh. This threshold is applied on both input images Image1Image1Image1Image1Image1image1 and Image2Image2Image2Image2Image2image2. In addition, ScoreThreshScoreThreshScoreThreshScoreThreshScoreThreshscoreThresh guarantees the matching quality and defines the maximum ('sad'"sad""sad""sad""sad""sad",'ssd'"ssd""ssd""ssd""ssd""ssd") or, respectively, minimum ('ncc'"ncc""ncc""ncc""ncc""ncc") score value of the correlation function. Setting FilterFilterFilterFilterFilterfilter to 'left_right_check'"left_right_check""left_right_check""left_right_check""left_right_check""left_right_check", moreover, increases the robustness of the returned matches, as the result relies on a concurrent direct and reverse match, whereas 'none'"none""none""none""none""none" switches it off.

The number of pyramid levels used to improve the time response of binocular_distancebinocular_distanceBinocularDistancebinocular_distanceBinocularDistanceBinocularDistance is determined by NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels. Following a coarse-to-fine scheme disparity images of higher levels are computed and segmentated into rectangular subimages to reduce the disparity range on the next lower pyramid level. TextureThreshTextureThreshTextureThreshTextureThreshTextureThreshtextureThresh and ScoreThreshScoreThreshScoreThreshScoreThreshScoreThreshscoreThresh are applied on every level and the returned domain of the DistanceDistanceDistanceDistanceDistancedistance and ScoreScoreScoreScoreScorescore images arises from the intersection of the resulting domains of every single level. Generally, pyramid structures are the more advantageous the more the distance image can be segmented into regions of homogeneous distance values and the bigger the disparity range must be specified. As a drawback, coarse pyramid levels might loose important texture information which can result in deficient distance values.

Finally, the value 'interpolation'"interpolation""interpolation""interpolation""interpolation""interpolation" for parameter SubDistanceSubDistanceSubDistanceSubDistanceSubDistancesubDistance increases the refinement and accuracy of the distance values. It is switched off by setting the parameter to 'none'"none""none""none""none""none".

Attention

If using cameras with telecentric lenses, the DistanceDistanceDistanceDistanceDistancedistance is not defined as the distance of a point to the camera but as the distance from the point to the plane, defined by the y-axes of both cameras and their baseline (see gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMap).

Parallelization

Parameters

Image1Image1Image1Image1Image1image1 (input_object)  singlechannelimage objectHImageHImageHImageHImageXHobject (byte)

Rectified image of camera 1.

Image2Image2Image2Image2Image2image2 (input_object)  singlechannelimage objectHImageHImageHImageHImageXHobject (byte)

Rectified image of camera 2.

DistanceDistanceDistanceDistanceDistancedistance (output_object)  singlechannelimage objectHImageHImageHImageHImageXHobject * (real)

Distance image.

ScoreScoreScoreScoreScorescore (output_object)  singlechannelimage objectHImageHImageHImageHImageXHobject * (real)

Evaluation of a distance value.

CamParamRect1CamParamRect1CamParamRect1CamParamRect1CamParamRect1camParamRect1 (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Internal camera parameters of the rectified camera 1.

Number of elements: CamParamRect1 == 8 || CamParamRect1 == 12

CamParamRect2CamParamRect2CamParamRect2CamParamRect2CamParamRect2camParamRect2 (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Internal camera parameters of the rectified camera 2.

Number of elements: CamParamRect2 == 8 || CamParamRect2 == 12

RelPoseRectRelPoseRectRelPoseRectRelPoseRectRelPoseRectrelPoseRect (input_control)  pose HPose, HTupleHTupleHTupleHPoseX, VARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Point transformation from rectified camera 2 to rectified camera 1.

Number of elements: 7

MethodMethodMethodMethodMethodmethod (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Matching function.

Default value: 'ncc' "ncc" "ncc" "ncc" "ncc" "ncc"

List of values: 'ncc'"ncc""ncc""ncc""ncc""ncc", 'sad'"sad""sad""sad""sad""sad", 'ssd'"ssd""ssd""ssd""ssd""ssd"

MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Width of the correlation window.

Default value: 11

Suggested values: 5, 7, 9, 11, 21

Restriction: 3 <= MaskWidth && odd(MaskWidth)

MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Height of the correlation window.

Default value: 11

Suggested values: 5, 7, 9, 11, 21

Restriction: 3 <= MaskHeight && odd(MaskHeight)

TextureThreshTextureThreshTextureThreshTextureThreshTextureThreshtextureThresh (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Variance threshold of textured image regions.

Default value: 0.0

Suggested values: 0.0, 2.0, 5.0, 10.0

Restriction: 0.0 <= TextureThresh

MinDisparityMinDisparityMinDisparityMinDisparityMinDisparityminDisparity (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Minimum of the expected disparities.

Default value: 0

Typical range of values: -32768 ≤ MinDisparity MinDisparity MinDisparity MinDisparity MinDisparity minDisparity ≤ 32767

MaxDisparityMaxDisparityMaxDisparityMaxDisparityMaxDisparitymaxDisparity (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Maximum of the expected disparities.

Default value: 30

Typical range of values: -32768 ≤ MaxDisparity MaxDisparity MaxDisparity MaxDisparity MaxDisparity maxDisparity ≤ 32767

NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Number of pyramid levels.

Default value: 1

List of values: 1, 2, 3, 4

Restriction: 1 <= NumLevels

ScoreThreshScoreThreshScoreThreshScoreThreshScoreThreshscoreThresh (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Threshold of the correlation function.

Default value: 0.0

List of values: 0.0, 2.0, 5.0, 10.0

FilterFilterFilterFilterFilterfilter (input_control)  string(-array) HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Downstream filters.

Default value: 'none' "none" "none" "none" "none" "none"

List of values: 'left_right_check'"left_right_check""left_right_check""left_right_check""left_right_check""left_right_check", 'none'"none""none""none""none""none"

SubDistanceSubDistanceSubDistanceSubDistanceSubDistancesubDistance (input_control)  string(-array) HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Distance interpolation.

Default value: 'none' "none" "none" "none" "none" "none"

List of values: 'interpolation'"interpolation""interpolation""interpolation""interpolation""interpolation", 'none'"none""none""none""none""none"

Example (HDevelop)

* read the internal and external stereo parameters
read_cam_par ('cam_left.dat', CamParam1)
read_cam_par ('cam_right.dat', CamParam2)
read_pose ('relpose.dat', RelPose)
* compute the mapping for rectified images
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, \
                                 RelPose, 1, 'geometric', 'bilinear', \
                                 CamParamRect1, CamParamRect2, \
                                 Cam1PoseRect1, Cam2PoseRect2, RelPoseRect)
* compute the distance values in online images
while (1)
  grab_image_async (Image1, AcqHandle1, -1)
  map_image (Image1, Map1, ImageMapped1)

  grab_image_async (Image2, AcqHandle2, -1)
  map_image (Image2, Map2, ImageMapped2)

  binocular_distance (ImageMapped1, ImageMapped2, Distance, Score, \
                      CamParamRect1, CamParam2, RelPoseRect, 'sad', \
                      11, 11, 20, -40, 20, 2, 25, \
                      'left_right_check', 'interpolation')
endwhile

Example (HDevelop)

* read the internal and external stereo parameters
read_cam_par ('cam_left.dat', CamParam1)
read_cam_par ('cam_right.dat', CamParam2)
read_pose ('relpose.dat', RelPose)
* compute the mapping for rectified images
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, \
                                 RelPose, 1, 'geometric', 'bilinear', \
                                 CamParamRect1, CamParamRect2, \
                                 Cam1PoseRect1, Cam2PoseRect2, RelPoseRect)
* compute the distance values in online images
while (1)
  grab_image_async (Image1, AcqHandle1, -1)
  map_image (Image1, Map1, ImageMapped1)

  grab_image_async (Image2, AcqHandle2, -1)
  map_image (Image2, Map2, ImageMapped2)

  binocular_distance (ImageMapped1, ImageMapped2, Distance, Score, \
                      CamParamRect1, CamParam2, RelPoseRect, 'sad', \
                      11, 11, 20, -40, 20, 2, 25, \
                      'left_right_check', 'interpolation')
endwhile

Example (HDevelop)

* read the internal and external stereo parameters
read_cam_par ('cam_left.dat', CamParam1)
read_cam_par ('cam_right.dat', CamParam2)
read_pose ('relpose.dat', RelPose)
* compute the mapping for rectified images
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, \
                                 RelPose, 1, 'geometric', 'bilinear', \
                                 CamParamRect1, CamParamRect2, \
                                 Cam1PoseRect1, Cam2PoseRect2, RelPoseRect)
* compute the distance values in online images
while (1)
  grab_image_async (Image1, AcqHandle1, -1)
  map_image (Image1, Map1, ImageMapped1)

  grab_image_async (Image2, AcqHandle2, -1)
  map_image (Image2, Map2, ImageMapped2)

  binocular_distance (ImageMapped1, ImageMapped2, Distance, Score, \
                      CamParamRect1, CamParam2, RelPoseRect, 'sad', \
                      11, 11, 20, -40, 20, 2, 25, \
                      'left_right_check', 'interpolation')
endwhile

Example (C++ (HALCON 5.0-10.0))

// read the internal and external stereo parameters
read_cam_par("cam_left.dat",CamParam1);
read_cam_par("cam_right.dat",CamParam2);
read_pose("relpose.dat",RelPose);
// compute the mapping for rectified images
gen_binocular_rectification_map(&Map1,&Map2,CamParam1,CamParam2,RelPose,1,
                                "geometric","bilinear",&CamParamRect1,
                                &CamParamRect2,&CamPoseRect1,&CamPoseRect2,
                                &RelPoseRect);
// compute the distance values in online images
while (1)
{
  grab_image_async(&Image1,AcqHandle1,-1);
  map_image(Image1,Map1,&ImageMapped1);

  grab_image_async(&Image2,AcqHandle2,-1);
  map_image(Image2,Map2,&ImageMapped2);

  binocular_distance(ImageMapped1,ImageMapped2,&Distance,&Score,
                     CamParamRect1,CamParamRect2,RelPose,"sad",11,11,
                     20,-40,20,2,25,"left_right_check","interpolation");
}

Example (HDevelop)

* read the internal and external stereo parameters
read_cam_par ('cam_left.dat', CamParam1)
read_cam_par ('cam_right.dat', CamParam2)
read_pose ('relpose.dat', RelPose)
* compute the mapping for rectified images
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, \
                                 RelPose, 1, 'geometric', 'bilinear', \
                                 CamParamRect1, CamParamRect2, \
                                 Cam1PoseRect1, Cam2PoseRect2, RelPoseRect)
* compute the distance values in online images
while (1)
  grab_image_async (Image1, AcqHandle1, -1)
  map_image (Image1, Map1, ImageMapped1)

  grab_image_async (Image2, AcqHandle2, -1)
  map_image (Image2, Map2, ImageMapped2)

  binocular_distance (ImageMapped1, ImageMapped2, Distance, Score, \
                      CamParamRect1, CamParam2, RelPoseRect, 'sad', \
                      11, 11, 20, -40, 20, 2, 25, \
                      'left_right_check', 'interpolation')
endwhile

Example (HDevelop)

* read the internal and external stereo parameters
read_cam_par ('cam_left.dat', CamParam1)
read_cam_par ('cam_right.dat', CamParam2)
read_pose ('relpose.dat', RelPose)
* compute the mapping for rectified images
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, \
                                 RelPose, 1, 'geometric', 'bilinear', \
                                 CamParamRect1, CamParamRect2, \
                                 Cam1PoseRect1, Cam2PoseRect2, RelPoseRect)
* compute the distance values in online images
while (1)
  grab_image_async (Image1, AcqHandle1, -1)
  map_image (Image1, Map1, ImageMapped1)

  grab_image_async (Image2, AcqHandle2, -1)
  map_image (Image2, Map2, ImageMapped2)

  binocular_distance (ImageMapped1, ImageMapped2, Distance, Score, \
                      CamParamRect1, CamParam2, RelPoseRect, 'sad', \
                      11, 11, 20, -40, 20, 2, 25, \
                      'left_right_check', 'interpolation')
endwhile

Result

binocular_disparitybinocular_disparityBinocularDisparitybinocular_disparityBinocularDisparityBinocularDisparity returns 2 (H_MSG_TRUE) if all parameter values are correct. If necessary, an exception is raised.

Possible Predecessors

map_imagemap_imageMapImagemap_imageMapImageMapImage

Possible Successors

thresholdthresholdThresholdthresholdThresholdThreshold

Alternatives

binocular_distance_mgbinocular_distance_mgBinocularDistanceMgbinocular_distance_mgBinocularDistanceMgBinocularDistanceMg, binocular_disparitybinocular_disparityBinocularDisparitybinocular_disparityBinocularDisparityBinocularDisparity, binocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMg

See also

map_imagemap_imageMapImagemap_imageMapImageMapImage, gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMap, binocular_calibrationbinocular_calibrationBinocularCalibrationbinocular_calibrationBinocularCalibrationBinocularCalibration, distance_to_disparitydistance_to_disparityDistanceToDisparitydistance_to_disparityDistanceToDisparityDistanceToDisparity, disparity_to_distancedisparity_to_distanceDisparityToDistancedisparity_to_distanceDisparityToDistanceDisparityToDistance, disparity_image_to_xyzdisparity_image_to_xyzDisparityImageToXyzdisparity_image_to_xyzDisparityImageToXyzDisparityImageToXyz

Module

3D Metrology


ClassesClassesClassesClasses | | | | Operators