Skip to content

基于摄影测量的跨房间点云配准与重建精度研究

约 2632 字大约 9 分钟

研究

2025-07-25

摄影测量技术在单体房间三维重建中表现良好,然而实际建筑环境多为多房间连通结构。本文旨在探究摄影测量方法在跨房间三维重建中的性能表现,重点分析其重建房间连接处的效果。

基于固定照片

设备及工具

  • 设备:魅族21NOTE(谷歌相机)
  • 软件:MetaShape

实验数据采集包含厨房和客厅两个连通空间,共获取284张多视角高清图像。通过摄影测量算法处理,成功重建了场景的三维点云模型,以下是采集数据的部分截图。 image.png

重建效果

image.png 实验结果表明,当前摄影测量方法在厨房与客厅的空间衔接上存在明显不足。从结果可以看出,由于特 征点匹配失败,两个功能空间未能正确重建其连接关系。根据建筑平面图比对,厨房入口(对应客厅'蜡笔小新'门帘位置)未能实现准确重建,这表明该方法在跨空间三维重建方面仍需改进。

定位辅助

在尝试通过为每组拍摄照片标注位置信息来实现跨房间三维重建的粗配准时,我们发现基于GPS的定位方案存在显著局限性。理论上,利用相同定位标签的空间对应关系可以为点云重建提供初始对齐依据,且普通GPS在开放空间的定位精度(约2-3米误差)对于房间级重建尚可接受。然而实际测试表明,室内环境的GPS信号质量存在严重衰减问题:在有窗房间中,距离窗口仅2米处的信号强度已出现明显下降;而在无窗的低楼层室内环境,GPS信号接收成功率不足10%,基本无法实现有效定位。如图所示,封闭空间与开放区域的信号强度对比差异显著,这直接影响了基于位置标签的配准方案在室内重建中的实际应用价值。该现象提示我们,在室内三维重建任务中需要探索不依赖GPS信号的替代方案,如视觉标记辅助或惯性导航融合等方法。 image.png 在缺乏室内蓝牙/WiFi定位系统支持的情况下,本研究暂时无法深入探索基于无线信号的室内定位方案。然而,在GPS信号良好的半开放环境中(如临近窗户区域或低层建筑阳台),通过为采集图像添加位置标签来实现粗配准的思路具有理论可行性。

基于视频截取

针对当前基于照片的三维重建方法中存在的图像数量不足及连续性较差等问题,现在提出了一种基于视 频关键帧提取的改进方案。通过理论分析和实验验证,我们发现传统静态图像采集方式主要存在以下两 个技术瓶颈:

  1. 样本数量限制:静态照片采集效率低下,难以获取足够数量的高质量样本;
  2. 时序连续性缺失:离散拍摄导致帧间关联信息丢失,影响重建精度。

为解决上述问题,本研究创新性地采用视频录制结合关键帧提取的技术路线。相较于静态拍摄,视频采 集具有以下优势:

  • 可实现每秒30帧以上的连续图像捕获
  • 保证帧间运动参数的连续性
  • 显著提升数据采集效率 在硬件选择方面,经过多维度评估(包括分辨率、动态范围、色彩还原度等指标),最终选用Pocket3作为视频采集设备。该设备具备4K/60fps的视频录制能力,其1英寸大底CMOS传感器可提供优异的低光照性能,这些特性为后续三维重建提供了高质量的原始数据基础。

使用工具

  • 设备:DJI Pocket3
  • 软件:自己写的帧截取工具,MetaShape。

实验流程

视频拍摄

本研究采用手持Pocket3设备进行室内场景视频采集,按照以下路径实现场景全覆盖。采集过程中保持设备高度1.7米(模拟人眼视角,部分死角采用上下扫描),以0.5m/s的匀速沿顺时针方向移动,确保每个墙面获得至少3秒的连续拍摄。设备参数设置为4K UHD分辨率(3840×2160)和60fps帧率,配合全向防抖功能保证画面稳定性,同时采用自动白平衡和曝光模式以适应室内光照变化。 image.png

图片截取

本文设计并实现了一个基于Python的视频帧提取工具,其核心功能模块采用OpenCV计算机视觉库进行视频解码与图像处理。该工具的主要算法流程如下:

  1. 视频文件解析:通过OpenCV的VideoCapture接口读取视频文件,获取视频总帧数、分辨率等元数据信息:
cap = cv2.VideoCapture(video_path)
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
  1. 帧采样算法:采用等间隔采样策略提取关键帧,支持用户自定义采样间隔(1-100帧可调):
if frame_count % frame_interval == 0:
output_path = os.path.join(output_folder, f"{saved_count + 1:04d}.png")
cv2.imwrite(output_path, frame)
  1. 多线程处理架构:为避免界面卡顿,采用生产者-消费者模型,将耗时的帧提取任务放在后台线程执行:
