图像畸变矫正与透视变换
- Halcon自动生成的圆形棋盘格
- Halcon透视变换
Halcon自动生成的圆形棋盘格
示例程序:
*生成棋圆形棋盘格 行 列 直径 直径/距离比值
gen_caltab (12, 9, 0.002, 0.5, 'caltab_12X9.descr', 'caltab.ps')
*生成相机参数 焦距 畸变系数 X解析度 Y解析度 图像中心 图像宽高
gen_cam_par_area_scan_division (0.035, 0, 0.0000137,0.0000137,Width/2, Height/2, Width, Height, CameraParam1)
set_calib_data_cam_param (CalibDataID, 0, [], CameraParam1)
set_calib_data_calib_object (CalibDataID, 0, 'caltab_12X9.descr')
find_calib_object (ImageResult1, CalibDataID, 0, 0, 0,'alpha',0.2)
get_calib_data_observ_contours (Ellipses, CalibDataID, 'marks', 0, 0,0)
calibrate_cameras (CalibDataID, Error)
get_calib_data (CalibDataID, 'camera', 0, 'params', DataValue)
*畸变矫正
change_radial_distortion_cam_par ('adaptive', DataValue, 0, CamParamOut)
change_radial_distortion_image (Image, Image, ImageRectified, DataValue, CamParamOut)
标定结果:
Halcon透视变换
原始图像
寻找4个标定块顶点坐标
W=50mm
H=50mm
计算投影变换矩阵 进行变换
hom_vector_to_proj_hom_mat2d ([Row1,Row2,Row3,Row4], [Column1,Column2,Column3,Column4], [1,1,1,1],\
[Row1,Row1,Row1+H,Row1+H], [Column1,Column1+W,Column1,Column1+W], [1,1,1,1], 'normalized_dlt', HomMat2D)
projective_trans_image (Image, TransImage, HomMat2D, 'bilinear', 'false', 'false')
矫正后图像
像素精度
PixelX=0.0293 mm/pixel
PixelY=0.0311 mm/pixel
矫正前:
dx=51.101mm
dy=54.700mm
矫正后:
dx=49.989mm
dy=49.971mm
偏差值:
offsetX=50-49.989 = 0.0104mm
offsetY=50-49.989 = 0.0281mm
矫正后,误差在1个像素内