基于苹果手机采集数据实现RGBD三维重建

本文介绍了如何利用苹果手机的雷达功能和ARKitAPI采集RGB和深度数据,以及通过第三方App简化数据获取。重点讲述了使用TSDF和Open3D进行三维重建的方法,包括数据预处理、置信度筛选和GPU加速的bundlefusion重建技术。

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

由于苹果手机自带雷达(pro),因此在进行三维重建过程中,可以借助苹果手机,实现对深度图和rgb图像的采集,再根据手机相机的内参和姿态,实现三维重建。

RGBD数据采集

苹果手机的开发API是ARkit,这意味着如果想获取苹果手机拍摄的深度数据和RGB数据等,需要通过它的api进行开发,调用手机的相机接口,进行获取数据,显然这个流程太麻烦且没有必要,因此有人开发了相关的app,只需要通过app进行拍摄,就可以获取一份数据包,然后导出到电脑即可。

  • 相关程序app介绍:链接
  • image.png
  • 操作也很简单,打开录制,对着物体录制一段视频,然后内存里面就会存储一个文件夹,文件夹名称随机,主要内容包括:
    • confidence:置信度文件夹,记录每一帧深度图的置信度信息,png格式
    • depth:深度图文件夹,记录每一帧深度数据
    • camera_matrix.csv: 相机内参
    • imu.csv: 记录相机移动的数据
    • rgb.mpg: 录制的彩色视频,即rgb数据

进行三维重建

使用app提供方法

该作者同样提供了相关的python处理代码:链接,使用方式也比较简单,只需要将采集的数据文件夹放在项目根目录下,输入命令: python stray_visualize.py <path-to-dataset>即可显示,通过支持查看点云、重建、相机坐标系等参数
image.png
image.png

总结

项目使用tsdf的方式进行三维重建,借助open3D实现可视化和模型生成,其首先根据置信度将深度图进行筛选,小于限定置信度的深度值设置为0,其次将视频处理成rgb帧,融合深度图里,借助相机内参和姿态进行三维重建

tsdf重建

上一种方式也是通过tsdf进行重建,但是是借助open3D来实现,tsdf-fusion-python 是一个比较直观的实现tsdf算法的程序,其主要思想参考:链接
由于tsdf-fusion-python 可以借助gpu进行运算,这意味着对于处理大批量的场景和数据,其运行速度可以远远小于第一种方式,因此,如果需要调用gpu,只需要配置cuda,程序默认会查看能否调用gpu,当然如果不支持gpu方式,那么通过也可以用cpu跑
问题是,tsdf-fusion-python 程序支持的数据格式和第一种方式并不一致,这意味着需要写脚本将采集到的rgbd数据做一层转换,处理成该程序支持的格式,主要流程如下:

def deal_camera_data(flags,data):
    out_path = "CameraData"
    if not os.path.exists(out_path):
        os.makedirs(out_path)
    #获取相机内参和视频读取
    intrinsics = get_intrinsics(data['intrinsics'])
    # 保存相机内参
    intrinsics_filename = os.path.join(out_path, 'camera-intrinsics.txt')
    np.savetxt(intrinsics_filename, intrinsics.intrinsic_matrix, fmt='%.6f')
    rgb_path = os.path.join(flags.path,'rgb.mp4')
    video = skvideo.io.vreader(rgb_path)

    for i ,(T_WC,rgb) in enumerate(zip(data['poses'],video)):
        print(f"Integrating frame {i:06}",end='\r')

        #处理深度图
        confidence = load_confidence(os.path.join(flags.path, 'confidence', f'{i:06}.png'))
        depth_path = data['depth_frames'][i]
        depth_mm = np.array(Image.open(depth_path))
        #置信度过滤
        depth_mm[confidence<2] = 0.0
        depth_mm = depth_mm.astype(np.uint16)
        # depth = load_depth(depth_path)
        o3d.io.write_image(os.path.join(out_path,f"frame-{i:06d}.depth.png"),o3d.geometry.Image(depth_mm))
        #处理rgb图像
        rgb = Image.fromarray(rgb)
        rgb = rgb.resize((DEPTH_WIDTH,DEPTH_HEIGHT))
        rgb = np.array(rgb)

        #保存rgb图像
        rgb_filename = os.path.join(out_path,f"frame-{i:06d}.color.jpg")
        Image.fromarray(rgb).save(rgb_filename)



        # 保存相机姿态
        pose_filename = os.path.join(out_path, f"frame-{i:06d}.pose.txt")
        np.savetxt(pose_filename, T_WC, fmt='%.6f')

bundlefusion重建

同样需要对原始采集的数据做处理,其难点在于程序环境的搭建,源码
主要参考网上vs2017+cuda11的配置方法,然后遇到问题去源码里面的issues找相关的问题描述和解决办法即可,但是最终我的建模效果没有比第二种好多少
具体环境配置就不描述了,如果遇到问题可以留言交流

### 单目RGBD相机三维重建技术概述 对于单目RGBD相机实现三维重建的技术,主要依赖于融合视觉几何与深度学习算法。尽管传统上认为RGB-D传感器提供更丰富的数据用于即时定位与地图构建(SLAM),但研究显示仅依靠标准RGB摄像头同样能够达成高质量的三维建模效果[^3]。 #### 基础原理 核心在于通过连续帧间特征匹配计算相对位姿变化,并利用结构光或ToF(Time of Flight)获取每桢图像对应的深度信息。然而,在仅有彩色图而无额外硬件支持的情况下,则需借助多视角几何理论估计场景距离。具体来说,就是根据一系列不同位置拍摄的照片推测出物体的空间布局[^4]。 #### 关键挑战及其解决方案 - **尺度不确定性**:不同于双目或多摄像装置能直接测量实际尺寸大小,单一镜头无法独立确定远近关系。为此引入了自监督学习机制训练神经网络预测绝对尺度因子。 - **光照条件适应性差**:自然环境中光线强度频繁变动影响成像质量进而干扰后续处理流程。对此开发出了鲁棒性强的数据预处理模块以增强抗噪性能并保持细节清晰度不变。 - **运动模糊效应严重**:快速移动可能导致曝光不足造成画面失真难以解析真实形状轮廓。采用高帧率采集配合时间累积策略有效缓解此类现象带来的困扰。 #### 实现路径 一种可行方案是从开源框架出发定制化调整参数设置满足特定应用场景需求: 1. 利用ORB-SLAM2等成熟工具包初始化项目架构; 2. 集成Mask R-CNN实例分割模型辅助提取感兴趣区域内的语义标签指导配准过程; 3. 结合PointNet++点云分类器优化最终输出成果精度。 ```python import cv2 from maskrcnn_benchmark.config import cfg from predictor import COCODemo def process_frame(frame): coco_demo = COCODemo( cfg, min_image_size=800, confidence_threshold=0.7, ) predictions, _ = coco_demo.run_on_opencv_image(frame) return predictions ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水塔鸡丝

创作不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值