Thread(target=self.extract_frames,
	args=(video_path, output_path, frame_interval),
	daemon=True).start()
  1. 输出文件管理:自动创建目标目录,并按0001.png、0002.png等四位编号格式保存提取的帧图 像,确保文件序列的规范性和可追溯性。 当然,为了方便操作,最后为他做了一个简单的图形界面,如下图: image.png 针对原始视频数据(总帧数13,046帧,时长544秒@60fps),基于帧间连续性分析采用每20帧提取1帧 的采样方案,最终获得653张关键帧图像,采样率为1.5%,相邻采样帧时间间隔约0.67秒。采样后的图 像数据集具有3840×2160的高分辨率。

重建结果

image.png 实验结果表明,基于视频帧提取的三维重建方法在空间位置还原方面表现良好。充分验证了视频帧采样 策略的有效性。

进阶探索

COLMAP(Computational Lightmapping)是一款开源的运动恢复结构(Structure-from-Motion, SfM)和多视图立体(Multi-View Stereo, MVS) 三维重建工具包,由瑞士苏黎世联邦理工学院(ETH Zurich)开发。它能够从一组无序的二维照片中自动重建出场景的三维几何结构和相机位姿,广泛应用于摄影测量、计算机视觉、虚拟现实、文化遗产数字化等领域。下面我将使用COLMP进行重建。

COLMAP重建

前期准备

首先使用上面的帧截取工具对视频每一帧进行截取,得到全视频的数据集。

筛选最优帧(关键帧选择)

直接使用所有帧会导致 数据冗余计算量过大,COLMAP 提供了 关键帧选择 方法:

colmap feature_extractor --database_path database.db --image_path frames/
colmap exhaustive_matcher --database_path database.db
colmap mapper --database_path database.db --image_path frames/ --output_path
sparse/
  • feature_extractor :提取图像特征(SIFT/SURF)
  • exhaustive_matcher :匹配特征点
  • mapper :自动选择 匹配度高的关键帧,丢弃模糊/低质量帧

运行 COLMAP 三维重建

稀疏重建(SfM)
colmap feature_extractor --database_path database.db --image_path
selected_frames/
colmap exhaustive_matcher --database_path database.db
colmap mapper --database_path database.db --image_path selected_frames/ --
output_path sparse/
  • selected_frames/ :存放筛选后的关键帧
  • sparse/ :输出稀疏点云( .bin 或 .txt 格式)
稠密重建(MVS)
colmap image_undistorter --image_path selected_frames/ --input_path sparse/0 --
output_path dense/
colmap patch_match_stereo --workspace_path dense/
colmap stereo_fusion --workspace_path dense/ --output_path dense/fused.ply
  • patch_match_stereo :生成深度图(需GPU加速)
  • stereo_fusion :融合深度图,输出 稠密点云(.ply)

重建结果

image.png 实验结果表明,基于视频帧提取的三维重建取得了显著成效。从重建结果来看,生成的点云模型不仅空 间位置准确,几何结构完整,在细节表现方面也展现出明显优势。通过优化帧选择策略,我们获得了比 原始视频采样更多的高质量图像(1500张)

3DGS(3D Gaussian Splatting)

为了更清晰还原细节,实验尝试了3DGS重建。

数据准备

在上面COLMAP过程中,可以输出以下关键文件:

  • sparse/0/cameras.bin - 相机参数
  • sparse/0/images.bin - 相机位姿
  • sparse/0/points3D.bin - 稀疏点云
  • dense/fused.ply - (可选)稠密点云 我们需要对格式进行转换,转化的命令如下:
python convert.py \
--colmap_path ./sparse/0 \
--images_path ./images \
--output_path ./gs_data

生成结构:

gs_data/
├── cameras.json
 # 相机参数
├── points3D.ply
 # 初始高斯中心
└── images/
 #
 undistorted images

3DGS训练阶段

环境配置

conda create -n gs python=3.10
conda activate gs
pip install torch torchvision torchaudio --index-url
https://download.pytorch.org/whl/cu118
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
cd gaussian-splatting
pip install -r requirements.txt

启动训练

python train.py \
-s ./gs_data \ # 输入数据路径
-m ./output \ # 模型输出路径
--iterations 30000 \ # 推荐迭代次数
--densification_interval 100 \ # 高斯密度控制
--opacity_threshold 0.005

关键参数:

  • --densification_interval :控制高斯数量增长频率
  • --position_lr_init 0.00016 :位置学习率
  • --lambda_dssim 0.2 :结构相似性权重

实时可视化

python viewer.py -m ./output

重建结果

image.png
image.png

通过3D Gaussian Splatting(3DGS)技术,我们实现了显著优于传统方法的细节重建效果。

局限性

3D Gaussian Splatting (3DGS) 在室内重建中虽然表现出色,但是会生成大量冗余高斯椭球,难以完全清除由此产生的椭圆状高斯分布杂质。但是在室外建筑中却表现良好。下面是使用无人机绕飞一圈重建的苏州虎丘塔。 image.png

总结

实验结果表明,基于视频帧提取的三维重建方法能够准确还原室内空间结构,房间连接处的几何连续性 保持良好。相较于直接使用摄像头拍摄重建点云的方法,视频帧提取方案通过优化采样策略,在保证重 建精度的同时显著提升了处理效率。