相机标定后参数查找

How to handle parameters after calibration ??

承接上一篇文章Camera Calibration,分析使用opencv或者Matlab之后得到的参数;

0.About the Parameters of Calibration


摄像机模型采用经典的小孔模型,如图中Oc(光心),像面π表示的是视野平面,其到光心的距离为f(镜头焦距)。
四个坐标系分别为:世界坐标系(Ow),摄像机坐标系(Oc),图像物理坐标系(O1,单位mm),图像像素坐标系(O,位于视野平面的左上角,单位pix)。
空间某点P到其像点p的坐标转换过程主要是通过这四套坐标系的三次转换实现的,首先将世界坐标系进行平移和转换得到摄像机坐标系,然后根据三角几何变换得到图像物理坐标系,最后根据像素和公制单位的比率得到图像像素坐标系。(实际的应用过程是这个的逆过程,即由像素长度获知实际的长度)。

ps:通过摄像头的标定,可以得到视野平面上的mm/pix分辨率,对于视野平面以外的物体还是需要通过坐标转换得到视野平面上。


1.Calibration by Opencv

使用opencv sample提供的参数例程,输出标定参数*.xml

内有详细的说明,比较直观,不再说明,仅列出:

内参

<Camera_Matrix type_id="opencv-matrix">
  <rows>3</rows>
  <cols>3</cols>
  <dt>d</dt>
  <data>
    2.7428373207967893e+003 0. 6.4750000000000000e+002 0.
    2.7428373207967893e+003 4.8550000000000000e+002 0. 0. 1.</data></Camera_Matrix>

每幅标定图像对应一个外参

<Extrinsic_Parameters type_id="opencv-matrix">
  <rows>20</rows>
  <cols>6</cols>
  <dt>d</dt>
  <data>
    1.2580296584728148e-001 -8.5844606014736202e-002
    1.2229733628808651e-001 -3.1306842717376909e+001
    -1.6381156828773015e+002 1.3830839459850151e+003
    1.3661289338896690e-001 -8.3203924300670945e-002
    5.7179174065683636e-001 1.0823224754141359e+001
    -1.9415767395470527e+002 1.3796349208478596e+003

但opencv将这些外参都放在一起,不方便分开使用!

2.Calibration by Matlab

下述内容主要翻译自【1】

使用Matlab标定后得到的结果,如下图所示


焦距,成像主点,Skew,径向和切向畸变参数;

2.1内参矩阵

忽略中间的内容,在标定后的结果矩阵Calib_Results.mat中变量KK存储的即为相机内参;


对比发现,使用Matlab进行标定时,对畸变处理的比较精细,很优秀!

2.2外参矩阵

在文献【1】中有下述说明


每一幅包含标定板的图像,与相机间存在不同的选择和平移变换,在Calib_Results.mat中分别用Rc_*和Tc_*表示,如


内参数标定之后可以重复使用,外参适用于相机在静止的场景内运动,反之亦然,静止的相机之于刚体运动!





相机标定是求解相机成像模型参数的过程,相机参数包含内部参数和外部参数[^1]。 内部参数相机内部结构相关,对于鱼眼相机而言,内参主要包括主点和焦距等。主点是图像平面的中心点,它反映了相机成像中心在图像上的位置;焦距则决定了相机对物体的缩放程度,不同的焦距会使成像的大小和视角发生变化。鱼眼相机由于其特殊的光学结构,可能存在较大的畸变,这些畸变也会在内部参数中有所体现,如径向畸变和切向畸变参数等,它们用于描述图像因镜头光学特性导致的失真情况,帮助校正图像中的变形,使图像更接近真实场景的形状和比例[^1]。 外部参数相机的旋转和平移等位置相关。在鱼眼相机标定中,外参描述了相机在世界坐标系中的位置和姿态。旋转参数表示相机相对于世界坐标系的旋转角度,它决定了相机的朝向;平移参数则表示相机在世界坐标系中的具体位置。通过确定外部参数,可以将世界坐标系中的三维物体点准确地投影到相机的图像平面上,实现从世界坐标系到相机坐标系的转换,从而完成坐标转换,为后续的三维重建、目标定位等应用提供基础[^1][^2]。 ```python # 以下为简单示意代码,用于说明鱼眼相机标定内外参的获取思路 import cv2 import numpy as np # 准备标定板的角点坐标 objp = np.zeros((6*7, 3), np.float32) objp[:, :2] = np.mgrid[0:7, 0:6].T.reshape(-1, 2) # 存储对象点和图像点的数组 objpoints = [] # 世界坐标系中的 3D 点 imgpoints = [] # 图像平面中的 2D 点 # 读取标定图像 images = ['calibration_image1.jpg', 'calibration_image2.jpg'] for fname in images: img = cv2.imread(fname) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 查找标定板角点 ret, corners = cv2.findChessboardCorners(gray, (7, 6), None) if ret == True: objpoints.append(objp) imgpoints.append(corners) # 进行鱼眼相机标定 ret, mtx, dist, rvecs, tvecs = cv2.fisheye.calibrate( objpoints, imgpoints, gray.shape[::-1], None, None ) # mtx 为相机内参矩阵 print("相机内参矩阵:") print(mtx) # dist 为畸变系数 print("畸变系数:") print(dist) # rvecs 为旋转向量 print("旋转向量:") print(rvecs) # tvecs 为平移向量 print("平移向量:") print(tvecs) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值