摄像机标定

转自:http://blog.sina.com.cn/s/blog_b5aa3e0f0101a4tx.html

1、摄像机外参:决定摄像机坐标与世界坐标系之间相对位置关系。

其中Pw为世界坐标,Pc是摄像机坐标,他们之间关系为 Pc = RPw + T 式中,T= (Tx,Ty,Tz),是平移向量,R = R(α,β,γ)是旋转矩阵,分别是绕摄像机坐标系z轴旋转角度为γ,绕y轴旋转角度为β,绕x轴旋转角度为α。6个参数组成(α,β,γ,Tx,Ty,Tz)为摄像机外参。

2、摄像机内参:确定摄像机从三维空间到二维图像的投影关系。

针孔_摄像机模型为6个参数(f,κ,Sx,Sy,Cx,Cy);远心摄像机模型为5个参数(f,Sx,Sy,Cx,Cy)。

线阵摄像机为9个参数(f,κ,Sx,Sy,Cx,Cy,width.highth)。

其中,f为焦距;

κ表示径向畸变量级,如果κ为负值,畸变为桶型畸变,如果为正值,那畸变为枕型畸变。

Sx,Sy是缩放比例因子。对针孔_摄像机来讲,表示图像传感器上水平和垂直方向上相邻像素之间的距离;

对于远心摄像机模型,表示像素在世界坐标系中的尺寸。

Cx,Cy是图像的主点。对针孔_摄像机来讲,这个点是投影中心在成像平面上的垂直投影,同时也是径向

畸变的中心 。

对于远心摄像机模型,只表示畸变的中心 。

Vx,Vy,Vz:线阵摄像机必须与被拍摄物体之间有相对移动才能拍摄到一幅有用的图像。这是运动向量。

sx和sy是相邻像元的水平和垂直距离

3、标定板为正方形,尺寸大小为要照射区域宽度的1/3,如像区为100*80mm,那么标定板为30*30mm。其中标定板按照D:\Program Files\HALCON-10.0\calib(具体的视个人安装位置所定)来用CAD画图。下面是自制标定板的网址。

http://www.halconbbs.com/read.php?tid=94

4、按照下面网址步骤进行标定

http://wenku.baidu.com/view/69e81567ddccda38376bafd7.html

5、具体实施步骤

标定的目的是确定相机的内参和外参。

第一步:

依照halcon标定板描述文件(后缀名是.descr)尺寸制作标定板。一般标定板大小是照射区域的1/3,每个标定孔的像素不能少于10个。

第二步:

先定义内参的初始值。

StartCamPar:=[0.006,0,6e-6,6e-6,Width*0.5,Height*0.5,Width,Height]

依次是[焦距,畸变,像素尺寸宽,像素尺寸高,中心点坐标宽,中心点坐标高,图片尺寸]

第三步:通过标定助手实现标定

把内存保存成文件,通过标定助手完成。

write_cam_par (StartCamPar, ‘E:/Halcon例子/摄像机标定/标定.dat‘)

导入自己刚才保存的参数

选择正确的描述文件

然后可以标定了

利用相机不断采集标定

为使得图片标定完成,调节下面这些参数。具体参数意义见翻译的find_caltabfind_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)

get_calib_data (CalibModelID, ‘camera‘, 0, ‘params‘, CamParam)

标定相机,读取相机的参数给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)

第七步完成:

完成。

时间: 2024-12-10 21:08:46

摄像机标定的相关文章

基于EmguCV的摄像机标定及矫正

标签: EmguCV摄像头标定C# 2015-05-03 14:55 501人阅读 评论(6) 收藏 举报  分类: C# 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 前言 之前用OpenCV做过摄像机标定及矫正,现在平台换了,改用C#,就用EmguCV做一下,其实就是OpenCV的C#版. 在EmguCV中有两类摄像机标定的类,一个是CvInvoke类,一个是CameraCalibration类,两种标定效果差不多,只不过CvInvoke涉及的函数大多都是指针类型的

摄像机标定【转】

1.摄像机外参:决定摄像机坐标与世界坐标系之间相对位置关系. 其中Pw为世界坐标,Pc是摄像机坐标,他们之间关系为 Pc = RPw + T 式中,T= (Tx,Ty,Tz),是平移向量,R = R(α,β,γ)是旋转矩阵,分别是绕摄像机坐标系z轴旋转角度为γ,绕y轴旋转角度为β,绕x轴旋转角度为α.6个参数组成(α,β,γ,Tx,Ty,Tz)为摄像机外参. 2.摄像机内参:确定摄像机从三维空间到二维图像的投影关系. zhenkong摄像机模型为6个参数(f,κ,Sx,Sy,Cx,Cy):远心摄

