1 相机内外参数(Intrinsics & Extrinsics)说明
线阵相机矫正所需参数共17个,其中11个参数为内参,6个参数为外参。
1.1 内参(Intrinsics ) 说明
线阵相机内参CamParam
数量共11个,模型如下:
CamParam:= [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]
Focus : 镜头焦距;
Kappa: 镜头畸变系数;正:枕形畸变 负:桶状畸变
Sx: 传感器像元宽度;
Sy: 传感器像元高度;
Cx: 表示镜头光轴在像平面坐标上的投影横坐标,一般初始化的时候设置为width/2;
Cy: 表示镜头光轴在像平面坐标上的投影纵坐标,一般初始化的时候设置为0,因为是一条线,所以纵坐标为0;
ImageWidth: 完整图片像素宽度;
ImageHeight: 完整图片像素高度;
Vx : 误差所致。x方向上运动速度,其实就是每拍摄一条线,x方向上的运动距离(宽),相机和运动方向不可能完全垂直,理论上为0最理想。
Vy: y方向上运动速度,其实就是在扫描的时候,多远距离拍摄一条线(高)
Vz: 误差所致。z方向上运动速度,其实就是每拍摄一条线,z方向上走的距离(深度),理论上为0最理想
1.2 外参(Extrinsics)说明
世界坐标系到相机坐标系(外参)。共有6个参数,表示了世界坐标系在相机坐标中的三维姿态。
六个参数分别为x,y,z三个轴的旋转角度和x,y,z三个轴的平移量。
摄像机坐标(xc,yc,zc)到世界坐标(xw,yw,zw),
也就是外在参数模型如下,其中,R和T代表旋转
矩阵和平移向量
2 使用Halcon标定助手进行相机标定
2.1 使用HALCON标定工具,设置标定板描述文件路径,以及相关参数
2.2 标定设置
2.2.1 Setup
->选取合适的标定板文件或者自定义生成的标定板描述文件
->设定标定板厚度
->选取相机模型(线阵-多项式)
->设定像元大小、镜头焦距、运动速度等
2.2.2 Calibration
->取已经拍摄的用于标定的图像或使用相机助手获取标定板图像。
->在所有文件检测均有效后Calibrate
按钮将由disable变为enable
->选中一张图像点击Set Reference
设置参考文件。
->完成后点击Calibrate
设置参考的作用是什么?设置的是当你标定完成之后,使用相机内参外参进行矫正之后的图片。HALCON会将这个图片上的标定板中心点作为远点坐标,并且这张变换后的图片作为相机垂直照射的平面参考。
下图由于导入的图像中标记提取失败,所以无法标定。必须保证所有图像都能提取到标记。提示检出质量问题时,如果对标定精度要求不是很高也是可以做标定的。此时Calibrate
按钮是灰色的。
如果加载的图片找不到标定板
,可以在最下方的标定板提取参数中改变参数,一般就能找提取到标定板了。最后点击标定按钮,就可以得到标定的参数了。
删除提取标记失败的55号图像,Calibrate
变为高亮,点击即可进行标定。
2.2.3 Results
标定完成后即可获得标定的相机内参和外参结果。点击对应的Save
按钮将参数保存到指定位置。
2.2.4 Code Generation
文章来源:https://www.toymoban.com/news/detail-562238.html
HALCON内代码生成:“*”星号代表注释文章来源地址https://www.toymoban.com/news/detail-562238.html
* Calibration 01: Code generated by Calibration 01
CameraParameters := ['line_scan_polynomial',0.153733,-114.127,93051.7,-4.24526e+07,-0.0433822,-3.50799e-05,7.04e-06,7.04e-06,3940.36,-0.362735,8192,6000,2.24896e-08,4.16196e-05,1.75223e-07]
CameraPose := [0.0177446,0.110862,0.898555,2.62363,347.663,180.539,0]
* Calibration 01: Sample code generated by Calibration 01
* Calibration 01: For demonstration purposes, we use the calibration
* Calibration 01: plate itself as sample object.
* Calibration 01: Therefore, we load the reference image
read_image (Image, 'C:/Users/Public/Documents/MVTec/HALCON-20.11-Steady/examples/images/calib/calib_distorted_01.png')
* Calibration 01: Extract plate data from the image
TmpCtrl_PlateDescription := 'C:/Program Files/MVTec/HALCON-20.11-Steady/calib/caltab_30mm.descr'
TmpCtrl_FindCalObjParNames := ['gap_tolerance','alpha','skip_find_caltab']
TmpCtrl_FindCalObjParValues := [1,1,'false']
* Calibration 01: Create calibration model for managing calibration data
create_calib_data ('calibration_object', 1, 1, CalibHandle)
set_calib_data_cam_param (CalibHandle, 0, [], CameraParameters)
set_calib_data_calib_object (CalibHandle, 0, TmpCtrl_PlateDescription)
find_calib_object (Image, CalibHandle, 0, 0, 0, TmpCtrl_FindCalObjParNames, TmpCtrl_FindCalObjParValues)
get_calib_data_observ_points (CalibHandle, 0, 0, 0, TmpCtrl_MarkRows, TmpCtrl_MarkColumns, TmpCtrl_Ind, CameraPose)
* Calibration 01: Using the calibration plate as test object, the marks actually
* Calibration 01: lie above the corrected measurement plane. Therefore, we 'uncorrect'
* Calibration 01: the plane of measurement by the plate thickness here.
set_origin_pose (CameraPose, 0.0, 0.0, 0.001, CameraPose)
* Calibration 01: **********************************************************
* Calibration 01: Sample Task: Pose Estimation
* Calibration 01: **********************************************************
* Calibration 01: With known camera parameters, one image is enough to
* Calibration 01: determine the new pose
* Calibration 01: **********************************************************
* Calibration 01: Sample Task: Image Rectification
* Calibration 01: **********************************************************
* Calibration 01: Choose the desired width of the visible area in world coordinates [mm]
TmpCtrl_RectificationWidth := 74
* Calibration 01: Convert to [m]
TmpCtrl_RectificationWidth := TmpCtrl_RectificationWidth / 1000.0
* Calibration 01: Adjust origin so the plate is roughly centered
set_origin_pose (CameraPose, -0.5*TmpCtrl_RectificationWidth, -0.4*TmpCtrl_RectificationWidth, 0, TmpCtrl_RectificationPose)
* Calibration 01: Generate the rectification map
gen_image_to_world_plane_map (TmpObj_RectificationMap, CameraParameters, TmpCtrl_RectificationPose, 640, 512, 640, 512, TmpCtrl_RectificationWidth / 640, 'bilinear')
* Calibration 01: Now, images can be rectified using the rectification map
map_image (Image, TmpObj_RectificationMap, TmpObj_RectifiedImage)
stop ()
到了这里,关于【机器视觉】线阵相机模型说明以及使用HALCON标定助手对线阵相机进行标定的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!