标签: structure-from-motion

在计算机视觉中,MVS做什么SFM不能做什么?

我是一名拥有大约十年企业软件工程的开发人员,我的业余爱好者引导我进入了庞大而可怕的计算机视觉领域(CV).

我不能立即明确的一件事是Structure with Motion(SFM)工具和Multi View Stereo(MVS)工具之间的分工.

具体来说,CMVS似乎是最佳的MVS工具,而Bundler似乎是最好的开源SFM工具之一.

摘自CMVS自己的主页:

您应该始终在Bundler之后和PMVS2之前使用CMVS

我想知道:为什么?!? SFM工具的理解是它们为您执行3D重建,那么为什么我们首先需要MVS工具呢?他们添加了什么价值/处理/功能,像Bundler这样的SFM工具无法解决?为什么拟议的管道:

Bundler -> CMVS -> PMVS2
Run Code Online (Sandbox Code Playgroud)

computer-vision structure-from-motion

9
推荐指数
1
解决办法
2661
查看次数

束调整与运动结构之间的概念差异是什么?

在我看来,它们都意味着从2D图像中的匹配点重建3D坐标.这些概念和多视角立体声有什么区别?

您在哪一个算法中称为从关键点匹配计算稀疏点云的算法,并且需要先验地知道摄像机的外部和内部参数?

image-processing computer-vision stereo-3d structure-from-motion

7
推荐指数
1
解决办法
863
查看次数

相机姿态估计:如何解释旋转和平移矩阵?

假设我在两个图像之间有良好的对应关系并尝试恢复它们之间的相机运动.我可以使用OpenCV 3的新设施,如下所示:

 Mat E = findEssentialMat(imgpts1, imgpts2, focal, principalPoint, RANSAC, 0.999, 1, mask);

 int inliers = recoverPose(E, imgpts1, imgpts2, R, t, focal, principalPoint, mask);

 Mat mtxR, mtxQ;
 Mat Qx, Qy, Qz;
 Vec3d angles = RQDecomp3x3(R, mtxR, mtxQ, Qx, Qy, Qz);

 cout << "Translation: " << t.t() << endl;
 cout << "Euler angles [x y z] in degrees: " << angles.t() << endl;
Run Code Online (Sandbox Code Playgroud)

现在,我无法绕过什么R,t实际上是什么意思.它们是将坐标从相机空间1映射到相机空间2所需的变换,如同p_2 = R * p_1 + t

考虑这个例子,用地面实况手动标记对应关系

在此输入图像描述

我得到的输出是这样的:

