VisualSFM主要运用于SFM的3D重建,他是一个GUI应用程序通过利用多核并行性进行特征检测,利用匹配和调整来快速运行,软件集成了多种工具链,在应对复杂重建项目的时候也具备超强的能力,在重建数据的处理中,采用多核绑定调整,将SFN的三维数据全部整合在一个SiftGPU中,并对其结构的线性时间增量判断三维的重建效果,帮助您在复杂的模型中恢复三维结构;同时,该软件他还提供了几个简单的输出小工具,Mathias Rothermel和Konrad Wenzel的SURE,让您在输出的时候也可以选择多种类型的保存方式!
软件功能
基本用法
使用VisualSFM GUI
通过命令行使用VisualSFM
依赖SiftGPU / PBA和PMVS / CMVS
典型硬件要求
注意高分辨率图像的东西
高级用法
指定配对列表以进行匹配
使用您自己的功能匹配
使用自己的特征检测器
调整更高速度的参数
技术细节
相机型号和坐标系
焦点初始化
中间:特征和匹配
输出格式:N-View Match(NVM)
使用GUI
可视化
鼠标控制和导航
键盘快捷键
一些很酷的功能
VisualSFM中的命令行!
使用VisualSFM轻松显示动画
手动干预重建
限制和问题
小的GPU内存的潜在问题
VisualSFM的局限性
软件特色
特征检测速度
在GUI模式下,使用“菜单 - >工具 - >启用GPU->自定义参数”
在控制台模式下,使用“VisualSFM sfm [+ pmvs]输入输出[SiftGPU参数]”
您需要检查SiftGPU的这些参数的文档。
通常没有必要这样做,除非你的图形内存不足。
特征匹配速度
“param_gpu_match_fmax”是在特征匹配中使用的每图像的特征数。默认值为8192,但在大多数情况下,4k应该足够了。请注意,要素按比例排序,因此将使用最大比例的要素。
如果你知道图像邻域,如视频中的相邻帧,你应该指定一个匹配对列表,而不是使用完全的成对匹配。
大量的时间可能用于保存结果(特别是对于NFS),默认情况下在Linux下启用测试功能以提高效率。可以通过设置param_asynchronous_write = 0或取消选中“Pairwise Matching-> Asynchronous Writes”来禁用它。
增量重建速度
“param_bundle_full_iteration”是绑定完整模型时的BA迭代次数。
“param_bundle_full_frequency”控制执行频繁的全束调整。
这两个参数决定了重建的速度。
使用说明
1.将图像添加到SfM工作区
选项1.“文件 - >打开多图像”。你可以多次这样做。
选项2.“SfM->加载NView匹配”。选择包含相对图像路径的TXT文件。
选项3.“SfM->加载NView匹配”。从格式中选择“文件夹中的所有Jpeg”,选择一个。
或者,当您看到菜单项上的图标时,使用相应的工具栏按钮。
2.运行特征检测和完全成对图像匹配
点击“SfM-> Pairwise Matching-> Compute Missing Match”
您可以返回步骤1,添加更多图片,然后再次计算缺失的匹配项。
有关自定义功能检测和功能匹配,请单击此处
3.运行稀疏重建
“SfM-> Reconstruct Sparse”或相应的工具栏按钮。
束调整步骤将自动使用多色束调整。
4.使用Yasutaka Furukawa的CMVS / PMVS进行密集重建(自己获取CMVS包)
“Sfm-> Reconstruct Dense”。请注意,CMVS / PMVS相关参数存储在nv.ini中
将提示您保存[name] .nvm文件,CMVS将在文件夹[name] .nvm.cmvs中运行
如果将重建保存到[name] .nvm,[name] .i.ply是第i个模型的结果。
*保存SfM工作空间,包括空闲时的任何时间的3D重建
“SfM->保存NView匹配”。您可以随后打开保存的3D模型。
它默认使用包含所有工作空间信息的NVM格式。
使用方法
3D重建 - 使用命令行
命令行示例:
在增量重建步骤中,如果按“Ctrl + C”一次,它将退出循环并保存当前模型。 如果按“Ctrl + C”三次,将调用exit(0)。
使用命令行在大型数据集上应该稍快,因为它不会生成可视化的缩略图(纹理)。 在GUI模式下,您也可以通过单击暂停“||”来跳过像素加载部分 按钮,当它说“加载像素数据...”。
指定配对列表以进行匹配
这允许匹配部分图像对,而不是进行全对匹配
1.写一个包含图像路径对的txt文件; 路径中没有空格!
2.将图像加载到VisualSFM;
3.使用“SfM->成对匹配 - >计算指定匹配”;
4.您可以根据需要指定其他列表的次数。
使用您自己的功能匹配
1.编写一个包含所有功能匹配的txt文件
2.将您的图像(带有功能)载入VisualSFM
3.使用“SfM->成对匹配 - >导入功能匹配”
4.您可以使用相同的方法再次添加要素匹配。
使用自己的特征检测器
选项1.你可以编写一个二进制功能检测器,像Lowe的SiftWin32.exe工作。
或者你可以编写一个具有类似SiftGPU的接口的共享库。
选项2.以Lowe的ASCII格式编写.sift文件,它们将被自动转换为VisualSFM二进制格式。 (让我知道如果有一个错误)。
机型号和坐标系
小心它与其他SFM软件(如bundler)略有不同。
内部摄像机模型有8个参数(7如果径向失真被禁用)
输出格式:N-View Match(NVM)
VisualSFM将SfM工作区保存到NVM文件中,这些文件包含输入图像路径和多个3D模型。 下面是格式说明
常见问题
除PMVS之外的密集重建工具?
VisualSFM本地支持运行CMVS / genOption / PMVS2工具链,但是您需要运行Meshlab将密集点转换为网格。
使用VisualSFM的几个附加软件:
CMP-MVS by Michal Jancosek:这个工具直接生成网格。您需要单击VisualSFM的“重构密集”函数并选择“NVM-> CMP-MVS”来转换数据。
SURE由Mathias Rothermel和Konrad Wenzel:SURE本身支持NVM文件格式,您不需要运行导出功能。
MVE by Michael Goesele的研究小组:此工具与CMVS / PMVS导出数据格式相同
MeshRecon by Zhuoliang Kang:这个工具直接生成网格,并与NVM文件一起工作(没有径向失真,仅Windows)。
如果一些GPU计算不工作怎么办?
CPU更换功能检测(大多数卡,甚至英特尔不需要)
1.获得SIFT二进制(VLFeat的Lowe's)
2.将SIFT二进制文件放在同一目录中。
3.通过设置param_use_vlfeat_or_lowe选择Lowe的VLFeat二进制
4.通过“工具 - >启用GPU->禁用SiftGPU”禁用GPU功能检测。
或将参数param_use_siftgpu修改为0以进行永久选择
远程解决方案:
1.通过终端(GUI的X终端)在支持CUDA的Linux服务器上运行VisualSFM。
2.您可以将工作区复制到本地机器进行可视化。
使用CPU进行功能匹配(大多数卡甚至英特尔都不需要)
禁用GPU功能匹配,取消选中“工具 - >启用GPU->使用GLSL匹配”
*。将参数param_use_siftmatchgpu修改为0以进行永久选择
使用CPU进行多芯束调整(基于GPU的PBA不支持ATI)
Windows:使用非CUDA包。
Linux:下载PBA代码,运行make with makefile_no_gpu,并重命名libpba_no_gpu.so
到libpba.so,并将其复制到VisualSFM bin文件夹。
如果VisualSFM无法找到两个图像进行初始化怎么办?
如果VisualSFM找不到一个好的对来初始化,你可以尝试手动选择它。
选项1.切换到“2-View 3D points”,使用左/右扫描所有图像对,找到一个3D点对,选择“SfM->更多功能 - >设置初始化对”。
选项2.如果您知道哪两个图像是好的,请右键单击“缩略图视图”中的两个图像,在“2-View 3D点”中验证它,然后选择“设置初始化对”。
如果VisualSFM生成多个模型怎么办?
首先,检查特征检测和匹配是否正常工作。基本上,您检查检测到的功能和匹配的数量,并查看它们是否太小。
第二,如果特征检测和匹配工作正常,则有两种不同的情况
常见的情况:两个模型不共享足够的图像。问题是由于在非常不同的观点之间缺乏特征匹配。你应该得到更多的图片来覆盖过境的观点。
罕见的情况:两个模型共享足够的图像(param_image_reuse_max)。尝试使用“SfM->更多功能 - >合并稀疏模型”(V0.5.26 +),并看看它是否合并模型。这些问题通常是由初始化的选择引起的。您可以删除一个模型,然后尝试继续保留模型的重建
∨ 展开