SfM
文章平均质量分 79
增量式SfM
zeeq_
A WHU LIESMARSer
展开
-
增量式SfM详细流程介绍及实现方法
目前主流的SfM(Structure from Motion,运动结构恢复)可以分为两大类型,一种是全局式的,一种是增量式的。全局式sfm能够一次性得出所有的相机姿态和场景点结构。它通常先求得所有相机的位姿,然后再通过三角化获得场景点。其效率较高,但是其鲁棒性差,很容易受到outlier的影响而导致重建失败。增量式sfm则是一边三角化(triangulation)和pnp(perspective-n-points),一边进行局部BA。这类方法在每次添加图像后都要进行一次BA,效率较低,而且由于误差累积,容易原创 2020-12-12 22:24:28 · 18359 阅读 · 24 评论 -
photoscan(metashape)跑GPS辅助的无人机影像SfM(空三)教程
刚打开的photoscan界面如下图所示:然后,点击工作区左上角的添加堆块选项:可以看到新增了一个名为“Chunk 1”的堆块,然后,右击“Chunk 1”,依次选择add、添加照片:即可弹出照片选择窗口,到指定目录下全选图像,然后点击打开即可:之后,在左下角找到参考选项,点击,即可进入参考设置界面:点击参考页面左上角第一个选项,即“导入”选项,然后选择POS文件,即可打开如下界面:原创 2023-06-14 23:13:59 · 3352 阅读 · 1 评论 -
安装colmap报错CMake Error You must set CMAKE_CUDA_ARCHITECTURES to e.g. ‘native‘, ‘all-major‘, ‘70‘解决方法
找到出错的第255行,从代码中可以看出,出错的原因是编译程序检测到系统有cuda可用,但是我们没有给它设置cuda类型。可选的类型在报错信息里提到了。意思是我们没有设置cuda的编译类型。然后保存退出,再继续执行接下来的安装步骤即可。install成功后,直接终端执行。,感觉写的还挺好的,贴一下如果以后在新的机子上再安装可以参考。关于安装colmap的教程和报错问题解决,看到了一篇。我选择了native,然后将这个变量说明。等,关于这些参数的含义,原创 2023-06-01 00:16:43 · 3900 阅读 · 0 评论 -
colmap多相机重建多场景及数据库数据快速修改方法
colmap的数据库是可以直接通过ui界面的database management进行修改的,但是通过这种方式,每次只能修改一个单元格的数据,在需要修改的数据量很大的情况下,这将会是一件非常耗时的重复性劳动,且很有可能发生错漏。比如,我在跑数据的时候,就遇到这么一个问题,原本只是有五个不同镜头的倾斜摄影图像,且每个镜头拍摄的图像都放置在图像目录下的不同文件夹里了,按理说应该只会有五个相机模型,但是在提取特征点的时候,colmap给我创建了18个相机模型,这显然是不对的。设置完成后,关闭该选项页,然后点击。原创 2023-05-03 23:39:41 · 2870 阅读 · 6 评论 -
最新OpenMVG编译安装与逐命令运行增量式和全局式SfM教程(文末附自动化运行脚本)
openmvg是一个轻便的可以逐步运行的SfM开源库,它同时实现了增量式和全局式两种算法。原创 2023-02-24 22:31:56 · 1923 阅读 · 2 评论 -
猿创征文|SfM(Structure from Motion)学习之路
SfM全称Structure from Motion,译为运动恢复结构,是三维重建pipeline的一部分,又称稀疏重建,在摄影测量领域则称为空三(空中三角测量)。SfM的任务是,给定一系列具有一定重叠度的图像,去同时估计出拍摄每张图像时相机的的位姿(位置t和姿态R)和被拍摄物体或场景的稀疏点云。...............原创 2022-08-29 00:28:14 · 6367 阅读 · 0 评论 -
OpenMVG论文——《Global Fusion of Relative Motions for ... Structure from Motion》论文阅读笔记
这篇博客翻译的是经典全局式SfM的代表性论文《Global Fusion of Relative Motions for Robust, Accurate and Scalable Structure from Motion》,这篇论文2013年于计算机视觉顶会ICCV上提出,是著名全局式SfM开源库openMVG的原文。 多视图运动恢复结构(SfM)在一个共同的3D坐标系中估计图片的位置和方向。当以增量方式处理视图时,此外部校准可能会发生漂移,这与残差均匀分布的全局方法相反。我们提出了一种新的基于图翻译 2022-06-05 16:46:08 · 1589 阅读 · 1 评论 -
两组相机(或三维点)对齐方法介绍及实现代码(求解相似变换,包含旋转R、平移t、尺度s)
这个变换用于将生成的稀疏重建场景对齐到真值上。由于SfM(Structure from Motion,运动恢复结构)求解的结果是尺度未定的,所以重建场景与真值之间不仅会相差一个旋转与平移,还会存在尺度缩放。待求解的问题可以描述为:已知一组相机(个数为m)的位姿真值Rgt、tgt和预测位姿Rpred、tpred,现要将预测值对齐到真值上。它们之间会相差一个相似变换Msimilarity,包括尺度s、旋转量R、平移量t,可以根据如下步骤进行求解: 1 求解旋转R 首先计算所有m个相机的位姿差异总和原创 2022-05-13 16:34:58 · 2740 阅读 · 5 评论 -
增量式sfm寻找下一最 佳匹配、获取pnp对应点、新加入图像三角化的trick
由于这些trick不太方便用流程图表达(涉及到的变量比较多),因此我直接用文本的形式,然后把一些变量用字母代替了。具体实现细节比较复杂,如果你也刚好在写这些trick,那么也许你可以从下图中获得启发或者修正自己的思路。如下:......原创 2020-12-12 21:02:10 · 2343 阅读 · 1 评论 -
增量式sfm复现实践——成果展示、易错问题总结及体会
理论学习+编程实战,三个月的时间,算是把增量式sfm(在我们领域也叫空三)给复现了出来。先上成果图,然后简要说一些复现sfm过程中需要注意的点,最后谈谈自己的心得体会。1 成果展示Fig.1 用于重建的20张无人机拍摄的图像 Fig.2 增量式sfm重建出来的稀疏点云 Fig.3 按高程赋色的稀疏点云 Fig.4 BA后的20张图像位姿(仅显示出空间位置xyz) 照片拍摄时,无人机是从图像001一直拍摄到020的,与gps给出的位姿数据进行对比,其空间位置基本上是在一条直线原创 2020-12-12 20:03:56 · 3764 阅读 · 2 评论 -
经典/深度SfM有关问题的整理
这篇博客主要是记录一些实践或看论文过程中遇到的一些不好理解的问题及解释。原创 2021-09-28 16:09:42 · 3530 阅读 · 8 评论 -
【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换
1 坐标系定义及转换 首先介绍一下世界坐标系和相机坐标系之间的转换,它们之间是存在一个转换关系的。现假设空间中一点X,它在相机坐标系下的坐标是Xcamera,在世界坐标系下的坐标是Xworld。假设它通过R和t实现从相机坐标系到世界坐标系之间的转换:Xworld = RXcamera + t 那么,由上式,我们可以推得从世界坐标系向相机坐标系的转换关系(RT=R-1,所以通常直接使用RT即可):Xcamera = RTXworld - RTt 所以,两个坐标系之间的转换,需要看其具体原创 2022-05-06 11:19:11 · 17674 阅读 · 63 评论 -
【colmap数据格式转换】关于colmap稀疏重建结果的数据格式和数据库内容的一些笔记
由于实验需要,最近几天在数据转换过程中深入了解了colmap稀疏重建结果的存储细节。针对数据转换,colmap官方有给出了一些转换示例的脚本代码,包括matlab、python等语言,链接。但是,即便如此,colmap官方对一些数据组织形式还是没有做更详细的说明(一把辛酸泪,很多结论都是在踩了很深的坑之后才得到的)。现记录如下:colmap数据库中,keypoints表格的data行数是实际特征点数的三倍,其中每三行的第一行才是特征点的像素坐标值,二三两行具体作用未知,如下图所示:在执行S原创 2022-04-25 22:09:24 · 4864 阅读 · 1 评论 -
Colmap论文——《Structure-from-Motion Revisited》论文阅读笔记
最近又将Colmap论文翻出来仔细阅读总结了一下,于是顺便写个博客记录一下。Structure-from-Motion Revisited是当前SOTA的增量式SfM算法Colmap的论文,发表于2016年计算机视觉顶会CVPR。它是增量式SfM里程碑式的作品。论文地址:https://openaccess.thecvf.com/content_cvpr_2016/papers/Schonberger_Structure-From-Motion_Revisited_CVPR_2016_paper.p原创 2022-03-27 13:39:06 · 12241 阅读 · 10 评论 -
四种三维空间旋转表示方法“轴角、旋转矩阵、欧拉角、四元数”之间的相互转换总结
最近在写BA(bundle adjustment)的时候,遇到了各种不同旋转表示方式的转换问题。之前理解的一知半解的,就有点懵,于是又百度看了一下,就找到了一篇总结的很到位的知乎,就想把它引进到CSDN上哈哈哈。上链接:https://zhuanlan.zhihu.com/p/45404840这篇文章写的挺清楚的,包括轴角、旋转矩阵、欧拉角、四元数之间的转换。不过我发现文章里还少了四元数转轴角的操作,很简单,就在下面小小补充一下:设四元数q = q0+q1i+q2j+q3k对应的轴角为(θ,k),其中原创 2020-12-07 14:55:07 · 1932 阅读 · 0 评论 -
2021年ICCV论文Deep Permutation Equivariant Structure from Motion论文阅读笔记
现有的深度方法在立体和多视图立体中产生高精度的三维重建,即,当相机进行内部和外部校准时。然而,在具有深度网络的多视图环境中,同时恢复相机姿态和三维场景结构的挑战仍然很突出。受运动恢复结构(SfM)的投影因子分解和深度矩阵完成技术的启发,我们提出了一种新的网络体系结构,在给定静态场景多幅图像中的一组点轨迹的情况下,通过最小化无监督重投影损失来恢复相机参数和(稀疏)场景结构。我们的网络架构是为了尊重问题的结构而设计的:所寻求的输出与摄像机和场景点的排列相同。值得注意的是,我们的方法不需要摄像机参数或3D点位置的翻译 2021-12-04 10:45:57 · 1293 阅读 · 5 评论 -
2019年ICLR论文BA-NET: DENSE BUNDLE ADJUSTMENT NETWORKS论文阅读笔记
1 概述 论文介绍了一种通过特征度量BA(bundle adjustment)来解决运动恢复结构(SfM)问题的网络体系结构,它以特征度量误差的形式明确地强制多视图几何约束。整个流程是可微的,因此网络可以学习到使BA问题更易于处理的合适特征。此外,这项工作引入了一种新的深度参数化来恢复密集的逐像素深度。该网络首先根据输入图像生成若干个基础深度图,并通过特征度量BA将最终深度优化为这些基础深度图的线性组合。基础深度图生成器也可以进行端到端的训练。整个系统将领域知识(即硬编码的多视图几何约束)和深度学习(即原创 2021-10-01 22:19:53 · 3854 阅读 · 0 评论 -
2020年ECCV论文DeepSFM: Structure From Motion Via Deep Bundle Adjustment阅读笔记
这篇博客分享的是2020年发表于ECCV上的一篇论文《DeepSFM: Structure From Motion Via Deep Bundle Adjustment》。论文地址:https://arxiv.org/abs/1912.09697论文代码:https://github.com/weixk2015/DeepSFM 1 概述 SfM(Structure from motion)是一个深度学习尚未能很好解决的一个基本计算机视觉问题。现有的方法通常都是从ground原创 2021-09-12 20:06:36 · 1645 阅读 · 0 评论 -
2021年CVPR论文Deep Two-View Structure-from-Motion Revisited阅读笔记
这篇博客分享的是2021年发表于CVPR上的一篇论文《Deep Two-View Structure-from-Motion Revisited》。该论文使用深度学习的方法,按照经典的SfM流程来解决两视图SfM问题。论文地址:https://arxiv.org/abs/2104.00556v1论文代码:https://github.com/jytime/Deep-SfM-Revisited1 概述 论文指出:现有的基于深度学习的方法通过从两个连续帧中恢复绝对姿势,或从单个图像预测深度图原创 2021-09-07 22:32:26 · 1715 阅读 · 0 评论 -
摄像机矩阵P的性质小结
摄像机矩阵P是将三维世界点投影到二维像素平面的转换矩阵,它有多种表达方式,比如P=K[R|t],P=KR[I |-C]等,不管用什么方式进行表达,其均为相机内参K与外参的乘积矩阵。因此,相机矩阵P有很多特性,在《计算机视觉中的多视图几何》一书中就有对摄像机矩阵性质的总结,如下图所示:...原创 2020-12-13 03:21:17 · 1535 阅读 · 0 评论 -
ceres报错F1211 problem_impl.cc:482 Parameter block not found和FAILURE invalid value解决方案
直接上两个错误信息:F1211 20:05:10.914233 19596 problem_impl.cc:482] Parameter block not found: 00000258ACD17AE8. You must add the parameter block to the problem before it can be set constant. *** Check failure stack trace: ***Termination: FAILURE (ParameterBl原创 2020-12-11 20:28:36 · 2239 阅读 · 5 评论