进行稀疏重建_基于RGB-D相机的三维重建总览 包括静态与动态三维重建...

本文提供了一个关于基于RGB-D相机的三维重建的总览,包括静态场景(如KinectFusion、Kintinuous、ElasticFusion等)和动态场景(如DynamicFusion、volumeDeform等)的典型代表工作。这些重建方法利用TSDF模型或面元表示,部分针对大场景、人体动态或复杂形变,具有不同的优势和适用范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

504366736f5d6395153e27fb2b541316.png

自接触三维重建以来,一直为fusion类的三维重建所惊艳,同时心头一直盘旋着写个合集的想法,直至自己亲身实践一番后,终于可以了却心愿。故先写个总览作为备忘,也可给各位看客提供按图索骥的便利。后续还会写具体文章的分析,分享下对相关论文的理解。

基于fusion类的三维重建其实可以大体分为两种,一种是对于静态场景的三维重建,以KinectFusion为典型代表,一种是对于动态场景的三维重建,以DynamicFusion为典型代表。而不论是静态场景亦或是动态场景的fusion类重建,最大特点就是使用了TSDF模型,当然也有个别工作使用了面元(Surfel)的表示方法。值得一提的是,基于动态场景的三位重建的难度远大于基于静态场景的三位重建,当然,对于拓扑不会发生变化的重建(比如驱动一个模板mesh),难度会下降很多。下面分别介绍下代表性工作。

9010a4c7c8c068f5ac42fc4d11c284f3.png

基于静态场景的三维重建

1.KinectFusion

Newcombe的经典之作

197617bd7878ab87f78def491deb65bc.png

901bcb86f8145b3a5846006827f091d8.png

paper:

https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/ismar2011.pdf​www.microsoft.com

code:

https://github.com/ParikaGoel/KinectFusion​github.com

demo:

3d72fdf6f06917e6ffc883913de804ca.png
知乎视频​www.zhihu.com

2.Kintinuous

cef6ffca4fe8d9ff868e4bf3dde802bc.png

上述 KinectFusion 算法使用固定体积的网格模型(如256*256*256)表示重建的三维场景,从而使得只能重建固定大小的场景;另外当重建体积较大,或者网格的空间分辨率较高时很消耗显存。而且 KinectFusion 算法没有回环检测和回环优化,这也造成当相机移动距离大时,不可避免的会有累积误差。这个算法是比较完善的三维重建系统,融合了回环检测和回环优化,还在实时三维刚体重建中使用了deformation graph做非刚体变换,根据回环优化的结果,更新点的坐标,使得回环的地方两次重建的可以对齐。该算法适合大场景的三维重建。

paper:

http://www.thomaswhelan.ie/Whelan12rssw.pdf​www.thomaswhelan.ie

code:

mp3guy/Kintinuous​github.com
### 基于漫反射的三维重建方法概述 基于漫反射原理的3D模型重建主要依赖于物体表面对于光的散射特性。当光线照射到粗糙表面上时会发生漫反射,这种现象可以用于捕捉物体形状和纹理特征。 #### 数据采集阶段 为了获取高质量的数据,在数据采集过程中通常会采用多视角拍摄技术以及结构化光照设备来增强细节表现力[^2]。具体来说: - **多角度图像捕获**:通过多个不同位置布置摄像头阵列,围绕目标对象进行全面扫描。 - **环境设置**:确保均匀而稳定的光源条件,减少外界干扰因素的影响;同时可引入特定模式下的投影仪投射条纹图案辅助建模过程。 ```python import cv2 from skimage import io, color def capture_images(camera_positions): images = [] for position in camera_positions: cap = cv2.VideoCapture(position) ret, frame = cap.read() if not ret: continue gray_image = color.rgb2gray(frame) images.append(gray_image) return images ``` #### 初始估计点云生成 利用Structure-from-Motion (SfM)算法从一系列二维图片中恢复出场景的空间结构关系,并构建初步的稀疏点云集表示形式。接着应用密集匹配策略进一步细化这些离散样本点之间的联系,形成更加精确完整的稠密点云描述。 ```matlab % MATLAB code snippet demonstrating SfM process function point_cloud = sfm(images) % ... preprocessing steps ... % Perform feature detection and matching across all pairs of images. matches = match_features(images); % Triangulate matched points to obtain initial sparse reconstruction. point_cloud = triangulate_matches(matches); end ``` #### 高斯分布初始化 在此基础上,借助预先训练好的三维高斯统计模型(3DGS),能够有效地对复杂曲面形态进行拟合逼近操作,从而实现更加快捷高效的参数调整机制。 ```python class GaussianSurfaceModel: def __init__(self, mean=None, cov=None): self.mean = mean or np.zeros((3,)) self.cov = cov or np.eye(3) def fit(self, points): """Fit the model parameters based on given data.""" self.mean = np.mean(points, axis=0) centered_points = points - self.mean self.cov = np.dot(centered_points.T, centered_points) / len(points) # Example usage with fitted point cloud data model = GaussianSurfaceModel().fit(point_cloud_data) ``` #### 表面属性计算 考虑到实际物理材质特性的差异性,还需要额外记录各处法向量、颜色信息等内容作为后续渲染合成的重要依据之一。这一步骤往往涉及到对面片网格化的处理方式及其拓扑连接关系的确立。 ```c++ // C++ pseudo-code showing surface property extraction void compute_surface_properties(PointCloud& pc){ for(auto& p : pc.points()){ Vector3 normal = estimate_normal(p); // Estimate local orientation Color albedo = sample_texture(p.position()); // Retrieve appearance info p.set_attributes(normal, albedo); } } ``` #### 渲染可视化 最终经过上述各个步骤所得到的结果将以直观可视的形式展现出来。此时可以根据需求选择合适的显示方案,比如实时交互式的虚拟现实体验或是静态截图保存等功能选项。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值