zoukankan      html  css  js  c++  java
  • Halcon四 双目视觉的标定

    原文作者写的一系列博客,挺不错的学习halcon:http://blog.sina.com.cn/s/blog_442bfe0e0100yjtn.html

    1.get_image_pointer1(Image : : : PointerTypeWidthHeight)

    返回第一通道的点,图像数据类型,图像尺寸。

    2.disp_image(Image : : WindowHandle : )

    在输出窗口显示灰度图像

    3.visualize_results_of_find_marks_and_pose (ImageL, WindowHandle1, RCoordL, CCoordL, StartPoseL, StartCamParL)

    内部函数,显示初步标定的坐标系和MARKS中心,MARKS中线用十字线标出。

    4.set_calib_data_observ_points( : : CalibDataIDCameraIdxCalibObjIdx,CalibObjPoseIdxRowColumnIndexPose : )

    储存以点为基础的标定观测值,将观测值储存与标定数据句柄中。

    5.calibrate_cameras( : : CalibDataID : Error)

    根据标定数据模型中的值标定摄像机。

    6.get_calib_data( : : CalibDataIDItemTypeItemIdxDataName : DataValue)

    查询储存或计算得到的标定模型中的数据。

    7.write_cam_par( : : CameraParamCamParFile : )

    把相机内参数写入TXT文件

    8.write_pose( : : PosePoseFile : )

    把相机的位姿写入TXT文件

    9.gen_binocular_rectification_map( : Map1Map2 : CamParam1CamParam2RelPose,SubSamplingMethodMapType : CamParamRect1CamParamRect2CamPoseRect1,CamPoseRect2RelPoseRect)

    把相机参数和姿态作为输入,输出为校正图像和矫正后的参数和姿态。

    10.map_image(ImageMap : ImageMapped : : )

    dev_update_window ('off')
    * Set the image path
    ImgPath := '3d_machine_vision/stereo/'
    * Read the first images to get their size
    i := 0
    read_image (ImageL, ImgPath+'calib_distorted_l_'+i$'03d')
    read_image (ImageR, ImgPath+'calib_distorted_r_'+i$'03d') //分别读取左右目图像,编号长3位//
    * Reopen the windows with an appropriate size
    dev_close_window ()
    dev_close_window ()
    get_image_pointer1 (ImageL, PointerL, TypeL, WidthL, HeightL)
    get_image_pointer1 (ImageR, PointerR, TypeR, WidthR, HeightR)
    dev_open_window (0, 0, WidthL, HeightL, 'black', WindowHandle1)
    dev_open_window (0, WidthL+5, WidthL, HeightL, 'black', WindowHandle2)//为左右目各打开一

                                                                            个图形窗口//
    * Set the calibration plate description file
    CaltabName := 'caltab_30mm.descr'
    * Set the initial values for the interior camera parameters
    StartCamParL := [0.0125, 0, 7.4e-6, 7.4e-6,WidthL/2.0,HeightL/2.0,WidthL,HeightL]
    StartCamParR := StartCamParL
    * parameter settings for find_caltab and find_marks_and_pose
    SizeGauss := 3
    MarkThresh := 120
    MinDiamMarks := 5
    StartThresh := 128
    DeltaThresh := 10
    MinThresh := 18
    Alpha := 0.9
    MinContLength := 15
    MaxDiamMarks := 100
    * Create a calibration data model in which all calibration data
    * including the image coordinates of the calibration marks and
    * the observation poses of the calibration plate will be
    * accumulated
    create_calib_data ('calibration_object', 2, 1, CalibDataID)      //创建标定数据模型句柄//
    set_calib_data_cam_param (CalibDataID, 0, 'area_scan_division', StartCamParL)//在标定模型中

                                                                         设置相机的类型和原始参数//
    set_calib_data_cam_param (CalibDataID, 1, 'area_scan_division', StartCamParR)
    set_calib_data_calib_object (CalibDataID, 0, CaltabName)        //定义一个标定对象//

    * Start the loop over the calibration images
    for i := 0 to 10 by 1
        * Read and display the calibration images
        read_image (ImageL, ImgPath+'calib_distorted_l_'+i$'03d')
        read_image (ImageR, ImgPath+'calib_distorted_r_'+i$'03d')
        disp_image (ImageL, WindowHandle1)
        disp_image (ImageR, WindowHandle2)                         //读取并显示图像//
        * Search for the calibration plate
      find_caltab (ImageL, CaltabL, CaltabName, SizeGauss, MarkThresh, MinDiamMarks)
      find_caltab (ImageR, CaltabR, CaltabName, SizeGauss, MarkThresh, MinDiamMarks)//输出标定板区域//
        disp_region (CaltabL, WindowHandle1)
        disp_region (CaltabR, WindowHandle2)                     //显示标定区域//          
        * Extract the calibration marks and estimate an initial pose
        find_marks_and_pose (ImageL, CaltabL, CaltabName, StartCamParL, StartThresh, DeltaThresh, MinThresh, Alpha, MinContLength, MaxDiamMarks, RCoordL, CCoordL, StartPoseL)
        * Visualize the extracted calibration marks and the
        * coordinate system defined by the estimated pose.
        visualize_results_of_find_marks_and_pose (ImageL, WindowHandle1, RCoordL, CCoordL, StartPoseL, StartCamParL)                      //显示初步标定的坐标系和MARKS中心//
        * Extraction of marks and pose as well as visualization of the
        * results for the second image.
        find_marks_and_pose (ImageR, CaltabR, CaltabName, StartCamParR, StartThresh, DeltaThresh, MinThresh, Alpha, MinContLength, MaxDiamMarks, RCoordR, CCoordR, StartPoseR)
        visualize_results_of_find_marks_and_pose (ImageR, WindowHandle2, RCoordR, CCoordR, StartPoseR, StartCamParR)
        * Store the image coordinates of the calibration marks as well
        * as the estimated initial poses for all stereo pairs in the
        * calibration data model
        *  - Camera 0 is the (L)eft camera
        *  - Camera 1 is the (R)ight camera
        set_calib_data_observ_points (CalibDataID, 0, 0, i, RCoordL, CCoordL, 'all', StartPoseL)
        set_calib_data_observ_points (CalibDataID, 1, 0, i, RCoordR, CCoordR, 'all', StartPoseR)
                                                            //在标定数据模型句柄中储存标定结果//

    endfor
    * Perform the actual calibration
    calibrate_cameras (CalibDataID, Errors)         //根据标定数据模型中的值标定摄像机//
    * Get the calibrated camera parameters
    get_calib_data (CalibDataID, 'camera', 0, 'params', CamParamL)
    get_calib_data (CalibDataID, 'camera', 1, 'params', CamParamR)      //获取摄像机参数//
    * Since the left camera is the reference camera for the
    * calib data model, the pose of the right camera is its
    * pose relative to the left camera
    get_calib_data (CalibDataID, 'camera', 1, 'pose', cLPcR)    //获取右目相对于左目的位姿//
    * Store the results into files
    write_cam_par (CamParamL, 'cam_left-125.dat')
    write_cam_par (CamParamR, 'cam_right-125.dat')
    write_pose (cLPcR, 'pos_right2left.dat')                    //将相机参数写入文件//
    * Generate the rectification maps
    gen_binocular_rectification_map (MapL, MapR, CamParamL, CamParamR, cLPcR, 1, 'geometric', 'bilinear', RectCamParL, RectCamParR, CamPoseRectL, CamPoseRectR, RectLPosRectR)
     //把相机参数和姿态作为输入,输出为校正图像和矫正后的参数和姿态。//
    * Read in a stereo image pair, aquired with the stereo camera system,
    * which has been calibrated, just now.
    read_image (ImageL, ImgPath+'caliper_distorted_l')
    read_image (ImageR, ImgPath+'caliper_distorted_r')
    * Rectify the stereo images and display them
    map_image (ImageL, MapL, ImageRectifiedL)
    map_image (ImageR, MapR, ImageRectifiedR)
    dev_set_window (WindowHandle1)
    dev_clear_window ()
    dev_display (ImageRectifiedL)
    dev_set_window (WindowHandle2)
    dev_clear_window ()
    dev_display (ImageRectifiedR)
    disp_continue_message (WindowHandle1, 'black', 'true')
    stop ()
    dev_set_window (WindowHandle2)
    dev_close_window ()
    dev_update_window ('on')
    dev_set_window (WindowHandle1)
    dev_clear_window ()
    dev_display (ImageRectifiedL)
    clear_calib_data (CalibDataID)

  • 相关阅读:
    判断集合关系(自反,反自反,对称,反对称,传递)
    LINUX查看系统日志
    恶意代码分析——静态分析高级技术
    恶意代码分析——动、静态分析基础技术
    链表实现多项式相加和相乘
    一个完整顺序表的实现
    数据结构顺序表删除所有特定元素x
    数据结构-顺序表插入元素时扩容问题
    apscheduler定时器
    tkinter Scale滑块
  • 原文地址:https://www.cnblogs.com/6-6-8-8/p/9549622.html
Copyright © 2011-2022 走看看