Halcon 在3D 模組使用前需要將相機做參數校正

首先 需要設定 要使用的相機組成(CameraType)  與 相機與鏡頭的參數(CameraPAram)

 

CameraType 這邊參考 Halcon 的文件 選擇 合適的 Type

 

CameraTypeCameraParam#
'area_scan_division' [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight] 8
'area_scan_telecentric_division' [0, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight] 8
'area_scan_tilt_division' [Focus, Kappa, Tilt, Rot, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight] 10
'area_scan_telecentric_tilt_division' [0, Kappa, Tilt, Rot, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight] 10
'area_scan_polynomial'  [Focus, K1, K2, K3, P1, P2, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]                                                                                                                          
12
'area_scan_telecentric_polynomial' [0, K1, K2, K3, P1, P2, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]                
12
'area_scan_tilt_polynomial' [Focus, K1, K2, K3, P1, P2, Tilt, Rot, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]                      
14
'area_scan_telecentric_tilt_polynomial' [0, K1, K2, K3, P1, P2, Tilt, Rot, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]                              
14
'line_scan' [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz] 11

比較特別的是 Camera Param 這部分

Facus :

如果是 telecentric的鏡頭 Facus 是填 0,如果不是,那就要看鏡頭本身的參數  

比如手上用的是 25mm 的 CCTV 鏡頭,就填入0.025

 

Kappa :

這部分的參數先填 0 ,後面校正結束 Halcon 會填入

Sx Sy: 填入 X PixelSize 與 Y PixelSize

Cx Cy: 填入影像  1/2 寬   1/2高 的數值

ImageWidth : 填入影像寬

ImageHeight : 填入影像高

 

整個設定過程:

StartCamPar1 :=[0.025,0,0.0000074,0.0000074,320,240,640,480]

caltabFile := 'D:/Study/Halcon/3D/Caltab/caltab_50mm.descr'

create_calib_data ('calibration_object', 1, 1, CalibDataID)

set_calib_data_cam_param (CalibDataID, 0, 'area_scan_division', StartCamPar1)

 

設定好之後 就可以開始 拍 校正版的影像 

 

使用 calibration plates with hexagonally arranged marks 最少拍攝 6張

 

 

 

使用 calibration plates with rectangularly arranged marks 需拍攝 10~20張

 grab_image(Image,AcqHandle)
 dev_display (Image)
 find_calib_object (Image, CalibDataID, 0, 0, I, [], [])
 get_calib_data_observ_contours (Caltab, CalibDataID, 'caltab', 0, 0, I)
 dev_display (Caltab)

 

最後取得校正的參數   將 校正後的參數 寫到硬碟

calibrate_cameras (CalibDataID, Error)
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)
write_cam_par (CamParam, 'camera_parameters.dat')

文章標籤
全站熱搜
創作者介紹
創作者 Rh 的頭像
Rh

程式狂想曲

Rh 發表在 痞客邦 留言(1) 人氣(2,225)