1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 双目立体视觉之Halcon标定

双目立体视觉之Halcon标定

时间:2021-01-01 07:10:45

相关推荐

双目立体视觉之Halcon标定

标定结果

Halcon标定过程获取左右相机图像中标定板的区域;

find_caltab(Image:CalPlate:CalPlateDescr,SizeGauss,MarkThresh,MinDiamMarks:)

参数含义:

Image: 输入图像

CalPlate: 标定板区域

CalPlateDescr: 标定板描述文件

SizeGauss: 高斯滤波核;

MarkThresh, 提取mark的阈值

MinDiamMarks: 标定板中MARK圆的最小半径

提取左右相机图像中标定板的MARK点坐标和摄像机外部参数;

find_marks_and_pose(Image,CalPlateRegion: :CalPlateDescr,StartCamParam,StartThresh,DeltaThresh,MinThresh,Alpha,MinContLength,MaxDiamMarks:RCoord,CCoord,StartPose)

参数含义:

Image: 输入图像

CalPlateRegion: 标定板区域

CalPlateDescr: 标定板描述文件

StartCamParam: 摄像机内部参数

DeltaThresh: 提取MARK黑点所需的初始阈值

MinThresh: 提取MARK黑点步进阈值

Alpha: 提取MARK黑点轮廓的滤波参数

MinContLength: MARK黑点轮廓的最小长度

MaxDiamMarks: MARK黑点轮廓的最大直径

RCoord: 探测到MARK黑点的行坐标

CCoord: 探测到MARK黑点的列坐标

StartPose输出摄像机外部参数

执行双目标定;

binocular_calibration( : :NX,NY,NZ,NRow1,NCol1,NRow2,NCol2,StartCamParam1,StartCamParam2,NStartPose1,NStartPose2,EstimateParams:CamParam1,CamParam2,NFinalPose1,NFinalPose2,RelPose,Errors)

参数含义:

NX: 标定板MARK点行坐标(经过排序的,单位是米)

NY: 标定板MARK点列坐标(经过排序的,单位是米)

NZ: 标定板MARK点Z坐标(经过排序的,单位是米)

NRow1: 左面相机中标定板提取出的MARK点行坐标(经过排序的,单位是像素)

NCol1: 左面相机中标定板提取出的MARK点列坐标(经过排序的,单位是像素)

NRow2: 右面相机中标定板提取出的MARK点行坐标(经过排序的,单位是像素)

NCol2: 右面相机中标定板提取出的MARK点列坐标(经过排序的,单位是像素)

StartCamParam1:左面相机的摄像机内部参数

StartCamParam2:右面相机的摄像机内部参数

NStartPose1: 左面相机的摄像机外部参数

NStartPose2: 右面相机的摄像机外部参数

EstimateParams: 选择要标定出哪些相机参数,”all”代表所有的参数

CamParam1: 标定后得到的左面相机的摄像机内部参数

CamParam2: 标定后得到的右面相机的摄像机内部参数

NFinalPose1: 标定后得到的左面相机的摄像机外部参数

NFinalPose2: 标定后得到的右面相机的摄像机外部参数

RelPose: 右边相机相对于左面相机的位姿

Errors平均错误误差

获取非标准外极线几何到标准外极线几何之间的变换矩阵;

gen_binocular_rectification_map( :Map1,Map2:CamParam1,CamParam2,RelPose,SubSampling,Method,MapType:CamParamRect1,CamParamRect2,CamPoseRect1,CamPoseRect2,RelPoseRect)

参数含义:

Map1:左面相机校正映射数据

Map2:右面相机校正映射数据

CamParam1:左面相机的摄像机内部参数

CamParam2:右面相机的摄像机内部参数

RelPose: 右相机相对左相机的位姿

SubSampling:采样因子

Method: 映射校正方法

MapType: 映射校正类型

CamParamRect1: 左面相机校正以后的摄像机内部参数

CamParamRect2: 右面相机校正以后的摄像机内部参数

CamPoseRect1: 校正以后的左面相机相对原始相机的位姿

CamPoseRect2:校正以后的右面相机相对原始相机的位姿

RelPoseRect:校正以后的右面相机相对校正以后的左面相机的位姿关系

通过变换矩阵对未校正的图像进行图像校正

map_image(Image,Map:ImageMapped: : )

参数含义:

Image: 待校正图像

Map: 相机校正映射数据

ImageMapped: 校正后的图像

显示图像校正后标准外极线几何时的图像.

check_epipolar_constraint(ImageRectifiedL,ImageRectifiedR: :RectCamParL,RectCamParR,WindowHandle1,WindowHandle2,CaltabFile:EpipolarError)

参数含义:

ImageRectifiedL:左面相机校正以后的图像

ImageRectifiedR:右面相机校正以后的图像

RectCamParL:左面相机校正以后的摄像机内部参数

RectCamParR:右面相机校正以后的摄像机内部参数

WindowHandle1:左面摄像机图像窗口

WindowHandle2:右面摄像机图像窗口

CaltabFile:标定板文件

EpipolarError:错误信息

