使用标定板对相机位姿进行估计

使用标定板几个特定的点,来对相机相对标定板平面进行位姿估计。
首先进行相机的畸变校正,之后同个各个标定板间的圆点距离进行位姿估计。

gen_caltab (7, 7, 0.002, 0.5, 'C:/Users/22967/Desktop/新建文件夹/111.descr', 'C:/Users/22967/Desktop/新建文件夹/111.ps')

* Calibration 01: Code generated by Calibration 01

CameraParameters := [0.0268153,-459.834,4.50082e-006,4.5e-006,748.73,595.192,1600,1200]
CameraPose := [0.00274873,0.000129115,0.110939,0.217706,359.69,179.703,0]
stop ()

* Calibration 01: Code generated by Calibration 01
CameraParameters := [0.0267739,-431.255,4.49971e-006,4.5e-006,768.8,628.601,1600,1200]
CameraPose := [-0.00722893,0.00318776,0.119628,359.941,0.528423,179.582,0]
stop ()




*标定板畸变矫正准备
create_metrology_model (MetrologyHandle)
change_radial_distortion_cam_par ('fixed', CameraParameters, 0, CamParVirtualFixed)
gen_radial_distortion_map(MapFixed,CameraParameters,CamParVirtualFixed,'bilinear')


* Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('GigEVision', 0, 0, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', 'acA1600-60gm', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
    grab_image_async (Image, AcqHandle, -1)
    
    dev_display (Image)
    
    map_image(Image,MapFixed,ImageRectifiedFixed)
    
    mean_image (ImageRectifiedFixed, ImageMean, 19, 19)
    dyn_threshold (ImageRectifiedFixed, ImageMean, RegionDynThresh, 5, 'dark')
    fill_up_shape (RegionDynThresh, RegionFillUp, 'area', 1, 1000)
    connection (RegionFillUp, ConnectedRegions)
    
    select_shape (ConnectedRegions, SelectedRegions, ['area','circularity'], 'and', [901.33,0.8662], [50000,1])
    sort_region (SelectedRegions, SortedRegions, 'character', 'true', 'row')
    area_center (SortedRegions, Area, Row2, Column2)
*     for Index3 := 0 to 48 by 1
*         disp_message (3600, Index3+1, 'image', Row2[Index3]+50, Column2[Index3]-50, 'black', 'true')
*     endfor
    smallest_circle (SortedRegions, Row, Column, Radius)
*     for Index3 := 0 to 48 by 1
*         disp_message (3600, Index3+1, 'image', Row[Index3]+50, Column[Index3]-50, 'black', 'true')
*     endfor
*     stop ()
    
    * 卡尺测量
    add_metrology_object_circle_measure (MetrologyHandle, Row, Column, Radius, Radius[0]/5, Radius[0]/60, 1, 10, ['measure_distance','min_score'], [Radius[0]/30,0.2], Index1)
    apply_metrology_model (ImageRectifiedFixed, MetrologyHandle)
    gen_empty_obj (Contours)
    get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row1, Column1)
    get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter)
    get_metrology_object_result_contour (Contour, MetrologyHandle, 'all', 'all', 1.5)
    
    
    for Index2 := 0 to |Row|-1 by 1
        ImageX[Index2]:=Parameter[Index2*3+1]
        ImageY[Index2]:=Parameter[Index2*3]
        ImageR[Index2]:=Parameter[Index2*3+2]
    endfor
    stop ()
    dev_display (ImageRectifiedFixed)
*     gen_cross_contour_xld (Cross, ImageY[24], ImageX[24], 26, 0.785398)
*     disp_message (3600, 24, 'image', ImageY[24]+50, ImageX[24]-50, 'black', 'true')
*     gen_cross_contour_xld (Cross, ImageY[21], ImageX[21], 26, 0.785398)
*     gen_cross_contour_xld (Cross, ImageY[27], ImageX[27], 26, 0.785398)
*     distance_pp (ImageY[24], ImageX[24], ImageY[21], ImageX[21], DistanceLeft)
*     distance_pp (ImageY[24], ImageX[24], ImageY[27], ImageX[27], DistanceRight)
    gen_cross_contour_xld (Cross, ImageY[24], ImageX[24], 26, 0.785398)
    disp_message (3600, 24, 'image', ImageY[24]+50, ImageX[24]-50, 'black', 'true')
    for Index := 1 to 4 by 1
        switch (Index)
        case 1:
            i:=21
            break
        case 2:
            i:=27
            break
        case 3:
            i:=3
            break
        case 4:
            i:=45
            break
        endswitch
        gen_cross_contour_xld (Cross, ImageY[i], ImageX[i], 26, 0.785398)
        disp_message (3600, i, 'image', ImageY[i]+50, ImageX[i]-50, 'black', 'true')
        distance_pp (ImageY[24], ImageX[24], ImageY[i], ImageX[i], Distance)
        disp_message (3600, Distance, 'image', ImageY[i]+150, ImageX[i]-50, 'black', 'true')
    endfor
    stop ()
    * Image Acquisition 01: Do something
endwhile
close_framegrabber (AcqHandle)

猜你喜欢

转载自blog.csdn.net/cashmood/article/details/111629172