问题标签 [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.
windows - 来自 Motion 或 SLAM 的 Windows 结构?
有没有可以在 Windows 上使用 SfM 或 SLAM 的库?这将在 python 中
到目前为止,我所看到的一切都在 Linux 中
c++ - 无法在 OpenCV 中运行 SFM 模块的程序
当我尝试在 SFM 模块中执行示例代码时出现错误。最初 SFM 不存在于我的 contrib 目录中。所以我下载了最新的 contrib 并将 sfm 文件夹粘贴到我的 contrib 目录中。我使用了 sfm 模块中的 CMakeLists.txt。然后我尝试使用 scene_reconstruction.cpp 和从 sfm 模块中获取的 CMakeLists.txt 在我自己的目录中构建它。以下是我得到的错误
glog -- 执行测试 GFLAGS_IN_GOOGLE_NAMESPACE -- 执行测试 GFLAGS_IN_GOOGLE_NAMESPACE - 成功 -- 找到所需的 Ceres 依赖项:gflags -- 找到 Ceres 版本:1.13.0 安装在:/usr/local 中,组件:[LAPACK、SuiteSparse、SparseLinearAlgebraLibrary、CXSparse、SchurSpecializations , OpenMP] -- 检查 SFM deps... TRUE -- 模块 opencv_sfm 已禁用,因为未找到以下依赖项:CMakeLists.txt:35 (ocv_module_disable) 处的 Eigen CMake 错误:未知 CMake 命令“ocv_module_disable”。CMakeLists.txt 中的 CMake 警告 (dev):不存在 cmake_minimum_required 命令。应在文件顶部添加一行代码,例如 cmake_minimum_required(VERSION 3.5)。如果您希望为此项目支持较旧的 CMake 版本,则指定的版本可能会更低。有关更多信息,请运行“cmake --help-policy CMP0000”。此警告适用于项目开发人员。使用 -Wno-dev 来抑制它。-- 配置不完整,出现错误!
PS:在开始之前,我浏览了 SFM 文档页面中提到的所有必需的库下载。
matlab - 没有本能相机参数 (exif) 或地面控制点 (GCP) 的 3d 重建
我想从两个没有相机内在参数或 GCP 的图像中获得 3d 点云,但我不知道如何获得它。Agisoft 或 Pix4d 等软件在没有这些信息的情况下获得了无标度点云,但我想用 Matlab 获得它。你可以帮帮我吗?
第二个责任;我可以在不知道相机内在参数的情况下从 F 矩阵到 E 矩阵吗?
computer-vision - ARCore 或 ARKit 如何生成实时视频增强?
大约一年前,我对构建自己的准系统增强现实 (AR) 库很感兴趣。我的目标是能够拍摄一些东西(真的任何东西)的视频,然后能够在视频中放置增强(实际上并不存在的 3D 对象)。例如,我可以拍摄我客厅的视频,然后通过这个 AR 库/工具,我可以添加一个坐在我咖啡桌上的怪物的 3D 化身。因此,对主题或计算机视觉一无所知,我决定采用以下策略:
- 使用 3D 重建工具/技术(Structure from Motion,或 SfM)构建视频中所有内容的 3D 模型(例如,我客厅的 3D 模型)
- 分析平面的 3D 模型(准确地说是 3D 点云)
- 添加我自己的逻辑来确定将哪些对象(3D 模型,例如 Blender 文件等)放置在视频的 3D 模型的哪个区域(例如,站在咖啡桌上的怪物)
- 最难的部分:在视频的每一帧中推断相机的方向,然后根据相机指向的方向确定如何正确定位增强(例如怪物),然后将增强的 3D 模型“合并”到主视频3D模型。这意味着当相机在我的客厅里移动时,怪物似乎仍然站在我咖啡桌上的同一个地方。我从来没有想出一个好的解决方案,但我想如果我能进入第四步,我会找到一些解决方案。
经过几个艰难的几周(计算机视觉很难!),我得到了以下工具管道,效果好坏参半:
- 我能够将视频的样本帧(例如,在我的客厅里走动时拍摄的视频)输入OpenMVG并生成它的稀疏点云PLY 文件/模型
- 然后我能够将该 PLY 文件输入MVE并生成它的密集点云(同样是 PLY 文件)
- 然后我将密集点云和原始帧输入mvs-texturing以生成我的视频的纹理 3D 模型
大约 30% 的时间,这条管道运行得非常好!这是我家门前的模型。你可以看到我的 3D 前院、我儿子的 3D 剧场,甚至可以看到门窗!
大约 70% 的流水线失败并出现难以理解的错误,或者产生了看起来像抽象画的东西。此外,即使涉及自动化脚本,工具也需要大约 30 分钟才能生成最终的 3D 纹理模型……太慢了。
好吧,看起来Google ARCode和Apple ARKit打败了我!这些框架可以从你的智能手机获取实时视频,并完全完成我一年前试图完成的事情:实时 3D AR。与 Pokemon Go 非常非常相似(但更高级和互动)。拍摄你客厅的视频,瞧,一个动画怪物正坐在你的咖啡桌上,你可以与它互动。非常非常非常酷的东西。
我的问题
我嫉妒!当然,谷歌和苹果可以雇佣一些最优秀的 CV/3D 侦察人员,但我还是嫉妒!!!我很好奇是否有任何核心 AR/CV/3D 侦察专家要么具有内幕知识,要么对 AR 领域非常了解,以至于他们可以谈论幕后正在发生什么样的工具/管道/技术这里使用 ARCode 或 ARKit。因为我几乎打破了我的大脑试图自己解决这个问题,我失败了。
- 我的策略(如上所述)是大致准确的,还是偏离基础的?(再次:视频的 3D 侦察 -> 表面分析 -> 逐帧相机分析,模型合并)?
- 什么样的工具/库/技术在这里发挥作用?
- 他们如何实时完成这项工作,而如果我的 3D 侦察工作有效,则需要 30 多分钟才能处理和生成?
提前致谢!
user-interface - 将立方体放置在 Structure-from-motion 输出 Bundler 中,然后确定新放置的立方体角的坐标?
我已经为Bundler的无序图像集合生成了运动结构系统的输出。
现在我想通过一些GUI在 3D 生成的空间中放置一个立方体,然后获取立方体角在世界坐标系中的坐标。世界坐标系是在 Bundler 本身中确定的,我想要立方体的点。
有什么好的方法可以继续?我还有.ply由Bundler生成的文件。
我最初想在 meshlab 中加载bundle.out文件或.ply文件,然后放置一个立方体,但我无法做到。
computer-vision - 2D 图像到 3D 世界坐标
我们从 Google Street View (GSV) API 抓取了一组图像。我想从 2D 图像估计 3D 世界坐标给定以下:
1. 摄像头拍摄图像的GPS位置(即经纬度)
GPS坐标到平移矩阵的转换:使用2种转换方法得到平移矩阵-> UTM转换和转换为笛卡尔坐标。
- UTM 转换:使用 Python 的 UTM 库将 GPS 坐标转换为 UTM 坐标。使用具有固定高度的北和东值来创建平移矩阵。
- 笛卡尔转换 - 使用以下公式生成平移矩阵:
x = 半径*math.cos(纬度)*math.cos(经度)
y = 半径*math.cos(纬度)*math.sin(经度)
z = 半径*math.sin(纬度)
2.使用openSFM(即SFM算法)计算的旋转矩阵。
该库提供alpha、beta、gamma角(以弧度为单位),它们分别映射到yaw、pitch和roll角。使用公式( http://planning.cs.uiuc.edu/node102.html)构造旋转矩阵
旋转矩阵 (R):R(alpha, beta, gamma)= R_z (alpha) * R_y (beta) * R_x (gamma)
3. 根据视场角和图像尺寸,我们估计校准矩阵如下(https://codeyarns.com/2015/09/08/how-to-compute-intrinsic-camera-矩阵换相机/在此处输入链接描述):
K = [[f_x s X], [0 f_y Y], [0 0 1]]
x 和 y 是图像尺寸的一半(即 x = 宽度/2 和 y = 高度/2)
GSV API 提供视场角 θ(例如,45 或 80),因此焦距可以计算为
f_x= x/tan(θ/2)
f_y= y/tan(θ/2)
使用矩阵 T、R 和 K,我们如何估计 2D 图像中每个像素的 3D 世界坐标?
computer-vision - 如何计算帧之间的相机移动速度?
我想知道我的相机在给定每个图像的时间戳的两个图像之间移动了多少(以速度表示,例如 m/s)。
我知道我可以在拍摄第二张图像时获得相机的姿势,相对于拍摄第一张图像时相机的姿势。
我的动机来自 Motion 文档中的 MathWorks 结构。
但现在我被困住了。
- 如果我的相机位置和方向在 t0,相机位置和方向在 t1,我该如何计算速度?如何混合线速度和角速度,即平移和旋转?
- 另外,我想,我缺少相对于真实单词的测量单位(如米)。我可能只能计算与相机位置相关的速度,而不是现实世界。我需要一个已知大小的对象,例如标记。然后,我的速度评估只有在我的两个图像中都有一个已知大小的物体时才有效,对吗?
computer-vision - 轨道和轨道长度在 SFM 中的含义
当我阅读论文“Structure-from-Motion Revisited”时。我遇到了几个我不明白的词,“轨道”和“轨道长度”。这些术语到底是什么意思?
c++ - C++ 和 OpenCV:SfM 模块中的 InputArrayOfArrays 类型和重构()函数
我正在试验中的 SfM 模块opencv_contrib
,并且我正在阅读reconstruct()函数的文档。对于可以传递给它的参数之一,我有点困惑。
论据之一是:
InputArrayOfArrays points2d
这被定义为:
points2d Input vector of vectors of 2d points (the inner vector is per image).
这是否意味着我们将每个图像的 Mat 数据类型扁平化为向量的向量或其他东西?我不明白。
我是否需要使用特征匹配器并找到匹配的特征,然后将这些特征放入这个向量中?
要么我不理解它的正确含义,要么文档有点混乱。我对 C++ 中的 OpenCV 比较陌生。
提前致谢!