这个不是hlacon的标准标定板。
勇哥想知道这个+-0.009mm是怎么整出来了。这个例子值得研究一下。
ImgPath := '3d_machine_vision/calib/' dev_close_window () dev_open_window (0, 0, 640, 480, 'black', WindowHandle) dev_update_off () dev_set_draw ('margin') dev_set_line_width (3) set_display_font (WindowHandle, 22, 'mono', 'true', 'false') * * Calibrate the camera. * gen_cam_par_area_scan_division (0.012, 0, 0.00000375, 0.00000375, 640, 480, 1280, 960, StartCamPar) create_calib_data ('calibration_object', 1, 1, CalibDataID) set_calib_data_cam_param (CalibDataID, 0, [], StartCamPar) set_calib_data_calib_object (CalibDataID, 0, 'calplate_80mm.cpd') NumImages := 7 for I := 1 to NumImages by 1 read_image (Image, ImgPath + 'calib_image_' + I$'02d') dev_display (Image) find_calib_object (Image, CalibDataID, 0, 0, I, [], []) get_calib_data_observ_contours (Caltab, CalibDataID, 'caltab', 0, 0, I) get_calib_data_observ_points (CalibDataID, 0, 0, I, Row, Column, Index, StartPose) dev_set_color ('green') dev_display (Caltab) dev_set_color ('red') disp_circle (WindowHandle, Row, Column, gen_tuple_const(|Row|,1.5)) endfor calibrate_cameras (CalibDataID, Errors) get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam) * The reference image, i.e., the image in which the calibration * plate is located on the ruler is the first image get_calib_data (CalibDataID, 'calib_obj_pose', [0,1], 'pose', Pose) * To take the thickness of the calibration plate into account, the z-value * of the origin given by the camera pose has to be translated by the * thickness of the calibration plate. * Deactivate the following line if you do not want to add the correction. set_origin_pose (Pose, 0, 0, 0.002, Pose) * measure the distance between the pitch lines read_image (Image, ImgPath + 'ruler') dev_display (Image) gen_measure_rectangle2 (690, 680, rad(-0.25), 480, 8, 1280, 960, 'bilinear', MeasureHandle) measure_pairs (Image, MeasureHandle, 0.5, 5, 'all', 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance) Row := (RowEdgeFirst + RowEdgeSecond) / 2.0 Col := (ColumnEdgeFirst + ColumnEdgeSecond) / 2.0 disp_cross (WindowHandle, Row, Col, 20, rad(45)) image_points_to_world_plane (CamParam, Pose, Row, Col, 'mm', X1, Y1) distance_pp (X1[0:11], Y1[0:11], X1[1:12], Y1[1:12], Distance) tuple_mean (Distance, MeanDistance) tuple_deviation (Distance, DeviationDistance) disp_message (WindowHandle, 'Mean distance: ' + MeanDistance$'.3f' + 'mm +/- ' + DeviationDistance$'.3f' + 'mm', 'window', 30, 60, 'yellow', 'false')
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


