摄像机几何
理论:缩小光圈->效果变清晰、图像变暗(进来的光线少)
实际:加透镜 -> 将多条光线聚集到胶片上,增加亮度
从相平面 到 像素平面 坐标的转换(从三维点到二维点的映射)
三维齐次坐标一个点,除第三维,就得到对应二维空间中的点
建立起线性映射关系:(α,β是与摄像机有关的参数,c是坐标系的偏移)
摄像机偏斜
像素不是方的,会有夹角 。
摄像机坐标系下的摄像机模型
摄像机坐标下的P点 映射到 像素平面P’
世界坐标系*
->摄像机坐标系 (R,T 代表 旋转平移)
M:投影矩阵
M的自由度:R,T因为包括xyz三轴,所以各有三个,K有5个,共11个
定理
最小二乘解
把总误差求得最小,得出逼近正解的解
奇异值分解(Singular Value Decomposition,简称SVD)
是一种数学方法,用于将一个矩阵分解为三个矩阵的乘积。SVD在许多领域中都有广泛的应用,包括线性代数、数据压缩、图像处理、统计学和机器学习等。
对于一个m×n的矩阵A,SVD将其分解为以下形式:
A = UΣV^T
其中,U是一个m×m的正交矩阵,Σ是一个m×n的对角矩阵,对角线上的元素称为奇异值,V^T是一个n×n的正交矩阵的转置。
在SVD分解中,U和V是正交矩阵,意味着它们的列向量是单位向量且两两正交。Σ是一个对角矩阵,对角线上的元素称为奇异值。奇异值按照从大到小的顺序排列,表示了矩阵A在每个维度上的重要性。
SVD的应用包括:
-
数据压缩和降维:通过保留最重要的奇异值,可以将高维数据矩阵压缩为低维表示,从而实现数据降维和减少存储空间。
-
矩阵逆和伪逆:SVD可以用于求解矩阵的逆和伪逆,尤其对于奇异或接近奇异的矩阵。
-
图像处理:SVD可以应用于图像压缩、去噪、图像恢复等领域,例如著名的JPEG图像压缩算法就使用了SVD。
-
推荐系统:在协同过滤推荐算法中,可以使用SVD对用户-物品评分矩阵进行分解,从而实现推荐物品给用户。
-
主成分分析(PCA):PCA是一种基于SVD的数据分析方法,用于提取数据集中的主要特征和模式。
通过奇异值分解,我们可以将一个复杂的矩阵分解为简单的组成部分,从而能够更好地理解和处理矩阵的性质和特征。
摄像机标定
即求解摄像机的内外参数矩阵
m就是V的最后一列,转成3×4的投影矩阵M,M和真实的投影矩阵之间还存在着一定的比例关系
最少取6对点,组成齐次方程,就可解出M
畸变
k是畸变系数;
和上面不一样,不是超定线性方程组的求解。是非线性方程组,要使用牛顿法等迭代方法求解。
单视图重建
欧式变换:是一种在欧几里得空间中保持距离不变的变换,也就是说,如果在变换前两点的距离为d,那么在变换后这两点的距离仍然为d。欧式变换包括旋转、平移和反射。
齐次坐标:是一种扩展的坐标表示方法,它在欧式坐标的基础上增加了一个额外的维度,通常用于表示三维空间中的点和向量。
-
从欧式坐标到齐次坐标的转换:假设我们有一个三维欧式坐标(x, y, z),我们可以通过添加一个额外的维度w(通常设为1)来将其转换为齐次坐标(x, y, z, w)。这样做的好处是可以使用矩阵乘法来表示和执行复杂的变换,如旋转、缩放、平移和透视投影。
-
从齐次坐标到欧式坐标的转换:假设我们有一个齐次坐标(x, y, z, w),我们可以通过将x, y, z分别除以w来将其转换为欧式坐标(x/w, y/w, z/w)。这个过程通常被称为齐次坐标的去齐次化。
左:欧式-> 右:齐次 ; 右式就变成了一个复合操作:先旋转再平移
2D平面上的变换
欧式变换
欧式变换只是等距变换的一种情况
相似变换
s:伸缩 ;R:旋转;t:平移
仿射变换
透视变换
三维空间中的变换
三维重建基础与极几何
COLMAP - 三维重建库
COLMAP 是一个开源的三维重建库,它包含了从图片的特征提取到最终的三维可视化的所有步骤。这个库不仅仅包含了命令行接口,同时也提供了一套完整的GUI接口,能够让用户直观地操作并理解三维重建的过程。
COLMAP的主要特点包括:
-
完整的SfM(Structure from Motion)和MVS(Multi-View Stereo)管道
-
支持增量式和全局式的SfM方法
-
提供了丰富的接口,包括命令行接口和GUI接口
-
使用C++编写,提供了丰富的API,便于开发者进行二次开发
-
提供了丰富的文档和示例,便于新手上手
-
支持Linux,Mac OS,和Windows平台
COLMAP的使用步骤一般如下:
- 特征提取:对输入的图片进行特征提取,找到图片中的关键点和描述符
- 特征匹配:对提取出的特征进行匹配,找到不同图片之间的关系
- Sparse Reconstruction:使用SfM方法对匹配的特征进行稀疏重建,得到一个粗糙的三维模型
- Dense Reconstruction:使用MVS方法对稀疏重建的结果进行密集重建,得到一个详细的三维模型
- 三维可视化:对重建的三维模型进行可视化
SfM方法和MVS方法
SfM (Structure from Motion) 和 MVS (Multi-View Stereo) 是两种常用于三维重建的方法。这两种方法都是从多张二维图片中提取信息,然后利用这些信息重建出三维的场景或对象。
SfM (Structure from Motion)
SfM 是一种从图像序列中恢复三维结构和相机运动的技术。这种技术基于视觉感知中的运动视差原理,即通过观察相同物体在不同视角下的位置变化,来推断出物体的三维形状和相机的运动。
SfM 的步骤一般如下:
-
特征检测和匹配:在每一张图像中检测特征点,并在不同图像中找出匹配的特征点对。
-
运动恢复:通过匹配的特征点对,利用多视角几何原理,恢复出相机的运动(即相机的位置和姿态)。
-
结构恢复:在已知相机运动的情况下,通过三角测量原理,恢复出特征点的三维坐标,从而得到场景的稀疏三维结构。
MVS (Multi-View Stereo)
MVS 是一种从多视角的图像中恢复物体的密集三维结构的技术。与SfM不同,MVS的目标是恢复出物体的完整三维形状,包括那些没有明显特征的表面。
MVS 的步骤一般如下:
-
深度图估计:对于每一张图像,都计算一个深度图,表示图像中每个像素点对应的三维点的深度信息。
-
深度图融合:将所有的深度图融合在一起,生成一个全局的点云表示。
-
表面重建:从点云中恢复出物体的表面,通常使用一些表面重建算法,如泊松表面重建等。
MVS的深度估计一般是通过神经网络直接学习的
总的来说,SfM 和 MVS 是三维重建的两个关键步骤,这两个步骤通常结合在一起使用,先使用SfM获得稀疏的三维结构和相机运动信息,然后在此基础上使用MVS恢复出密集的三维结构。
poisson重建和mesh重建
Poisson 重建 和 Mesh 重建 是两种常用的表面重建技术。这两种技术都是尝试从点云数据中恢复出物体的三维表面。
Poisson 重建
Poisson 重建是一种基于偏微分方程的表面重建方法。该方法假设输入的点云是从某个平滑的表面采样得到的,并且每个采样点都有一个与表面法向量对应的向量。在这个假设下,表面重建问题就可以转化为求解一个Poisson方程。
核心思想:点云代表了物体表面位置,其法向量代表了内外的方向。通过隐式地拟合一个由物体派生的指示函数,可以给出平滑的物体表面估计
Poisson 重建的步骤一般如下:
-
计算法向量:对于每一个点云中的点,计算其对应的法向量。这一步通常通过对点云进行PCA(主成分分析)来完成。
-
求解Poisson方程:使用点云和对应的法向量,构造一个Poisson方程,然后求解这个方程,得到一个标量场。
-
提取等值面:从求解得到的标量场中提取等值面,这个等值面就是重建出来的表面。
Poisson 重建的优点是可以处理大规模的数据,并且能够生成平滑的表面。但是,它需要知道点云的法向量,这在某些情况下可能很难获得。
Mesh 重建
Mesh 重建是一种直接从点云中生成三角网格的方法。这种方法一般需要先估计出点云的拓扑结构,然后再根据这个拓扑结构生成网格。
Mesh 重建的步骤一般如下:
-
估计拓扑结构:通过一些算法(如最近邻搜索、k-means聚类等)估计出点云的拓扑结构。
-
生成网格:根据估计的拓扑结构,生成三角网格。这一步通常通过一些网格生成算法(如Delaunay 三角剖分等)来完成。
Mesh 重建的优点是可以直接生成网格,不需要额外的步骤。但是,它对点云的质量和密度有较高的要求,如果点云质量不好或者密度不均匀,可能会生成质量较差的网格。
双目立体视觉重建
多视图重建
运动恢复结构(SFM)系统设计
同时定位与建图(SLAM)系统设计