已知图像坐标系求相机坐标系_多视图几何基础——深入理解相机内外参数

本文介绍了针孔相机模型,详细阐述了以相机坐标系为参考的成像几何,包括相机内参数矩阵的构建。接着讨论了如何在任意坐标系下建立成像几何关系,并提到了非线性畸变,如Brown-Conrady镜头畸变模型,以及畸变矫正的重要性。文章旨在深入理解多视图几何基础和相机内外参数。

4c573667ca660432d2b682f02b90c7ef.png

上一篇:前言(comming soon)

关键词:相机模型,多视图几何,相机内参数,相机外参数,skew畸变

1. 针孔相机模型

6dc311d4850db5195fa471526aedaf43.png
Figure 1

针孔相机模型是一种理想化的简单相机模型,也是成像的最基本原理,在这种模型中,有一个暗室,暗室中有一个足够小的针孔,外部世界的光线通过这个针孔进入暗室盒子,光线投射到暗室盒子中的二维平面,即将一个三维的场景(Scene)映射成了一张二维的影像。

这个针孔到成像平面的距离,叫做焦距(focal length)f:

16db9bab77632cb919d9a2fc092962c8.png
Figure 2

由于在上述过程中像平面中的图像和实际场景中的影像是镜像的。为了让成像的过程更加直观,我们假象一个平面,这个平面位于相机针孔前距离针孔f的距离,在这个平面上场景的成像没有被镜像,拥有和真实场景相同的方向,我们把这个假象的平面称为像平面(image plane),这个假想的平面上的成像避免了数学计算时的正负号反转,如Figure 3所示

908587e6e661d8d5cb07e0181194a531.png
Figure 3

然而,通过理论上的这个无穷小的针孔进入的光线是极其有限的,我们可以通过扩大这个“针孔”来增加进光量,但是三维世界中的不同的位置通过这样的较大的一个孔会投射到成像平面上的同一个位置造成模糊的成像。解决这个问题的一种办法是采用一个透镜在聚焦通过这个较大的孔的光线,然而即使最优秀的透镜也只能保证在三维世界中一定的距离范围的光源投射到成像平面清晰,这个成像清晰的范围被称为景深(depth of field),在这个景深范围内的三维物体的成像几何接近于上述的针孔相机模型,这里提到的“针孔”我们将其称为投影中心(center of projection)或相机中心(camera center)。这个理想的模型的投影过程,我们将其称为透视投影(perspective projection)。顺便提及一点,为了减小成像形变使成像的几何更加的接近针孔相机模型,现实中这里所述的透镜通常是一系复杂的透镜的组合,而不是一个简单的凸透镜。

2. 以相机坐标系为参考的针孔相机的成像几何

9e43b506ce8c6d354655eb37e81cc0e8.png
Figure 4

为了将三维世界的场景映射到二维影像的过程建立数学模型,我们先考虑将相机自身的坐标系作为参考来建立投影过程的数学关系,如Figure 4所示为一个以相机为中心的坐标系(camera-centered reference frame),这是一个右手坐标系,其坐标原点为之前所述的投影中心。它的Z轴为相机的主光轴——通过投影中心并且垂直于像平面的直线,在这样的坐标定义下,像平面的表达式为