Translation: [-0.9661243151855488, -0.04921320381132761, …
Run Code Online (Sandbox Code Playgroud)

c++ opencv computer-vision coordinate-transformation structure-from-motion

5
推荐指数
1
解决办法
2668
查看次数

OpenCV中的recoverPose()函数是左撇子吗?

我对OpenCV相机姿态估计进行简单测试.将照片和相同的照片放大(放大)我用它们来检测特征,计算基本矩阵并恢复相机姿势.

Mat inliers;
Mat E = findEssentialMat(queryPoints, trainPoints, cameraMatrix1, cameraMatrix2,
                         FM_RANSAC, 0.9, MAX_PIXEL_OFFSET, inliers);

size_t inliersCount =
    recoverPose(E, queryGoodPoints, trainGoodPoints, cameraMatrix1, cameraMatrix2, R, T, inliers);
Run Code Online (Sandbox Code Playgroud)

因此,当我将原始图像指定为第一个,并将缩放图像指定为第二个时,我得到平移T接近[0; 0; -1].然而,第二个相机(缩放)实际上比第一个更接近物体.因此,如果Z轴从图像平面进入场景,则第二个摄像机应沿Z轴具有正偏移.对于我得到的结果,Z轴从图像平面朝向摄像机,其中与其他轴(X向右,Y向下)形成左手坐标系.真的吗?为什么这个结果与此处所示的坐标系不同?

c++ opencv computer-vision pose-estimation structure-from-motion

5
推荐指数
1
解决办法
2077
查看次数

ARCore 或 ARKit 如何生成实时视频的实时增强?

大约一年前,我对构建自己的准系统增强现实 (AR) 库很感兴趣。我的目标是能够拍摄某物(任何真实的东西)的视频,然后能够在视频中放置增强(实际上并不存在的 3D 对象)。例如,我可能会拍摄我的客厅的视频,然后通过这个 AR 库/工具,我可以添加一个坐在咖啡桌上的怪物的 3D 头像。因此,在对这个主题或计算机视觉总体一无所知的情况下,我决定采用以下策略:

  1. 使用 3D 重建工具/技术(Structure from Motion,或 SfM)建立视频中所有内容的 3D 模型(例如我客厅的 3D 模型)
  2. 分析平面的 3D 模型(准确地说是 3D 点云)
  3. 添加我自己的逻辑来确定将哪些对象(3D 模型,例如 Blender 文件等)放置在视频 3D 模型的哪个区域(例如站在咖啡桌顶部的怪物)
  4. 最难的部分:推断视频每一帧中的摄像机方向,然后根据摄像机所指向的方向确定如何正确定向增强(例如怪物),然后将增强的 3D 模型“合并”到主模型中视频3D模型。这意味着当摄像机在我的客厅周围移动时,怪物似乎仍然站在我咖啡桌上的同一个地方。我从来没有找到一个好的解决方案,但我想如果我能到达第四步,我就会找到一些解决方案。

经过几个艰难的几周(计算机视觉很难!),我得到了以下一系列工具,并取得了不同程度的成功:

  1. 我能够将视频的样本帧(例如在客厅里走动时拍摄的视频)输入OpenMVG并生成稀疏点云PLY 文件/模型
  2. 然后我能够将该 PLY 文件输入MVE并生成它的密集点云(再次是 PLY 文件)
  3. 然后,我将密集点云和原始帧输入mvs-texturing,以生成视频的纹理 3D 模型

大约 30% 的时间里,这条管道运行得非常好!这是我家前面的模型。您可以看到我的 3D 前院、我儿子的 3D 剧场,甚至可以看到门窗!

在此输入图像描述

大约 70% 的情况下,管道会因难以辨认的错误而失败,或者生成看起来像抽象画的东西。此外,即使涉及自动化脚本,该工具也需要大约 30 分钟才能生成最终的 3D 纹理模型......非常慢。


好吧,看来Google ARCodeApple ARKit抢先了我!这些框架可以从您的智能手机获取实时视频源,并准确地完成我大约一年前一直试图完成的任务:实时 …

computer-vision augmented-reality 3d-reconstruction structure-from-motion arkit

5
推荐指数
1
解决办法
2211
查看次数

如何估算OpenCV中两个摄像机的位置?

我有两个图像对应的两组对应点。我估计了编码相机之间转换的基本矩阵:

E, mask = cv2.findEssentialMat(points1, points2, 1.0)
Run Code Online (Sandbox Code Playgroud)

然后,我提取了旋转和平移组件:

points, R, t, mask = cv2.recoverPose(E, points1, points2)
Run Code Online (Sandbox Code Playgroud)

但是,实际上如何获得两个摄像机的摄像机矩阵,以便可以cv2.triangulatePoints用来生成一点点云?

python opencv structure-from-motion

2
推荐指数
1
解决办法
4978
查看次数

因子图优化和捆绑调整有什么区别?

我看到SLAM文献中经常使用因子图优化。而在Structure from Motion文献中,通常使用束调整。这两种方法有什么区别?

此外,我们可以使用另一种方法的库来实现一种方法吗?例如,使用 g2o 实施捆绑调整,或使用 ceres 求解器实施因子图优化?

提前致谢!

robotics computer-vision 3d-reconstruction structure-from-motion slam

2
推荐指数
1
解决办法
1841
查看次数

高斯曲率和平均曲率适用于粗糙表面吗?

对于我正在进行的一个项目,我已经成功地对道路图像数据执行了 SFM 程序,并且能够生成一个包含点云坐标(X、Y、Z)、RGB 值和法线(nx、纽约州,新西兰)。

现在,我有兴趣根据我拥有的数据计算每个点的曲率值。我在 Python 中遇到过Surface Curvature MATLAB Equivalent,但据说该实现仅在 X、Y 和 Z 是二维数组时才有效。

如果路面非常粗糙,高斯曲率和平均曲率是否适用?给定大小 NX3 的 (X,Y,Z) 坐标数据和大小 NX3 的 (nx,ny,nz) 法线数据,我应该如何找到曲率?Python 中是否有当前的实现?

python curve-fitting smoothing point-clouds structure-from-motion

1
推荐指数
1
解决办法
1537
查看次数

如何从 OpenCV 中已知姿势的多个图像中稳健地 3d 重建

高分辨率图像的传统解决方案示例:

  1. 为所有图像提取特征(密集)
  2. 匹配特征以通过图像查找轨迹
  3. 将要素三角化为 3d 点。

对于我的情况,我可以在这里给出两个问题(许多 640*480 图像,彼此之间的移动很小),第一:匹配非常慢,特别是如果图像数量很大,因此更好的解决方案可以是光流跟踪.. ,但随着大动作变得稀疏,(混合可以解决问题!!)

第二:对轨道进行三角测量,虽然它是过度确定的问题,但我发现很难编写解决方案,..(这里要求简化我在参考文献中读到的内容)

我在这个方向上搜索了很多图书馆,但没有任何有用的结果。

再次,我有地面实况相机矩阵,只需要 3d 位置作为第一次估计(没有 BA),编码软件解决方案可以提供很大帮助,因为我不需要重新发明轮子,尽管详细说明可能会有所帮助

opencv multiview computer-vision 3d-reconstruction structure-from-motion

1
推荐指数
1
解决办法
1212
查看次数