相机内参矩阵、外参矩阵、畸变矩阵

1、相机针孔模型

在这里插入图片描述
图中,X坐标系是针孔所在坐标系,Y坐标系为成像平面坐标系,P为空间一点,小孔成像使得P点在图像平面上呈现了一个倒立的像。
在这里插入图片描述
在这里插入图片描述
齐次形式:
在这里插入图片描述
在此,我们先暂时舍弃比例因子f/x3,只建立[y1 y2 1]与[x1 x2 x3]的关系,可以得到表达式
在这里插入图片描述
由于舍弃了一个比例因子,等式不再成立,因此使用~来表示二者之间的相似关系。
因为
在这里插入图片描述
所以
在这里插入图片描述

2、相机矩阵(camera matrix )

在这里插入图片描述如果我们用[xw yw zw ]来表示一个空间点的坐标,用[x y]来表示对应于成像平面上的一个图像点的坐标(不是像素坐标),那么这两个点肯定是有一种变换关系联系起来的,我们把这个变换关系记为P,

但是大家都喜欢用齐次坐标,那我们就用齐次坐标来表示上述这两个点(齐次坐标有优点:可以将旋转和平移用一种统一的格式来描述)。
在这里插入图片描述针孔模型中的相机矩阵如下:
在这里插入图片描述
分解结果如下:
在这里插入图片描述

3、内参矩阵(Intrinsic matrix)

图像坐标系转化为像素坐标系
在这里插入图片描述
所以:
在这里插入图片描述
在这里插入图片描述
内参矩阵:
在这里插入图片描述
f:焦距,单位毫米,dx:像素x方向宽度,单位毫米,1/dx:x方向1毫米内有多少个像素
f/dx:使用像素来描述x轴方向焦距的长度
f/dy:使用像素来描述y轴方向焦距的长度
u0,v0,主点的实际位置,单位也是像素。

内参矩阵反应了相机自身的属性,各个相机是一不一样的,需要标定才能知道这些参数。

4、外参矩阵( extrinsic matrix)

在这里插入图片描述
世界坐标系到相机坐标系的变换
空间某个点p,其在世界坐标系下表示为[xw,yw,zw,1],在相机坐标系下表示为[xc,yc,zc,1]:
在这里插入图片描述
代入
在这里插入图片描述
得到
在这里插入图片描述
所以
在这里插入图片描述
第一个矩阵为内参矩阵(3x3),第二个矩阵为外参矩阵(3x4),合起来就是相机矩阵,它建立了三维点齐次坐标到二维点齐次坐标的变换

5、畸变参数

在这里插入图片描述

1.径向畸变

在这里插入图片描述

2.切向畸变

在这里插入图片描述

### 相机几何原理 在计算机视觉领域,理解相机如何捕捉现实世界中的场景并将其表示为二维图像至关重要。这一过程涉及多个数学概念和技术工具,其中内参矩阵外参矩阵扮演着核心角色。 ### 内参矩阵 内参矩阵描述了相机内部的光学属性,主要包括焦距、主点偏移以及可能存在的镜头畸变系数等参数[^1]。该矩阵主要用于将三维世界的坐标投影至二维平面上,即实现了从物理空间到图像平面的空间变换。对于标准针孔模型而言,其形式通常如下: \[ K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \] 这里 \(f_x\) 和 \(f_y\) 表示沿X轴和Y轴方向上的焦距;\(c_x, c_y\) 则代表图像中心的位置,在理想情况下对应于光心在成像平面上的投影位置。 ### 外参矩阵 相比之下,外参矩阵反映了相机相对于固定参考框架的姿态变化——既包含了旋转也涵盖了平移成分。通过这种转换可以建立不同视角下观察对象之间的一致性联系。具体来说,它由两部分组成:一是旋转矩阵R(或对应的旋转向量),二是平移向量T。当涉及到多视图几何或多摄像机组件时尤为有用,比如双目立体匹配中用来同步左右摄像头获取的数据集。 #### Mono2Depth_Mat作为特殊类型的外参矩阵 值得注意的是,Mono2Depth_Mat特指一种特定情况下的外参矩阵实例,专门用于表达两个独立但关联紧密的相机间的相对位姿关系。这有助于构建更复杂的感知系统,如自动驾驶车辆上配备的不同传感器融合方案。 ### 应用场景 这些基础理论广泛应用于各种高级任务之中,例如但不限于: - **增强现实(AR)**: 准确估计虚拟物体放置的真实环境; - **机器人导航**: 实现自主移动设备对周围障碍物的有效识别与规避; - **3D建模/扫描**: 获取目标表面细节特征进而创建逼真的数字化副本; - **动作捕捉**: 跟踪人体关节运动轨迹辅助动画制作等领域。 ```python import numpy as np # 定义一个简单的内参矩阵K (假设无畸变) fx, fy, cx, cy = 700., 700., 320., 240. K = np.array([[fx, 0 ,cx], [0 ,fy,cy], [0 , 0 , 1]]) print("内参矩阵:\n", K) # 假定已知某时刻相机姿态信息 from scipy.spatial.transform import Rotation as R rvec = R.from_euler('xyz', [90, 45, 0], degrees=True).as_rotvec() tvec = np.array([0.5, -0.2, 1]) def Rodrigues_to_matrix(rvec): """ 将旋转向量转为旋转矩阵 """ theta = np.linalg.norm(rvec) if theta < 1e-8: return np.eye(3) r = rvec / theta cos_theta = np.cos(theta) sin_theta = np.sin(theta) I = np.identity(3) W = np.array([ [ 0,-r[2], r[1]], [ r[2], 0,-r[0]], [-r[1], r[0], 0]]) R = I + sin_theta * W + (1-cos_theta)*np.dot(W,W) return R R_mat = Rodrigues_to_matrix(rvec) ext_param = np.hstack((R_mat,tvec.reshape(-1,1))) print("\n外参矩阵:\n", ext_param) ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值