使用标定板几个特定的点,来对相机相对标定板平面进行位姿估计。
首先进行相机的畸变校正,之后同个各个标定板间的圆点距离进行位姿估计。
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 01CameraParameters := [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')
* endforsmallest_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 1ImageX[Index2]:=Parameter[Index2*3+1]ImageY[Index2]:=Parameter[Index2*3]ImageR[Index2]:=Parameter[Index2*3+2]endforstop ()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 1switch (Index)case 1:i:=21breakcase 2:i:=27breakcase 3:i:=3breakcase 4:i:=45breakendswitchgen_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')endforstop ()* Image Acquisition 01: Do something
endwhile
close_framegrabber (AcqHandle)