,其中f为相机的焦距,主光轴与像平面的交点被称为像主点(principal point)。在相机坐标系中还包括一个互相正交的像平面坐标系
,三维空间中的一个点M在像平面坐标系上的成像为m,即通过投影中心与三维点M的直线与像平面的交点。若点M在相机坐标系中的坐标为
,则位于直线
上的任意一点的坐标为
,其中
matlab 相机标定代码 摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是最终的投影矩阵的过程。 [1]基本的坐标系: 世界坐标系相机坐标系; 成像平面坐标系; 像素坐标系 [2]一般来说,标定的过程分为两个部分: 第一步是从世界坐标系转为相机坐标系,这一步是三维点到三维点的转换,包括R,t(相机外参,确定了相机在某个三维空间中的位置朝向)等参数; 第二部是从相机坐标系转为成像平面坐标系(像素坐标系),这一步是三维点到二维点的转换,包括K(相机内参,是对相机物理特性的近似)等参数; 投影矩阵 : P=K [ R | t ] 是一个3×4矩阵,混合了内参外参而成。 P=K[Rt] 二.基本知识介绍及 1、摄像机模型 Pinhole Camera模型如下图所示: 摄像机模型与标定 - 小企鹅 - 企鹅的博客 是一个小孔成像的模型,其中: [1]O点表示camera centre,即相机的中心点,也是相机坐标系的中心点; [2]z轴表示principal axis,即相机的主轴; [3]q点所在的平面表示image plane,即相机的像平面,也就是图片坐标系所在的二维平面; [4]O1点表示principal point,即主点,主轴与像平面相交的点; [5]O点到O1点的距离,也就是右边图中的f,即相机的焦距; [6]像平面上的xy坐标轴是与相机坐标系上的XY坐标轴互相平行的; [7]相机坐标系是以X,Y,Z(大写)三个轴组成的且原点在O点,度量值为米(m); [8]像平面坐标系是以x,y(小写)两个轴组成的且原点在O1点,度量值为米(m); [9]像素坐标系一般指图片相对坐标系,在这里可以认为像平面坐标系在一个平面上,不过原点是在图片的角上,而且度量值为像素的个数(pixel); 2、相机坐标系→成像平面坐标系 [1]以O点为原点建立摄像机坐标系。点Q(X,Y,Z)为摄像机坐标系空间中的一点,该点被光线投影到图像平面上的q(x,y,f)点。 图像平面与光轴z轴垂直,投影中心距离为f (f是相机的焦距)。按照三角比例关系可以得出: x/f = X/Z y/f = Y/Z ,即 x = fX/Z y = fY/Z 以图像平面的左上角或左下角为原点建立坐标系。假设像平面坐标系原点位于图像左下角,水平向右为u轴,垂直向上为v轴,均以像素为单位。 以图像平面与光轴的交点O1 为原点建立坐标系,水平向右为x轴,垂直向上为y轴。原点O1一般位于图像中心处,O1在以像素为单位的图像坐标系中的坐标为(u0, v0)。 像平面坐标系像素坐标系虽然在同一个平面上,但是原点并不是同一个。 摄像机模型与标定 - 小企鹅 - 企鹅的博客 设每个像素的物理尺寸大小为 dx * dy (mm) ( 由于单个像素点投影在图像平面上是矩形而不是正方形,因此可能dx != dy), 图像平面上某点在成像平面坐标系中的坐标为(x, y),在像素坐标系中的坐标为(u, v),则二者满足如下关系:[即(x, y)→(u, v)] u = x / dx + u0 v = y / dy + v0 用齐次坐标与矩阵形式表示为: 摄像机模型与标定 - 小企鹅 - 企鹅的博客 将等式两边都乘以点Q(X,Y,Z)坐标中的Z可得: 摄像机模型与标定 - 小企鹅 - 企鹅的博客 将摄像机坐标系中的(1)式代入上式可得: 则右边第一个矩阵第二个矩阵的乘积亦为摄像机的内参数矩阵(单位为像素),相乘后可得: (2) (1)式相比,此内参数矩阵中f/dx, f/dy, cx/dx+u0, cy/dy+v0 的单位均为像素。令内参数矩阵为K,则上式可写成: 摄像机模型与标定 - 小企鹅 - 企鹅的博客 (3) 三.相机内参K(与棋盘所在空间的3D几何相关) 在计算机视觉中,摄像机内参数矩阵 其中 f 为摄像机的焦距,单位一般是mm;dx,dy 为像元尺寸;u0,v0 为图像中心。 fx = f/dx, fy = f/dy,分别称为x轴y轴上的归一化焦距. 为更好的理解,举个实例: 现以NiKon D700相机为例进行解其内参数矩阵: 就算大家身边没有这款相机也无所谓,可以在网上百度一下,很方便的就知道其一些参数—— 焦距 f = 35mm 最高分辨率:4256×2832 传感器尺寸:36.0×23.9 mm 根据以上定义可以有: u0= 4256/2 = 2128 v0= 2832/2 = 1416 dx = 36.0/4256 dy = 23.9/2832 fx = f/dx = 4137.8 fy = f/dy = 4147.3 分辨率可以从显示分辨率与图像分辨率两个方向来分类。 [1]显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少。由于屏幕上的点、线面都是由像素组成的, 显示器可显示的像素越多,画面就越精细,同样的屏幕区域内能显示的信息也越多,所以分辨率是个非常重要的性能指标之一。 可以把整个图像想象成是一个大型的棋盘,而分辨率的表示方式就是所有经线纬线交叉点的数目。 显示分辨率一定的情况下,显示屏越小图像越清晰,反之,显示屏大小固定时,显示分辨率越高图像越清晰。 [2]图像分辨率则是单位英寸中所包含的像素点数,其定义更趋近于分辨率本身的定义。 四.畸变参数(与点集如何畸变的2D几何相关。) 采用理想针孔模型,由于通过针孔的光线少,摄像机曝光太慢,在实际使用中均采用透镜,可以使图像生成迅速,但代价是引入了畸变。 有两种畸变对投影图像影响较大: 径向畸变切向畸变。 1、径向畸变 对某些透镜,光线在远离透镜中心的地方比靠近中心的地方更加弯曲,产生“筒形”或“鱼眼”现象,称为径向畸变。 一般来讲,成像仪中心的径向畸变为0,越向边缘移动,畸变越严重。不过径向畸变可以通过下面的泰勒级数展开式来校正: xcorrected = x(1+k1r2+k2r4+k3r6) ycorrected = y(1+k1r2+k2r4+k3r6) 这里(x, y)是畸变点在成像仪上的原始位置,r为该点距离成像仪中心的距离,(xcorrected ,ycorrected )是校正后的新位置。 对于一般的摄像机校正,通常使用泰勒级数中的前两项k1k2就够了;对畸变很大的摄像机,比如鱼眼透镜,可以使用第三径向畸变项k3 2、切向畸变 当成像仪被粘贴在摄像机的时候,会存在一定的误差,使得图像平面透镜不完全平行,从而产生切向畸变。也就是说,如果一个矩形被投影到成像仪上时, 可能会变成一个梯形。切向畸变可以通过如下公式来校正: xcorrected = x + [ 2p1y + p2 (r2 + 2x2) ] ycorrected = y + [ 2p2x + p1 (r2 + 2y2) ] 这里(x, y)是畸变点在成像仪上的原始位置,r为该点距离成像仪中心的距离,(xcorrected ,ycorrected )是校正后的新位置。 五.摄像机的外参数 旋转向量(大小为1×3的矢量或旋转矩阵3×3)平移向量(tx,ty,tz)。 旋转向量:旋转向量是旋转矩阵紧凑的变现形式,旋转向量为1×3的行矢量。 r就是旋转向量,旋转向量的方向是旋转轴 ,旋转向量的模为围绕旋转轴旋转的角度。 通过上面的公式,我们就可以解出旋转矩阵R。同样的已知旋转矩阵,我们也可以通过下面的公式解得到旋转向量: 。
<think>好的,用户的问题是如何将图像相机坐标系转换为大地坐标系,需要方法公式。首先,我需要回忆一下相关的坐标系转换知识。根据之前的引用,世界坐标系相机坐标系之间的转换通常涉及旋转平移,也就是刚体变换,可以用外参矩阵来表示。用户提到的大地坐标系,应该属于世界坐标系的一种,所以问题可以转化为如何从相机坐标系转换到世界坐标系。 接下来,我需要整理转换的步骤。根据引用[1][3],相机到世界的转换通常需要外参矩阵,包括旋转矩阵R平移向量T。但用户可能还需要考虑相机内参,比如焦距、主点等,但问题中主要关注的是外参部分,因为内参可能已经处理过了。 然后,用户提供的引用[2]中有一个例子,使用Rodrigues向量转换为旋转矩阵,再应用平移。这可能是一个实际的代码示例,但用户需要的是公式。因此,我需要将这个过程用数学公式表达出来,可能需要分步骤:首先将相机坐标系中的点通过旋转平移转换到世界坐标系,或者反过来?需要确认转换方向。根据问题,是相机坐标系转大地坐标系(世界坐标系),所以应该是应用旋转平移将相机坐标系的点转换到世界坐标系。 根据引用[3],坐标系变换有左乘右乘的区别。这里可能需要明确变换的顺序。通常,世界到相机的转换是先将点旋转,再平移,而逆变换则是先反向平移,再反向旋转。因此,从相机到世界的转换应该是逆过程,即先应用平移的逆,再应用旋转的逆,或者用旋转矩阵的转置,因为旋转矩阵是正交矩阵。 另外,引用[4]提到像平面坐标系相机坐标系的平移,但用户的问题可能已经处理了这部分投影,直接需要从相机三维坐标到世界三维坐标的转换。因此,重点在外参矩阵。 可能的步骤是:给定相机坐标系中的点P_c,世界坐标系中的点P_w,转换公式为P_w = R^T * (P_c - T),其中R是旋转矩阵,T是平移向量。或者可能需要用RT的组合矩阵。这里需要确认公式的正确形式。 根据引用[2]的例子,代码中是kp_coord_xyz_rgb = np.dot(np.transpose(rotationMatrix), kp_coord_xyz - T),也就是转置旋转矩阵乘以(点减去平移向量)。因为旋转矩阵的转置等于其逆矩阵,所以这相当于将点从当前坐标系(RGB相机)转换到目标坐标系(深度相机,即世界坐标系)。因此,公式应该是P_w = R^T * (P_c - T)。或者可能是否先减去T再旋转?这需要数学推导。 另外,一般情况下,从相机到世界坐标系的转换公式应该是P_w = R * P_c + T,如果RT是将世界坐标系转换到相机坐标系参数。因为通常外参矩阵是将世界坐标转换为相机坐标,所以反过来,如果已知外参的RT(世界到相机),则相机到世界的转换就是P_w = R^{-1}(P_c - T) = R^T (P_c - T),因为R是正交矩阵,逆等于转置。 因此,正确的公式应该是P_w = R^T * (P_c - T),其中RT是世界坐标系相机坐标系的变换参数。用户需要明确他们是否有外参的RT,或者是否需要自己标定这些参数。 另外,用户的问题中提到的是大地坐标系,可能需要考虑地理坐标的转换,比如涉及WGS84等椭球模型,但根据引用内容,可能用户的问题更偏向于刚体变换,即常规的世界坐标系转换,而不是地理坐标的复杂转换。因此,可能不需要涉及高程、椭球参数等,只需要三维欧几里得空间中的旋转平移。 总结步骤: 1. 获取相机外参:旋转矩阵R平移向量T,这些参数描述了世界坐标系相机坐标系的变换。 2. 对于相机坐标系中的点P_c,应用逆变换:先减去平移向量T,再乘以旋转矩阵的逆(即转置R^T),得到世界坐标系中的点P_w。 3. 公式:P_w = R^T * (P_c - T) 但需要验证这个公式是否正确。例如,假设世界坐标系相机坐标系的变换是P_c = R * P_w + T,那么解这个方程得到P_w = R^T (P_c - T),符合之前的推导。 因此,最终的转换公式就是这个。在引用[2]的例子中,确实使用了转置的旋转矩阵,并先减去平移向量,再相乘,所以这个公式是正确的。 另外,用户可能需要知道如何获取RT,这通常通过相机标定得到,比如使用标定板或者已知的控制点。此外,如果存在多个坐标系转换,比如图像坐标系相机坐标系,可能需要内参矩阵,但用户的问题可能已经处理了这部分,直接从相机坐标系到世界坐标系。 因此,回答应该包括转换公式,步骤说明,以及可能的注意事项,如参数获取坐标系定义的一致性。</think>要将图像相机坐标系转换为大地坐标系(通常作为世界坐标系),需通过刚体变换实现。以下是关键步骤与公式推导: ### 一、转换原理 坐标系转换依赖**旋转矩阵**$R$(3x3)**平移向量**$T$(3x1),其数学关系为: $$P_{\text{world}} = R^T \cdot (P_{\text{camera}} - T)$$ 其中: - $P_{\text{camera}}$:相机坐标系中的点坐标(三维向量) - $R^T$:旋转矩阵的转置(即逆变换) - $T$:平移向量(世界坐标系原点在相机坐标系中的位置) ### 二、转换步骤 1. **获取相机外参** 需通过标定确定$R$$T$,通常使用棋盘格标定法或多视图几何方法。例如OpenCV的`calibrateCamera`函数可直接输出外参矩阵。 2. **坐标平移修正** 将相机坐标系中的点减去平移量: $$P_{\text{translated}} = P_{\text{camera}} - T$$ 3. **坐标旋转对齐** 应用旋转矩阵的逆变换(即转置): $$P_{\text{world}} = R^T \cdot P_{\text{translated}}$$ ### 三、代码示例(Python) ```python import numpy as np # 相机外参(示例数据) R = np.array([[0.707, -0.707, 0], # 旋转矩阵 [0.707, 0.707, 0], [0, 0, 1]]) T = np.array([10, 5, 3]) # 平移向量 # 相机坐标系中的点 P_camera = np.array([2, 3, 1]) # 转换为世界坐标系 P_translated = P_camera - T P_world = np.dot(R.T, P_translated) print("World Coordinates:", P_world) ``` ### 四、注意事项 1. **参数方向性**:确保$R$$T$是**从世界坐标系相机坐标系**的变换参数[^1]。 2. **单位一致性**:平移向量$T$需与坐标点的单位(如米、毫米)一致。 3. **三维到二维转换**:若需投影到二维大地平面(如GIS系统),需额外进行高程投影椭球模型修正(如WGS84)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值