
一份colmap tutorial的阅读笔记(更新中)——Windows版本
大型纪录片《colmap tutorial笔记》,正在更新,来不及了,快上车啊,先到先得,一睹为快
一、colmap的安装
1.1 Windows下安装
很简单,下载,双击,打开即可,官网地址:
COLMAP - Structure-From-Motion and Multi-View Stereo (demuc.de)https://demuc.de/colmap/如果电脑有NVIDIA显卡可以使用cuda版本,也可以不使用显卡安装no-cuda版本,如果没有NVIDIA显卡就使用no-cuda版本
解压以后双击打开
二、使用
先准备好数据,可以在官网下载一个,注意,图片数量越大越需要好的硬件(显卡或者cpu),链接:
Datasets — COLMAP 3.9-dev documentationhttps://colmap.github.io/datasets.html
2.1快速开始
就是直接把图片重建成三维模型,只需要注意两点,一个是图片的路径,另一个是模型要保存的路径。在colmap界面依次点:Reconstruction > Automatic Reconstruction,点击以后会弹出来这个窗口,看图操作即可开始一个简单的三维重建过程!
好的,现在重建开始!你的命令行/终端里面会依次自动显示类似以下信息,事实上,这就是一般的SFM重建过程,只不过一般咱们是分开执行罢了,这里因为使用了 Automatic Reconstruction所以是自动执行的。这个过程会持续一段时间,如果你的电脑显卡或者cpu比较好,会快一些。
完成重建:这里提示导入重建的稀疏模型以进行可视化。这些模型还被导出到工作空间中的 sparse 下的子文件夹中。点击ok即可
然后又提示:如果想可视化一个稠密点云,依次点击File > Import model from 路径来导入,如果想查看这个稠密点云构建的mesh,可以安装meshlab来查看它,点击ok,再附上meshlab的官网:
MeshLabhttps://www.meshlab.net/
可以看到,构建好的稀疏点云如下
tips1 colmap里面输入的路径不要出现中文,否则报错!!!
tips2 完成重建以后,不管是稀疏重建(sparse reconstruction)还是稠密重建(dense reconstruction)都会是同一个目录样式,来自官网的截图:
2.2三维重建的基本方法——从运动到结构SFM(Structure-from-Motion)
pipeline包括3个步骤:特征提取(feature extraction)>特征匹配(feature matching)>运动结构重建(Structure and motion reconstruction)
如果使用你自己拍摄的图片进行重建,为了使重建效果更好,在拍摄的过程中需要注意几个技巧:
-
拍摄具有良好纹理的图像。避免完全无纹理的图像 (例如,白墙或空桌子)。如果场景包含的内容不足 纹理本身,您可以放置其他背景对象,例如 海报等
-
在相似的照明条件下捕获图像。避免高动态 范围场景(例如,带有阴影或图片的太阳照片 通过门/窗)。避免在有光泽的表面上出现镜面反射。
-
捕获具有高度视觉重叠的图像。确保每个对象都是 至少可以看到 3 张图像 - 图像越多越好。
-
从不同角度捕获图像。不要从 仅通过旋转相机即可实现相同的位置,例如,在每次旋转后走几步 拍摄。同时,尝试从相对相似的图像中获得足够的图像 观点。请注意,图像越多不一定越好,可能会导致 重建过程缓慢。如果您使用视频作为输入,请考虑 对帧速率进行下采样。
2.3 多视立体(几何)Multi-View Stereo(geometry)
MVS首先利用SFM的重建的稀疏点云计算图片上每一个像素的深度和法线,然后混合了深度和法线以后生成对应的稠密点云,具体使用的算法比如泊松表面重建,更多MVS方法参考
2.4正式开始——image数据放置有规定
COLMAP 假设所有输入图像都在一个输入目录中,并且可能嵌套有子目录。它递归地考虑存储在其中的所有图像目录,也就是说,COLMAP 会默认处理一个文件夹下所有的图片,无论这个文件夹下只有图片,还是有很多子文件夹(图片在子文件夹下)。图片之外的其他文件会自动忽略,首先我们来新建这个project,点击file,选择new project,在相应的位置输入路径即可,按图提示操作,图片位置和database应该在同一个文件夹底下。
关于database,在自己填入名字确定以后,colmap会自己生成一个database.db文件:
创建好项目文件以后他应该长这样:project.ini是在保存这个project时手动输入名称的一个配置文件
在正式开始之前,我们假定你了解计算机视觉的基础,比如,图像的特征点,以及图像之间的特征点匹配。
2.5第一步——特征提取(feature extraction)
依次点击:Processing > Extract features,会弹出一个菜单,如图
camera model是相机模型,一般都是针孔相机(pinhole),opencv里面也是针孔相机模型,如果你的图片是同一个相机拍的,那么就选择shared for all images,也就是所有照片都共享一个相机模型参数,如果是多个相机拍的,就选下面一项shared for sub-folder。
另外,如果你在提取特征过程中打断了这个进程,那么在下次重新运行这个project提取特征时,会在之前已经提取的特征基础上继续该工作,应该是特征提取结果会自己保存。
图中什么是EXIF:其实就是包含相机内参的一堆参数信息
EXIF(Exchangeable Image File Format)是一种标准格式,用于存储数码照片和音频文件中的元数据。这些元数据包括拍摄照片时的设置和情况,如相机型号、拍摄时间、ISO设置、快门速度、光圈、焦距、是否使用闪光灯等信息。此外,如果设备支持GPS功能,EXIF数据还可以包含地理位置信息,如拍摄地点的经度、纬度和海拔高度。
这些信息可以被不同的软件和服务读取和使用,例如图片编辑软件、图片浏览器和地理标记服务等。在3D重建和摄影测量软件如COLMAP中,EXIF中的这些信息(特别是相机参数和GPS数据)可能被用来帮助确定图像之间的位置关系和世界坐标,从而提高重建的精确性和实用性。
提取结束以后,他的命令行/终端里面会显示:
colmap界面里也会有:
2.6第二步——特征匹配(feature matching)
这一步有多种选项:
再这里一一介绍一下:
(1)穷尽匹配(Exhaustive Matching)
其实就是一个数据集里面,两个两个互相匹配,这种匹配方式结果较为精确,但是缺点也很明显,假如你的数据集有5000张图片,两两匹配要匹配多少次?没错一共是[(4999+1)×4999]/2次,毫无疑问非常耗时间,因此,Exhaustive Matching只是适合用于几百张图(<1000)的数据集。
(2)词树匹配(Vocabulary Tree Matching)
每个图像都使用空间重新排名的词树与其视觉最近邻的图片进行匹配,这种模型可以处理数量很大的数据集(>=1000),这个词树匹配模型是预训练的,模型下载地址:
COLMAP - Structure-From-Motion and Multi-View Stereo (demuc.de)https://demuc.de/colmap/(3)序列匹配(Sequential Matching)
这个方法是一个内置的循环检测,每第N个图片与其视觉最近邻(小问题:视觉最近邻是不是说RGB)的图片进行匹配,这个方法主要针对于序列数据,没错,说的就是你——视频,在视频连续帧之间,是有视觉重叠的,因此没有必要再去做两两匹配!序列匹配是基于词树Vocabulary Tree模型的,需要先下载好预训练的模型(视频和帧的概念:视频是由一系列连续的图像(称为帧)组成的。视频的帧率(Frames Per Second,FPS)指的是每秒钟播放的图像数量。例如,一个视频以30帧每秒(30 FPS)的速率播放,意味着每秒钟会有30张图片在屏幕上连续播放)
另外,需要注意Sequential Matching的文件夹内,图片命名是有规定的,需要以连续的形式: ( image0001.jpg, image0002.jpg, etc.),个人觉得这里应该把视频拆成帧来提取图片的,根据时间线来定义、命名文件名及其顺序 。
ffmpeg具有拆帧成图的功能,有python第三方库以及应用:安装通过pip install ffmpeg或者sudo apt-get install ffmpeg
(4)空间匹配(Spatial Matching)
每个图像和他空间上最近邻的图像进行匹配,默认情况下,COLMAP从EXIF中提取GPS信息,用于空间最近邻搜索。
(5)传递匹配(Transitive Matching)
通过匹配算法找到每对图像之间的初始匹配点对,然后使用已存在特征匹配的传递关系来生成更完整的匹配图。如果图像 A 与图像 B 匹配,而图像 B 与图像 C 匹配,则此匹配器将尝试直接将 A 与 C 匹配。
(6)自定义(Custom )
用户自己指定要匹配的单个影像对或导入单个要素匹配。
在视力中,我们数据集中有128张图片,所以选择的是Exhaustive Matching:
与前面的特征提取相同,如果你在特征匹配过程中打断了这个进程,那么在下次重新运行这个project特征匹配时,会在之前已经匹配的特征基础上继续该工作,应该是特征匹配结果会自己保存。
2.7稀疏重建(sparse reconstruction)
ok!完成了前面两步,就可以开始稀疏重建了,依次点击Reconstruction > Start Reconstruction即可开始,等着他结束就可以了,下面是完成的稀疏点云:
里面的bundle ajustment直观地讲其实就是一个迭代优化的过程,可以最大数量地把图片和3D模型对应起来,具体可以看这位老哥的解释:
保存点云:依次点击File > Export model as,在弹出的菜单中选择.ply格式,取个文件名就完了。
tips3:可以调整一下每一个点的大小,看起来效果更加好一点
2.8导入与导出
(1)导出
建好模型需要导出来保存,就是上面稀疏重建最后那里的步骤,另外,上面的导出是.bin格式,还能换格式导出,依次点击File > Export model as text,这样就会转换成.txt格式,插一句嘴,转换是为了做其他模型的输入,比如,3D Gaussian Splatting就需要输入稀疏点云。导出这里有点麻烦!!!还是重新总结一下:
保存project:就是File > save project手动输入名称的一个配置文件,会生成文件名.ini的配置文件
保存模型:依次点击File > Export model,选择要保存的文件夹即可,这会把模型保存为3个文件:image.bin,camera.bin,point3D.bin
保存点云:依次点击File > Export model as,在弹出的菜单中选择.ply格式,取个文件名就完了。
(2)导入
File >Import model,导入包含image.bin,camera.bin,point3D.bin,或者这些文件的txt格式的文件夹,一般情况下这三个文件保存在sparse下
File >Import model from,导入.ply文件。
2.9稠密重建(dense reconstruction)
(1)稠密重建总体方法
colmap集成了基于MVS由稀疏点云到稠密点云的pipeline,具体是根据稀疏点云和相机pose计算深度和法线, 然后混合深度图和法线图到具有归一化信息的稠密点云, 最后利用poison表面重建方法估计一个稠密表面出来。Delaunay reconstruction是跟poison表面重建类似的方法
(2)具体步骤与执行
点击Reconstruction > dense reconstruction,首先选择重建好的稀疏点云进来,然后选择好workspace也就是输出稠密点云的路径
然后正式进入稠密重建流程:
1.Undistorted去畸变
2.利用stereo计算深度以及法线
确实很费时间:4050的显卡用了88分钟
3.把深度和法线数值fuse到点云里面,变成稠密点云,还可以选择把稠密点云变成mesh,然后选择poison进行稠密表面重建
fusion完成以后:
界面内提示可视化方式:
泊松mesh:
完成mesh
可以看到文件夹内有两个.ply文件,一个是直接用深度图和归一化fuse的点云。另一个是poison mesh
点云:
colmap中查看这个点云:
poison mesh
4.note:计算深度时有可能卡住,如果显存不够程序可能会崩溃,避免此类问题可以参考FAQ:
Frequently Asked Questions — COLMAP 3.9-dev documentationhttps://colmap.github.io/faq.html#faq-dense-memory5.normal结果在colmap内不可见,但是可以在MeshLab中查看:Render > Show Normal/Curvature,类似,稠密的mesh只能在其他软件中查看,比如MeshLab
6.colmap除了普通的mvs进行稠密重建以外,还有其他方法进行,比如CMVS,PMVS等,具体的执行不介绍了,以及对于大量图片的重建,可能需要先用cmvs进行聚类等等,不具体介绍了。
2.10Database Management
可以修改图像,相机,匹配信息,通过Processing > Manage database,通过Show image ,Overlapping images来查看每一张图的特征与匹配信息,双击修改,点击save才能修改成功。说明database文件就是记录图像,相机,匹配信息的一个文件。
2.11命令行与终端
COLMAP的大部分特性都可以从图形界面和命令行界面访问,这两个界面都嵌入在同一个可执行文件中。可以直接将选项作为命令行参数提供,也可以提供.ini项目配置文件,其中包含使用--project_path path/to/project.ini。要启动GUI应用程序,请执行colmap gui或直接将项目配置指定为colmap gui --project_path path/to/project.ini避免GUI中乏味的选择。要列出命令行中可用的不同命令,请执行colmap help例如,要从命令行运行特征提取,必须执行colmap feature_extractor. The图形用户界面和命令行界面部分提供有关可用命令的详细信息。
目前只有Windows版本的实例,Ubuntu中的终端实例,请看我的另一篇,Ubuntu版本
更多推荐
所有评论(0)