相机内参和外参:原理与实践

原理介绍参考:一文带你搞懂相机内参外参(Intrinsics & Extrinsics) - 知乎 (zhihu.com)

结论:

1. 相机内参是一个3×3的矩阵,实际只有4个参数

2. 得到相机内参后,可以进行相机坐标系-像素坐标系的转换

3. 相机外参有6个参数,x,y,z和3个轴的角度,也可用旋转矩阵(3×3)和平移矩阵(3×1)来描述,本质就是相机相对于某个坐标系的原点位置以及朝向

4. 得到相机外参后,可以进行世界坐标系(或另一个坐标系)到相机坐标系的转换


实际应用:

1. 推导“Unsupervised Learning of Depth and Ego-Motion from Video”中公式2

        提示:不是严格的=号,因为还有个z2在里面(z2可以通过计算得到)

2. 在"Who2com: Collaborative Perception via Learnable Handshake Communication"中,作者在构建AirSim-CP数据集中,收集了每个相机的RGB、depth image和pose,然后转换到了ego view下

3. 在"Spatial Transformer Networks"中,localization module只需要学习6个参数的仿射矩阵,就能实现从一个2D image到另一个2D image

2D变换参考:Spatial Transformer Networks - 知乎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
相机标定是用于确定相机内参的过程,它是计算机视觉和机器人视觉中的重要步骤。在Python中,我们可以使用OpenCV库来进行相机标定。 以下是相机标定的大致步骤: 1. 收集相机标定所需的图像数据,这些图像应该包括不同位置和角度下的棋盘格图像。 2. 使用OpenCV中的findChessboardCorners函数来检测每个棋盘格角点的位置。 3. 使用calibrateCamera函数来计算相机内参和畸变系数。该函数需要输入棋盘格图像的坐标和实际世界坐标。 4. 使用solvePnP函数来计算每个棋盘格图像的。该函数需要输入棋盘格图像的坐标和实际世界坐标。 下面是一个示例代码,用于标定相机并获取内参: ```python import cv2 import numpy as np # 收集相机标定所需的图像数据 images = [...] # 棋盘格图像列表 objpoints = [] # 实际世界坐标列表 imgpoints = [] # 图像坐标列表 # 设置棋盘格的大小 pattern_size = (9, 6) # 遍历每张图像 for img in images: # 寻找棋盘格的角点 ret, corners = cv2.findChessboardCorners(img, pattern_size, None) # 如果找到棋盘格 if ret == True: objpoints.append(...) # 将实际世界坐标添加到列表中 imgpoints.append(corners) # 将图像坐标添加到列表中 # 计算相机内参和畸变系数 ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img.shape[::-1], None, None) # 计算每张棋盘格图像的 rmatrices = [] for i in range(len(objpoints)): ret, rmat, tvec = cv2.solvePnP(objpoints[i], imgpoints[i], mtx, dist) rmatrices.append(rmat) ``` 在上面的代码中,我们首先使用findChessboardCorners函数来检测每张棋盘格图像中的角点位置,并将它们存储在imgpoints列表中。然后,我们构建一个实际世界坐标列表objpoints,该列表包含每个棋盘格的实际世界坐标。接下来,我们使用calibrateCamera函数计算相机内参和畸变系数。最后,我们使用solvePnP函数来计算每个棋盘格图像的,将结果存储在rmatrices列表中。 通过运行上面的代码,我们可以得到相机内参矩阵mtx和畸变系数dist,以及每个棋盘格图像的旋转矩阵rmatrices和平移向量tvecs。这些数可以在后续的计算机视觉和机器人视觉应用中使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值