图像的畸变由于镜头(主要是FA镜头)引起的,实际同一个点,在通过光心后成像点倾斜。
halcon畸变模型
在halcon中,这个畸变可以通过division model和polynominal model来建模
division model
这种模型使用一个参数k来建模这种畸变关系
其中
polynominal model
也称多项式,使用三个参数(k1,k2,k3)来建模畸变
其中
其中
世界坐标系:Xw,Yw,Zw
相机坐标系:Xc,Yc,Zc
图像坐标系统:r,c
图像像素坐标系统:u,v
标定板创建
gen_calib(7,7,0.0125,0.5,’calib.descr’,’calib.ps’)
每行圆点数量
每列圆点数量
两个圆点的中心距离
圆点半径和圆点中心距离的比值
标定板描述文件
标定板图像文件
这个你可以自己生成后打印出来, 当然这种精度肯定不高的, 你也可以去某宝上买。
标定助手
使用halcon的标定助手可以进行畸变标定,采集各种姿态的图片,尽量在视野的每个位置、角度都采集,最好15张以上,生成标定文件。
我们得到内参和外参
CameraParameters := [0.0344624,-90.0854,8.31673e-006,8.3e-006,1310.66,911.681,2400,2048]
CameraPose := [-0.0160043,0.0131353,0.174315,1.28984,355.196,273.345,0]
使用标定文件
畸变矫正图像
CameraParameters := [0.0344624,-90.0854,8.31673e-006,8.3e-006,1310.66,911.681,2400,2048]
CamPos1:=CameraParameters
CamPos1[1]:=0
读取图片
read_image()
建立矫正矩阵
gen_radial_distortion_map
进行矫正
map_image
像素点转换为物理点
CameraParameters := [0.0344624,-90.0854,8.31673e-006,8.3e-006,1310.66,911.681,2400,2048]
CameraPose := [-0.0160043,0.0131353,0.174315,1.28984,355.196,273.345,0]
获取像素点
P1x:=100 P1Y:=100
P2X:=100 p2Y:=200
TmpCtrl_ImgRows :=[P1X,P2X]
TmpCtrl_ImgColums := [P1y,p2y]
set_origin_pose(CameraPos,0.0,0.0,-0.001,CameraPose)
image_points_to_world_plane(CameraParameters,CameraPose,TmpCtrl_ImgRows,TmpCtrl_ImgColums,’mm’,TmpWorldX,TmpWorldY)
得到输出世界坐标点TmpWorldX,TmpWorldY
计算距离
distance_pp 输出距离值 TmpCtrol_Distance
获取单像素精度值
TmpCtrol_Distance/200
关注我 公众号 VisionManMaster
#机器视觉# #自动化# #PLC# #编程# #图像处理#