相机标定(3)---基于halcon的面阵相机标定
来源:互联网 发布:网络维护与故障排除 编辑:程序博客网 时间:2024/04/30 02:03
halcon标定可以参考halcon提供的例子程序3d_coordinates.hdev
1、摄像机外参:决定摄像机坐标与世界坐标系之间相对位置关系。
其中Pw为世界坐标,Pc是摄像机坐标,他们之间关系为
2、摄像机内参:确定摄像机从三维空间到二维图像的投影关系。
sx和sy是相邻像元的水平和垂直距离
http://www.halconbbs.com/read.php?tid=94
4、按照下面网址步骤进行标定
http://wenku.baidu.com/view/69e81567ddccda38376bafd7
5、具体实施步骤
标定的目的是确定相机的内参和外参。
第一步:
第二步:
StartCamPar:=[0.006,0,6e-6,6e-6,Width*0.5,Height*0.5,Width,Height]
依次是[焦距,畸变,像素尺寸宽,像素尺寸高,中心点坐标宽,中心点坐标高,图片尺寸]
第三步:通过标定助手实现标定
write_cam_par (StartCamPar, 'E:/Halcon例子/摄像机标定/标定.dat')
导入自己刚才保存的参数
选择正确的描述文件
然后可以标定了
利用相机不断采集标定
为使得图片标定完成,调节下面这些参数。具体参数意义见翻译的find_caltab、find_marks_and_pose这两个参数。
标定要是有问题会提示警告,如果没有问题,标定板在每个位置每个标定孔都能识别出来。标定需要转化十几副图片来准确确定内参和外参。查看结果
相机外参显示在这块
相机内参会显示在这块
点击保存可以把内参和外参保存成文件。
接着可以入下图插入代码。
插入代码,插入整个标定过程
第四步:使用程序实现相机标定
create_calib_data ('calibration_object', 1, 1, CalibModelID)
set_calib_data_cam_param (CalibModelID, 0, 'area_scan_division', StartCamPar)
set_calib_data_calib_object (CalibModelID, 0, 'caltab_100mm.descr')
先定义一个标定模版句柄。接着打开相机取图或者直接读文件里的图,开始标定。
通过find_caltab找到标定板位置,然后通过find_marks_and_pose确定标定点坐标和相机外参RCoord, CCoord, StartPose。
通过set_calib_data_observ_points把读取的标定点坐标与描述文件比较结合相机外参,不断修正相机标定模版CalibModelID。
calibrate_cameras (CalibModelID, ErrorsDiv)
标定相机,读取相机的参数给CamParam(内参)。
第五步:转化成世界坐标
image_points_to_world_plane (CamParam, StartPose, Row, Col, 'mm', X1, Y1)
把图片中的Row, Col点们转化到世界坐标值X1, Y1
通过下面计算两点距离
distance_pp (X1[0:4], Y1[0:4], X1[1:5], Y1[1:5], Distance)
可以通过image_to_world_plane来转化图片
第六步:确定原点(没有实验,待验证)
标定时换很多位置放置标定板其实是为了内参标定的更准确,外参只要一张标定板图就可以确定了。因此,换各个角度标定内参,最后一个位置把标定板放在自己想要的坐标原点位置再标定一次,那么转换成世界坐标后,坐标原点就是标定板中心点,标定板上的小黑角在第三象限,依次右手为Y轴,X轴。(注:标定板防止的平面Z最好与使用的平面平行。Z轴正方向为垂直平面向下。
然后,考虑标定板的厚度0.75mm,重新设置原点,光Z改变了(下面函数单位为m)。
set_origin_pose (Pose, 0, 0, 0.00075, NewPose)
下面是标定时halcon参数:
- 相机标定(3)---基于halcon的面阵相机标定
- 相机标定(4)---基于halcon的双目立体视觉标定
- Halcon相机标定
- halcon 相机标定
- Halcon相机标定
- Halcon单相机标定
- 基于opencv的相机标定
- 相机标定——基于张正友标定标定法与MFC的单目相机标定
- 相机标定的原理
- 基于OPENCV的相机标定及代码
- 线阵相机标定
- 相机标定
- 相机标定
- 相机标定
- 相机标定
- 相机标定
- 相机标定
- 相机标定
- 二维数组--从左上角到右下角的最大值 九度
- Android必会小功能总结
- 动态向table添加数据
- 黑马程序员-------.NET知识基础(第五天)
- Android中“再按一次返回键退出程序”实现
- 相机标定(3)---基于halcon的面阵相机标定
- poll和select
- Linux系统编程学习之《文件和目录操作》
- [leetcode] Unique Binary Search Trees
- MAKEINTRESOURCE
- UVa - 120 - Stacks of Flapjacksh
- Perl实现不同数据库结果比较 (mysql, oracle, sqlserver)
- C++中空基類優化和多重繼承的問題
- Unity3D起步学习要点