3D Gaussian Splatting(3DGS)作为三维重建领域的新SOTA,23年8月发布之后就广受关注,今年的CVPR上与之相关的文章更是有数篇之多,由此可见该技术的火热程度。与NeRF相比,在作者看来3DGS的最大优势在于其显式表达,这意味着其重建的三维场景是有潜力进行编辑的。
效果展示
2024/11/15更新
当前基于本篇文章内容,已经实现了一个3DGS重建场景的在线实时编辑框架,能够通过图形化的UI界面对所有基于3DGS和NeRF重建的场景进行编辑操作,并能够在线保存编辑结果作为一个新的重建场景;框架可以适配使用公开数据集重建的场景,也可以适配客制化数据集重建的场景,具体效果如下视频所示:
3DGS在线实时编辑
鉴于最近有关这篇文章代码的私信询问比较大,这里统一回复一下:本篇文章的代码可以小偿获取,由于工作量大,技术复杂,因此不做免费开源,希望大家体谅,如果需要代码可以私信联系~
这篇文章主要记录了对于3DGS重建场景编辑的实现,包括对重建场景中的任意物体进行平移、旋转、遮挡去除等等,下面的视频和图片简单展示了实现的效果(数据集是自己录的):
遮挡去除:
平移:
要实现3DGS重建场景的编辑,主要分为以下几个步骤 :
步骤一:COLMAP初始化
初始化步骤比较简单,只需要用默认的COLMAP进行初始化就可以了,但是由于COLMAP是第三方库,有时候初始化效果并不理想,如果录制的视频质量较差的话,COLMAP最终会生成好几个不同的稀疏重建结果,具体可以查看生成的/sparse文件夹下的文件,如果有0、1、2这几个结果的话说明这一次的初始化失败了。同时还可以通过检查生成的/images文件来验证初始化是否成功,如果/images文件中的图片和/input文件夹中的图片数量不同,那么说明初始化也未能成功。如果初始化失败,那么最终的3DGS重建结果会比较糟糕。如果想要实现COLMAP的正常初始化,需要对conver.py进行一些修改,因为作者提供的convert.py全部使用COLMAP的基础配置,这对输入数据要求较高,对于一些场景可能会难以正确初始化。
(初始化结果,稀疏点云中能够清楚看到笔和书本,算比较好的初始化)
步骤二:3DGS初步重建
这一步十分简单,就是使用基础的3DGS对模型进行初步的三维重建,重建之后能够在viewer中进行可视化,由于我们的目的是进行GS的编辑,因此我们需要关注我们准备进行编辑的GS的重建效果,在这里我们选择笔的GS作为我们的编辑对象,重建效果展示如下:
(红色框即为笔的GS表达,可以看到在场景中还是比较清晰的)
步骤三:3DGS标记
这一步的目的是将所需要编辑的3DGS进行标记,从而让我们进行编辑的时候不会“误伤”到别的不需要进行编辑的高斯,由于我们的目的是编辑笔的3DGS表达,因此在这里我们对笔的高斯进行标记,由于可视化难度较高,因此我们简单的将被标记的笔的3DGS转换为黑色,来体现我们的3DGS标记步骤。
可以看到在3DGS中,只有被标记的笔变为了黑色,其他部分的GS依旧保留着原来的样子,可见这一步的标记十分成功,基本上没有“误伤”到除了笔之外的3DGS
步骤四:3DGS编辑
完成3DGS的标记之后,我们就可以大胆的对其进行编辑了,可以将笔当成三维空间的一个刚体,基本上三维空间中刚体能够实现的变换操作,都可以对笔进行实现,包括平移,旋转等等,一个很明显的编辑方式就是简单粗暴的将这一部分高斯直接移除,实现一个遮挡去除的效果,这样子在最后的场景中,就没有笔的遮挡了。
(对比可见,属于笔的高斯已经完全消失不见)
完成步骤四后,就能够实现开头视频中呈现的效果,完全去除笔在三维重建场景中的表达,平移和旋转相较于去除更加直观和简单,因此就不多进行展示了。值的注意的是,该编辑过程不会影响整体图像渲染质量。最初的图像渲染质量的PSNR能够达到36db,编辑之后的3DGS渲染出来的图片的PSNR任然是36db,因此可以放心编辑,不用担心影响整体图像渲染效果(得益于良好的3DGS标记)。
总结
本文简单介绍了编辑3DGS重建场景的方法,更为详细的pipeline如下图所示:
因为一些原因,详细的过程和代码就不在这里贴了,如果需要可以私信联系。 作为显示的三维重建方法,3DGS的编辑还是很有应用价值的,以前基于NeRF的方法是无法对重建场景进行任何编辑的,即便能够实现编辑,也是基于图像处理的方法,是对渲染而来的2D图像进行分割和重绘,并无法直接编辑三维场景。而本文中基于3DGS的场景编辑方法则是直接编辑三维场景,利用多视角信息互补的方式保证了编辑之后场景的可靠性(而不是像NeRF编辑方法中使用神经网络预测)。
公开数据集验证
公开数据集的演示可以参考本文开头的视频演示,其中所用数据皆来自于3DGS和NeRF提供的数据集,由此可见本文方法具备不错的泛用性。