Halcon相机标定

Halcon程序


*相机的内参数:
*f:相机的主矩,即焦距
*k:径向扭曲的大小,即径向畸变,一般不考虑切向畸变
*sx,sy:图像传感器在水平和垂直方向上相邻像素之间的距离
*cx,cy: 投影中心在成像平面的垂直投影

*相机外参数
*平移向量X,Y,Z
*旋转向量X,Y,Z

*透视矫正

dev_close_window()
dev_update_off()
dev_set_draw('margin')
read_image(Image, 'scratch/scratch_perspective')
get_image_size(Image, Width, Height)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
set_display_font(WindowHandle, 16, 'mono', 'true', 'false')
dev_display(Image)
disp_continue_message(WindowHandle, 'black', 'true')

*标定相机

*标定板描述文件
CaltabName := 'caltab_30mm.descr'

*初始内参数
*参数:焦距,厚度,单个像元的宽,单个像元的高,图形中心x,图像中心y,图形宽,图像高
StartCamPar := [0.012,0,0.0000055,0.0000055, Width/2, Height/2, Width, Height]

*创建标定数据模型
create_calib_data('calibration_object', 1, 1, CalibDataID)

*设置标定相机参数模型
set_calib_data_cam_param(CalibDataID, 0, 'area_scan_division', StartCamPar)

*在标定模型中制定标定板描述文件
set_calib_data_calib_object(CalibDataID, 0, CaltabName)

***********************************
*获得标定板描述文件中标志点中心坐标
* caltab_points(CaltabName,X, Y, Z)
* NStartPose := []
* NRow := []
* NCol := []
***********************************

NumImages := 12
for i :=1 to NumImages by 1
read_image(Image, 'scratch/scratch_calib_'+i$'02d')
dev_display(Image)
*寻找标定板区域
find_caltab(Image, Caltab, CaltabName, 3, 112, 5)
dev_set_color('green')
dev_display(Caltab)

*寻找标定板标志点坐标和预估外参
find_marks_and_pose(Image, Caltab, CaltabName, StartCamPar,128, 10, 18, 0.9, 15, 100, RCoord, CCoord, StartPose)
dev_set_color('red')
disp_circle(WindowHandle, RCoord, CCoord, gen_tuple_const(|RCoord|,2.5))
dev_set_part(0, 0, Height-1, Width-1)

*储存标定信息到标定板模型
set_calib_data_observ_points(CalibDataID, 0, 0, i, RCoord, CCoord,'all', StartPose)

******************************
*组合所有标定外参数和中心坐标
* NStartPose := [NStartPose, StartPose]
* NRow := [NRow, RCoord]
* NCol := [NCol, CCoord]
******************************
endfor

******************************
*标定相机所有参数(可以不使用算子set_calib_data_observ_points)
* camera_calibration(X, Y, Z, NRow, NCol, StartCamPar, NStartPose, 'all', CameraParam, NFinalPose, Errors)
******************************

*标定相机参数
calibrate_cameras(CalibDataID, Error)

*获取相机内参数
get_calib_data(CalibDataID,'camera',0, 'params', CamParam)

*获取相机外参数
get_calib_data(CalibDataID, 'calib_obj_pose',[0,1],'pose',PoseCalib)


*转换原点坐标
set_origin_pose(StartPose, -0.04, -0.03, 0.00075, Pose)

*设置标定后的图像一个像素代表的实际距离
PixelDist := 0.00013

*生成映像图像
gen_image_to_world_plane_map(Map, CamParam, Pose, Width, Height, Width, Height, PixelDist, 'bilinear')

Imagefiles := ['scratch/scratch_calib_01','scratch/scratch_perspective']
for i:= 1 to 2 by 1
read_image(Image, Imagefiles[i-1])
dev_set_window(WindowHandle)
dev_display(Image)


*应用映像转换图像
map_image(Image, Map,ImageMapped)

endfor


camera_parameters.dat文件内容

#
# INTERNAL CAMERA PARAMETERS
#

# ===== generic parameter syntax ==========================================
#
# Syntax: ParGroup: <pargroupname>;
# <pargroup_description>;
#
# <name> : <shortname> : <default_value>;
# <type> : <lower_bound> : <upper_bound>;
# <description>;
#
# [ <type> ::= BOOL|XBOOL|INT|FLOAT|DOUBLE|STRING ]
#
# =========================================================================

##############################################################################
#
# Camera : Parameter
# > Focus
# > Kappa
# > Sx
# > Sy
# > Cx
# > Cy
# > ImageWidth
# > ImageHeight
#
##############################################################################

ParGroup: Camera: Parameter;
"Internal camera parameters";

Focus:foc: 0.0161703501831527;
DOUBLE:0.0:;
"Focal length of the lens";

Kappa:kappa: -639.990421851654;
DOUBLE::;
"Radial distortion coefficient";

Sx:sx: 7.40108791846177e-006;
DOUBLE:0.0:;
"Width of a cell on the sensor";

Sy:sy: 7.4e-006;
DOUBLE:0.0:;
"Height of a cell on the sensor";

Cx:cx: 333.895895987285;
DOUBLE::;
"X-coordinate of the image center";

Cy:cy: 244.935973115852;
DOUBLE::;
"Y-coordinate of the image center";

ImageWidth:imgw: 652;
INT:1:32768;
"Width of the images";

ImageHeight:imgh: 494;
INT:1:32768;
"Height of the images";


#
# HALCON Version 12.0 -- Tue Apr 14 22:41:15 2015
#


camera_pose.dat文件内容

#
# 3D POSE PARAMETERS: rotation and translation
#

# Used representation type:
f 0

# Rotation angles [deg] or Rodriguez vector:
r 3.11886998639614 358.984666972156 30.2659614074603

# Translation vector (x y z [m]):
t 0.0248668618545196 0.0133955230862179 0.401474091384729

#
# HALCON Version 12.0 -- Tue Apr 14 22:41:15 2015

#


原文地址:https://www.cnblogs.com/iluzhiyong/p/Halcon.html