*设置离线图像存放的路径ImgPath := 'stereo/board/'Index := 1*读取左边相机离线图像read_image (ImageL, ImgPath + 'calib_l_' + Index$'02d')*读取右边相机离线图像read_image (ImageR, ImgPath + 'calib_r_' + Index$'02d')*关闭已经打开的窗口dev_close_window ()*关闭程序计数器,变量更新,图像更新窗口dev_update_off ()*获取左边相机图像大小get_image_size (ImageL, WidthL, HeightL)*创建左边的窗口dev_open_window (0, 0, WidthL, HeightL, 'black', WindowHandle1)*设置区域填充模式为边缘模式dev_set_draw ('margin')*设置输出对象的颜色为绿色dev_set_color ('green')*设置字体信息set_display_font (WindowHandle1, 14, 'mono', 'true', 'false')*获取右边相机图像大小get_image_size (ImageR, WidthR, HeightR)*创建右边的窗口dev_open_window (0, WidthL + 12, WidthL, HeightL, 'black', WindowHandle2)*设置区域填充模式为边缘模式dev_set_draw ('margin')*设置输出对象的颜色为绿色dev_set_color ('green')* 校正文件CaltabFile := 'caltab_30mm.descr'*获取标定板中所有mark点的中心坐标caltab_points (CaltabFile, X, Y, Z)* 设置左右两个相机的摄像机内部参数[Focus,Kappa,Sx,Sy,Cx,Cy,Whith,Height]StartCamParL := [0.0125,0,1.48e-5,1.48e-5,WidthL / 2.0,HeightL / 2.0,WidthL,HeightL]StartCamParR := StartCamParL* Parameter settings for find_caltab and find_marks_and_poseSizeGauss := 3MarkThresh := 120MinDiamMarks := 5StartThresh := 128DeltaThresh := 10MinThresh := 18Alpha := 0.9MinContLength := 15MaxDiamMarks := 100* Create the tuples in which the image coordinates of the* calibration marks and the initial poses will be accumulatedRowsL := []ColsL := []StartPosesL := []RowsR := []ColsR := []StartPosesR := []* Start the loop over the calibration imagesfor Index := 1 to 15 by 1* 读取左面相机拍照的标定板图像read_image (ImageL, ImgPath + 'calib_l_' + Index$'02d')* 读取右面相机拍照的标定板图像read_image (ImageR, ImgPath + 'calib_r_' + Index$'02d')* 分割左面相机拍照的标定板图像标定板区域find_caltab (ImageL, CaltabL, CaltabFile, SizeGauss, MarkThresh, MinDiamMarks)* 分割右面相机拍照的标定板图像标定板区域find_caltab (ImageR, CaltabR, CaltabFile, SizeGauss, MarkThresh, MinDiamMarks)*激活左面的窗口dev_set_window (WindowHandle1)*显示左面相机拍照的标定板图像dev_display (ImageL)*显示左面相机拍照的标定板图像标定板区域dev_display (CaltabL)*激活右面的窗口dev_set_window (WindowHandle2)*显示右面相机拍照的标定板图像dev_display (ImageR)*显示右面相机拍照的标定板图像标定板区域dev_display (CaltabR)*提取左面相机拍照的标定板中MARK点坐标和摄像机外部参数find_marks_and_pose (ImageL, CaltabL, CaltabFile, StartCamParL, StartThresh, DeltaThresh, MinThresh, Alpha, MinContLength, MaxDiamMarks, RCoordL, CCoordL, StartPoseL)*显示左面图像中标定板三维模型disp_caltab (WindowHandle1, CaltabFile, StartCamParL, StartPoseL, 1)*提取右面相机拍照的标定板中MARK点坐标和摄像机外部参数find_marks_and_pose (ImageR, CaltabR, CaltabFile, StartCamParR, StartThresh, DeltaThresh, MinThresh, Alpha, MinContLength, MaxDiamMarks, RCoordR, CCoordR, StartPoseR)*显示右面图像中标定板三维模型disp_caltab (WindowHandle2, CaltabFile, StartCamParR, StartPoseR, 1)*将17张左面相机拍照图像的MARK点行坐标连接起来RowsL := [RowsL,RCoordL]*将17张左面相机拍照图像的MARK点列坐标连接起来ColsL := [ColsL,CCoordL]*将左面相机的摄像机外部参数连接起来StartPosesL := [StartPosesL,StartPoseL]*将17张右面相机拍照图像的MARK点行坐标连接起来RowsR := [RowsR,RCoordR]*将17张右面相机拍照图像的MARK点列坐标连接起来ColsR := [ColsR,CCoordR]*将右面相机的摄像机外部参数连接起来StartPosesR := [StartPosesR,StartPoseR]endfor* 执行双目标定binocular_calibration (X, Y, Z, RowsL, ColsL, RowsR, ColsR, StartCamParL, StartCamParR, StartPosesL, StartPosesR, 'all', CamParamL, CamParamR, NFinalPoseL, NFinalPoseR, cLPcR, Errors)* If required, save the results to disk:* write_cam_par (CamParamL, 'cam_left-125.dat')* write_cam_par (CamParamR, 'cam_right-125.dat')* write_pose (cLPcR, 'pos_right2left.dat')* 获取非标准外极线几何到标准外极线几何之间的变换关系gen_binocular_rectification_map (MapL, MapR, CamParamL, CamParamR, cLPcR, 1, 'geometric', 'bilinear', RectCamParL, RectCamParR, CamPoseRectL, CamPoseRectR, RectLPosRectR)*读取左相机拍照的一张图read_image (ImageL, ImgPath + 'calib_l_01')*读取右相机拍照的一张图read_image (ImageR, ImgPath + 'calib_r_01')*根据上述变换关系,对左相机拍照图进行校正map_image (ImageL, MapL, ImageRectifiedL)*根据上述变换关系,对右相机拍照图进行校正map_image (ImageR, MapR, ImageRectifiedR)显示最后的双目标定结果,得到标准外极线几何时的图像.check_epipolar_constraint (ImageRectifiedL, ImageRectifiedR, RectCamParL, RectCamParR, WindowHandle1, WindowHandle2, CaltabFile, EpipolarError)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。