C#下的摄像机标定

前言:计算机视觉的基本任务之一是从摄像机获取的图像信息出发计算三维空间中物体的几何信息,并由此重建和识别物体,而空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系是由摄像机成像的几何模型决定的,这些几何模型参数就是摄像机参数.在大多数条件下,这些参数必须通过实验与计算才能得到,这个过程称为摄像机标定.标定过程就是确定摄像机的几何和光学参数.摄像机相对于世界坐标系的方位. 内容: 1.假设摄像机所拍摄到的图像与三维空间中的物体之间存在以下一种简单的线性关系:[像]=M[物],这里,矩阵

摄像机标定01

针孔摄像机模型.针孔是一堵想象中的墙(中心有一个微型小孔).光线只能从这个开口中通过,而其余的都被墙所阻挡.下面我们将从一个针孔摄像机模型开始,处理基本几何中的投影射线.遗憾的是,真实的针孔由于不能快速曝光收集足够的光线,因此他不是一个得到图像的好方法.这也是为什么眼睛和摄像机都要使用透镜而不是仅仅只用一个点来收集更多光线的原因.然而,这种利用透镜得到更多光线的缺点是,不仅使我们背离了所使用的简单针孔几何模型,而且引入来自透镜的畸变. 本文将学习如何利用摄像机标定,来矫正(数学方式)因使用透镜而

摄像机标定--矫正畸变

之前做过摄像机标定的研究,不过现在忘了好多,昨天下午又捡起来,好好复习一下(主要是学习opencv一书内容). 摄像机标定基本知识: 摄像机标定误差包括内参(4个).畸变参数(径向和切向共5个).外参(平移和旋转共6个). 误差参数分析:摄像机模型采用针孔模型成像模型,由于中心轴安装问题,这就造成了精度误差,就是所谓的相机内参数误差,使用一个3X3的矩阵表示(A) [fx 0 cx; 0 fy cy; 0 0 1].,有四个未知参数:另由于针孔成像采光效率不高,使用了透镜,这就造成的畸变误差:

[OpenCV-Python] OpenCV 中摄像机标定和 3D 重构 部分 VII

部分 VII摄像机标定和 3D 重构 42 摄像机标定 目标 ? 学习摄像机畸变以及摄像机的内部参数和外部参数 ? 学习找到这些参数,对畸变图像进行修复 42.1 基础 今天的低价单孔摄像机(照相机)会给图像带来很多畸变.畸变主要有两种:径向畸变和切想畸变.如下图所示,用红色直线将棋盘的两个边标注出来,但是你会发现棋盘的边界并不和红线重合.所有我们认为应该是直线的也都凸出来了.你可以通过访问Distortion (optics)获得更多相关细节. 这种畸变可以通过下面的方程组进行纠正: 于此相似

Matlab 摄像机标定+畸变校正

博客转载自:http://blog.csdn.net/Loser__Wang/article/details/51811347 本文目的在于记录如何使用MATLAB做摄像机标定,并通过opencv进行校正后的显示. 首先关于校正的基本知识通过OpenCV官网的介绍即可简单了解: http://docs.opencv.org/2.4/doc/tutorials/calib3d/camera_calibration/camera_calibration.html 对于摄像机我们所关心的主要参数为摄像

利用matlab摄像机标定

(1)输入图像 "Image names"键 Matlab的图形窗口显示出20幅靶标图像 (2) 提取角点 "Extract grid corners"键. 输入要进行角点提取的靶标图像的编号并回车 分别在"wintx ([] = 5) ="和"winty ([] = 5) ="输入行中输入角点提取区域的窗口半宽m和半高n.显示角点提取区域的窗口尺寸(2n+1)x(2m+1),例如,选择缺省时角点提取区域的窗口尺寸为11x11

halcon学习笔记——摄像机标定

1.read_cam_par( : : CamParFile : CameraParam) 从文件夹中读取相机的内参数. 2.disp_caltab( : : WindowHandle, CalTabDescrFile, CameraParam, CaltabPose, ScaleFac : ) 利用相机内外参数,把标定板模型投影到图像平面,显示标定点和连接线,X,Y轴也被显示出来. 3.vector_to_pose( : : WorldX, WorldY, WorldZ, ImageRow,