Halcon 相机内部参数(camera_calibration_internal.hdev)

发布时间 2023-12-28 15:34:27作者: echo-efun

1.gen_cam_par_area_scan_division — Generate a camera parameter tuple for an area scan camera with distortions modeled by the division model     为面阵相机生成一个相机参数元组,该元组具有由分割模型建模的畸变

  gen_cam_par_area_scan_division (0.016, 0, 0.0000074, 0.0000074, 326, 247, 652, 494, StartCamPar)

  CameraParam := ['area_scan_division',Focus,Kappa,Sx,Sy,Cx,Cy,ImageWidth,ImageHeight]

2.set_calib_data_cam_param     在校准数据模型中设置相机的类型和初始参数

  相机类型及其各自参数的概述:

        a.面阵相机与常规镜头    

    Projective area scan cameras(投射面阵扫描相机)

      'area_scan_division'
      ['area_scan_division', Focus, Kappa(畸变), Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]

      'area_scan_polynomial'
      ['area_scan_polynomial', Focus, K1, K2, K3, P1, P2, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]

    Telecentric area scan cameras(远心面阵扫描相机)

      'area_scan_telecentric_division'
      ['area_scan_telecentric_division', Magnification(放大倍率), Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]

      'area_scan_telecentric_polynomial'
      ['area_scan_telecentric_polynomial(多项式)', Magnification, K1, K2, K3, P1, P2, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]

  b.线阵相机

    Projective line scan cameras(投射线阵扫描相机)

      'line_scan_division'
      ['line_scan_division', Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]

      'line_scan_polynomial'
      ['line_scan_polynomial', Focus, K1, K2, K3, P1, P2, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]

    Telecentric line scan cameras(远心线阵扫描相机)

      'line_scan_telecentric_division'
      ['line_scan_telecentric_division', Magnification, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]

      'line_scan_telecentric_polynomial'
      ['line_scan_telecentric_polynomial', Magnification, K1, K2, K3, P1, P2, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]

ImgPath := '3d_machine_vision/calib/'
dev_close_window ()
dev_open_window (0, 0, 652, 494, 'black', WindowHandle)
dev_update_off ()
dev_set_draw ('margin')
dev_set_line_width (3)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
* 
* Calibrate the camera.
* 
gen_cam_par_area_scan_division (0.016, 0, 0.0000074, 0.0000074, 326, 247, 652, 494, StartCamPar)
create_calib_data ('calibration_object', 1, 1, CalibDataID)
set_calib_data_cam_param (CalibDataID, 0, [], StartCamPar)
set_calib_data_calib_object (CalibDataID, 0, 'caltab_30mm.descr')
NumImages := 10
* Note, we do not use the image from which the pose of the measurement plane can be derived
for I := 1 to NumImages by 1
    read_image (Image, ImgPath + 'calib_' + I$'02d')
    dev_display (Image)
    find_calib_object (Image, CalibDataID, 0, 0, I, [], [])
    get_calib_data_observ_contours (Caltab, CalibDataID, 'caltab', 0, 0, I)
    dev_set_color ('green')
    dev_display (Caltab)
endfor
calibrate_cameras (CalibDataID, Error)
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)
* Write the internal camera parameters to a file
write_cam_par (CamParam, 'camera_parameters.dat')
Message := 'Interior camera parameters have'
Message[1] := 'been written to file'
disp_message (WindowHandle, Message, 'window', 12, 12, 'red', 'false')
clear_calib_data (CalibDataID)
View Code