三维重建
三维重建
sfm算法原理
https://wjiajie.github.io/contents/slam-sfm/sfm-intro/
从无序图片中进行三维重建的离线算法
从运动中恢复物体的三维结构,估计出图片的R,t,结合相机内参重建稀疏点云
重建稀疏点云–重建稠密点云–点云融合-生成网格–添加纹理
SFM负责重建稀疏点云这一部分,从多张视图中估计出照片的旋转平移矩阵R,t,结合相机内参恢复物体稀疏点云结构。
获得两张图片中的对应点,然后估计基础矩阵F,再估计本征矩阵E,再通过SVD分解求得较好的R,t,得到物体的三维点,最后将多个稀疏点云融合
内参未知的情况下,F可通过SVD分解重构本质矩阵
SfM 流程总结:
1、关键点检测(Keypoint Detection):
从多张图像中提取关键点(如图中的雕塑)。这些关键点通常是图像中具有显著特征的点,例如角点或纹理丰富的区域。关键点的提取有助于在不同视图中进行匹配。
2、关键点匹配(Matching Keypoints):
在不同的图像之间对关键点进行匹配,找到在不同视图中对应的点对。这些匹配的点对为后续的几何推导奠定基础。通过匹配,可以确定哪些点在多幅图像中是相同的三维点的投影。
3、基础矩阵计算(Fundamental Matrix Calculation):
使用匹配到的关键点对,计算基础矩阵 F 。基础矩阵 F 描述了两个图像之间的几何约束关系,而不依赖于相机的内参。这一矩阵可以将一个图像中的点映射到另一个图像的极线上,定义了视图间的点对几何约束。
4、本质矩阵计算(Essential Matrix Calculation):
在相机的内参已知的情况下,将基础矩阵 F 转换为本质矩阵 E 。本质矩阵包含了两台相机之间的相对旋转和平移信息。它不仅描述了点在两幅图像之间的几何关系,还体现了相机的相对姿态。
5、相机位姿恢复([R|t] Decomposition):
从本质矩阵 E 中分解出相机的相对位姿,即旋转矩阵 R 和平移向量 t 。这些参数描述了相机在三维空间中的相对位置和方向,从而使我们能够将两个图像的坐标系关联起来。
6、三角测量(Triangulation):
利用多视角的点对和已估计的相机位姿,通过三角测量恢复三维空间中关键点的实际位置。这一步通过几何关系计算出三维点的空间坐标,从而生成场景的稀疏三维结构。
7、构建三维结构(3D Structure Construction):
最终,经过上述步骤,得到的三维点可以组合成稀疏的三维点云模型,描述了场景的基本结构。这一稀疏模型可进一步用于密集重建、光束平差优化等后续步骤。
colmap
特征提取
特征匹配
SFM稀疏点云生成
去畸变
稠密点云生成
稠密点云融合 全局BA(非线性优化)
openMVS
ply格式转为mvs
生成网格
添加纹理
结果可视化
NeRF
辐射神经场
直接输出是视频
本质上是一个生成逼真渲染的技术,隐式表达
sfm与slam关系
- 共同点:
- 两者都涉及到相机的运动和三维结构的重建,通常需要提取特征点并进行匹配。
- 都依赖于几何关系和优化技术。
- 不同点:
- 实时性:SLAM强调实时性,适用于动态环境;SFM通常是离线处理。
- 目标:SFM主要关注重建场景的三维模型,而SLAM则同时关注定位和地图构建。
- 数据来源:SLAM可以利用多种传感器数据(如激光、IMU等),而SFM主要基于视觉图像。
ply数据格式
Stanford Triangle Format
https://huangwang.github.io/2019/06/04/PLY%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F%E5%88%86%E6%9E%90/
该格式主要用以储存立体扫描结果的三维数值,透过多边形片面的集合描述三维物体,与其他格式相较之下这是较为简单的方法。它可以储存的资讯包含颜色、透明度、表面法向量、材质座标与资料可信度,并能对多边形的正反两面设定不同的属性。
element vertex 100
property float x
property float y
property float z
property float nx
property float ny
property float nz
…