【相机标定&基于消失点的外参标定】

关于相机外参动态标定的资料,记录参考。

文章一:Camera calibration using two or three vanishing points

:基于消失点的相机自标定
文章下载链接:

链接: https://www.researchgate.net/publication/261076887_Camera_calibration_using_two_or_three_vanishing_points

译文:链接: https://cloud.tencent.com/developer/article/1762245

基本内容:

计算内参:
基于世界坐标系下的坐标轴平行线,找到图像坐标系下对应的消失点,假设了图像的主点位于图像的中心位置,并假设两个像轴之间的倾斜角,为 γ =0,纵横比为1,即αu=αv=f,简化了相机的内参。依据空间几何关系(垂直-勾股定理),求解相机内参:图像中心点(u0,v0),焦距F。
在这里插入图片描述
计算外参:

设定消失点在图像平面上的坐标是V1=(v1i,v1j)和V2=(v2i,v2j),依据消失点与光心连线的性质:
消失点与光心的连线,平行于形成该消失点平面的平行线。所以在空间中互相垂直的几组平行线,对应的消失点与相机光心的连线也互相垂直。

构建了一个新的坐标系,其坐标原点是相机坐标系的原点Oc,与世界系统具有相同的方向。因此,新坐标系和相机坐标系之间的旋转与世界坐标系和相机坐标系之间的旋转相同。向量X′c,Yc′,Z′c为:

在这里插入图片描述
最终的旋转矩阵R可得:

在这里插入图片描述

在这里插入图片描述
求解平移向量的过程中,运用平行线段的平移,和坐标的转化,构建一个相似三角形:

在这里插入图片描述
假设已知场景中已知长度的一小段,其两个端点中的第一个位于世界原点。在不失概括性的情况下,世界的中心可以在场景中的任何一点上选择。线段由世界点P1=[0,0,0]T和P2=[xp2,yp2,zp2]T确定,

在这里插入图片描述

文章二:Online Extrinsic Camera Calibration for Temporally Consistent IPM Using Lane Boundary Observations with a Lane Width Prior

:基于车道宽度先验的车道边界观测的时间一致 IPM 在线外部相机校准

文章下载链接:
链接: https://arxiv.org/pdf/2008.03722.pdf
译文:链接: http://www.360doc.com/content/21/0616/08/74116089_982234148.shtml

基本内容:

提出了一种对相机的在线外参标定的方法,即在连续的驾驶场景图像中,从路面信息估计俯仰角、偏航角、横滚角和摄像机高度。该方法分两步估计相机的外部参数:

1)利用一组车道线观测值计算的消失点同时估计俯仰角和偏航角;
在这里插入图片描述

2)通过最小化车道宽度观测值和车道宽度先验值之间的差异来计算横滚角和摄像机高度。利用扩展卡尔曼滤波(EKF)对摄像机外部参数进行连续更新。

在这里插入图片描述

  • 由求出的三个角度参数、相机的高度信息,计算外参,假设内参是已知的:

在这里插入图片描述

3)最后利用逆透视映射(IPM)生成时间一致的鸟瞰图(BEV)。

在这里插入图片描述

文章三:Extrinsic Camera Calibration

链接: Extrinsic Camera Calibration
与文章二很贴合。
在这里插入图片描述
在这里插入图片描述

  • 7
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
相机标定是用于确定相机的过程,它是计算机视觉和机器人视觉中的重要步骤。在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。这些数可以在后续的计算机视觉和机器人视觉应用中使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值