问题标签 [structure-from-motion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
172 浏览

image - Computing depthmap from 3D reconstruction model

I'm using VisualSfM to build the 3D reconstruction of a scene. Now I want to estimate the depthmap and reproject the image. Any idea on how to do it?

0 投票
1 回答
531 浏览

r - 使用 R 的运动中的简单正交结构——确定度量约束

我想根据 Tomasi 和 Kanade [1992]从运动程序构建一个简单的结构。这篇文章可以在下面找到:

https://people.eecs.berkeley.edu/~yang/courses/cs294-6/papers/TomasiC_Shape%20and%20motion%20from%20image%20streams%20under%20orthography.pdf

这种方法看起来优雅而简单,但是,我在计算上述参考的公式 16 中概述的度量约束时遇到了麻烦。

我正在使用 R 并在下面概述了我的工作:

给定一组图像

在此处输入图像描述

我想跟踪三个柜门的角落和一张图片(图像上的黑点)。首先,我们将点读入矩阵 w 其中

w

最终,我们希望将 w 分解为描述 3 维点的旋转矩阵 R 和形状矩阵 S。我将尽可能多地省略细节,但可以从 Tomasi 和 Kanade [1992] 论文中收集到对数学的完整描述。

我在下面提供 w:

wm然后根据等式 2创建注册测量矩阵

等式2

经过

我们可以通过使用奇异值分解将对角线“PxP”矩阵和“PxP”矩阵分解wm为“2FxP”矩阵。o1eo2

但是,因为有噪音,我们只关注 的前 3 列o1、 的前 3 个值e和 by 的前 3 行o2

现在我们可以求解方程 (14) 中的rhatshat

等式 14

经过

然而,这些结果并不是唯一的,我们仍然需要通过方程 (15) 求解 R 和 S

等式 15

通过使用等式 (16) 的度量约束

等式 16

现在我需要找到 Q。我相信有两种可能的方法,但不清楚如何使用。

方法 1涉及求解 B whereB=Q%*%solve(Q)然后使用 Cholesky 分解来找到 Q。方法 1 似乎是文献中的常见选择,但是,关于如何实际求解线性系统的细节很少。很明显,B 是 6 个未知数的“3x3”对称矩阵。但是,考虑到度量约束(方程 16),我不知道如何在给定 3 个方程的情况下求解 6 个未知数。我忘记了对称矩阵的属性吗?

方法 II涉及使用非线性方法来估计 Q,并且在运动文献中的结构中不太常用。

任何人都可以就如何解决这个问题提供一些建议吗?提前致谢,如果我需要更清楚地说明我的问题,请告诉我。

0 投票
3 回答
4235 浏览

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

我对 OpenCV 相机姿态估计进行了简单的测试。将一张照片和同一张照片按比例放大(放大),我使用它们来检测特征、计算基本矩阵和恢复相机姿势。

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

0 投票
1 回答
1705 浏览

camera-calibration - 用于束调整的初始相机内在和外在矩阵和 3D 点坐标

我想使用多 RGB 相机重建 3d 场景。输入数据没有相机校准信息,所以我想使用捆绑调整算法(Ceres-solver)来估计校准信息。

现在我已经获得了成对匹配的特征点,但我发现束调整算法(Ceres-solver)中的算法也需要初始相机内在和外在矩阵以及 3d 点坐标作为输入。但是,我没有这些信息,也不知道如何生成初始猜测。

我应该怎么做才能生成初始相机内在和外在矩阵和 3d 点坐标?

非常感谢!

0 投票
0 回答
1293 浏览

python - 从运动技术的结构构造粗略的 3D 点

我正在使用 OpenCV 和 Python。

假设我有这个汽车的序列视频。我用 和 跟踪了汽车的一些“有趣点cv2.goodFeaturesToTrackcv2.calcOpticalFlowPyrLK。现在,给定跟踪点,我想估计汽车的非常粗略的形状(可能是 3D 盒子)及其与相机的距离。它不需要那么准确。

最重要的是,我希望它能够实时更新。我能找到的最接近的 youtube 视频可以让我了解我正在努力实现的目标。我在 OpenCV的 Motion 模块中找到了一个新的结构,但它更多的是从点的集合构建 3D 模型。

问题是,实现这一目标的最佳方法是什么,我可以使用什么样的库(尤其是为了构建 3D 空间)?

如果我需要为此使用 C++ 也可以(尽管我仍然不擅长)。

谢谢。

0 投票
1 回答
1582 浏览

opencv - Structure from Motion with Optical Flow

Let say I have a video from a drive recorder. I want to construct the recorded scene's points cloud using structure from motion technique. First I need to track some points.

Which algorithm can yield a better result? By using the sparse optical flow (Kanade-Lucas-Tomasi tracker) or the dense optical flow (Farneback)? I have experimented a bit but cannot really decide. Each one of them has their own strengths and weaknesses.

The ultimate target is to get the points cloud of the recorded cars in the scene. By using the sparse optical flow, I can track the interesting points of the cars. But it would be quite unpredictable. One solution is to make some kind of grid in the image, and force the tracker to track one interesting point in each of the grid. But I think this would be quite hard.

By using the dense flow, I can get the movement of every pixel, but the problem is, it cannot really detect the motion of cars that have only little motion. Also, I have doubt that the flow of every pixel yielded by the algorithm would be that accurate. Plus, with this, I believe I can only get the pixels movement between two frames only (unlike by using the sparse optical flow in which I can get multiple coordinates of the same interesting point along time t)

0 投票
1 回答
583 浏览

python - 来自两视图 SFM 的错误相机姿势

为了验证估计相机姿态 [R|t] 的双视图 SFM 方法的结果,我利用了我用于校准的棋盘图案,特别是 OpenCV 中的“calibrateCamera”函数返回每个图案的旋转和平移向量. 因此,可以很容易地计算出前两个模式之间的相对姿势。

然而我没有得到正确的相机姿势,而且我一直在努力解决这个问题,但没有白费。

我非常感谢您为解决我的问题所做的贡献。

我的代码说明:

  • 不失真的图像
  • 在两个图像中找到棋盘角
  • 匹配点(通过并排绘制两个图像和线条来验证)
  • 估计基本矩阵(已验证:x'T * F * x = 0)
  • 基本矩阵 (E) = KT * F * K(已验证:X'T * E * X = 0)
  • E 的 SVD = U * S * VT
  • R = U * W * VT 或 U * WT * VT 使得 WT = [0,-1,0; 1,0,0; 0,0,1]

    /li>
0 投票
0 回答
647 浏览

python - 您如何从两个图像点对应关系中估计 3D 点?

我正在尝试使用 OpenCV 在 Python 中实现一个基本的从运动结构到运动的管道,以便在给定两个图像中的对应点的情况下从两个图像生成点云。我设法从中获得 3D 点,但这些位置并没有真正意义。

我担心评论# FROM HERE 中的逻辑是否正确?特别是 iPhone 6 的相机矩阵是否正确,从 2d 对应计算 3d 点的逻辑是否正确?

0 投票
0 回答
777 浏览

java - BoofCV Structure from motion (Sfm) by Example

我第一次玩弄运动结构(Sfm)和 3D 模型重建。最终结果是能够从一系列图像中生成(相当准确的)3D 模型。

作为一名 JVM 开发人员,我的自然倾向是寻找可用的 Java 库。我发现BoofCV似乎是一个具有不错特性和功能的活跃项目。但是我花了半天的时间按照他们的 Sfm 示例进行操作,但对结果并不满意。如果您有兴趣复制它们,我制作了一个小示例项目,您可以自己克隆和构建。但 TL;DR 是代码应该渲染这把椅子的 3D 模型:

在此处输入图像描述

......但相反给了我一些非常模糊的类似于椅子的东西:

在此处输入图像描述

它甚至可以做到这一点非常棒(向 BoofCV 团队致敬!!!),但仍然不是我所期待的(再说一次,作为 CV 的全新用户,也许这个结果是完全可以预料的,并且代表了最佳的 Sfm能力,我不知道!)。我将这些结果与 Python Photogrammetry Toolbox (“PyPT”) 库结果进行了比较,结果是3D 生成的头骨,而且,BoofCV 只是让我想要更多……

该 PyPT 示例清楚地展示了令人敬畏的功能,显然 Google 使用PMVSCMVS来实现其 3D 映射功能。因此,显然还有其他开源库可以完成工作......而且很好。

所以我问:

  1. 我的项目(上面链接)中的示例代码是否没有完全利用 BoofCV 的 Sfm/重建功能?或者
  2. BoofCV 是否不如这些其他库好用?如果是这样,是否有人知道可以为 BoofCV(功能/功能方面)做出哪些贡献以使其与这些其他库相提并论?或者
  3. 我是否只是错误地解释了这些结果,也许上面的主席结果与这些其他库给我的结果一样准确,但我只是没有以正确的方式看待它?!?
0 投票
1 回答
5692 浏览

computer-vision - 在计算机视觉中,MVS 做了哪些 SFM 做不到的事情?

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

我不清楚的一件事是运动结构 (SFM)工具和多视图立体 (MVS)工具之间的分工。

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

摘自CMVS自己的主页:

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

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

?