问题标签 [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.
opencv - 运动结构中的正交和透视相机模型有何不同?
在相机模型是正交的假设下,正交和透视相机模型如何从运动中构造?
此外,这些技术有何不同?
python - 使用 OpenCV(Python)对运动结构进行相机校准
我想校准汽车录像机并将其用于运动结构 (SfM) 的 3D 重建。我用这台相机拍摄的照片的原始尺寸是 1920x1080。基本上,我一直在使用OpenCV 教程中的源代码进行校准。
但是有一些问题,我非常感谢任何帮助。
所以,像往常一样(至少在上面的源代码中),这里是管道:
- 找到棋盘角
findChessboardCorners
- 获取其子像素值
cornerSubPix
- 绘制它以进行可视化
drawhessboardCorners
- 然后,我们通过调用来校准相机
calibrateCamera
- 调用
getOptimalNewCameraMatrix
和undistort
函数使图像不失真
就我而言,由于图像太大(1920x1080),我将其调整为 640x320(在 SfM 期间,我也会使用这种尺寸的图像,所以,我认为这不会有任何问题)。而且,我使用 9x6 棋盘角进行校准。
这里,问题出现了。调用后getOptimalNewCameraMatrix
,失真完全错误。甚至返回的 ROI 也是[0,0,0,0]
. 以下是原始图像及其未失真版本:
但是,如果我不调用getOptimalNewCameraMatrix
并且直接调用undistort
它,我会得到一个非常好的图像。
所以,我有三个问题。
为什么是这样?我尝试过使用同一台相机拍摄的另一个数据集,也使用我的 iPhone 6 Plus,但结果与上述相同。
另一个问题是,does是什么
getOptimalNewCameraMatrix
?我已经多次阅读文档,但仍然无法理解。根据我的观察,如果我不调用getOptimalNewCameraMatrix
,我的图像将保持其大小,但会被缩放和模糊。任何人都可以为我更详细地解释这个功能吗?对于 SfM,我想调用 to
getOptimalNewCameraMatrix
很重要?因为如果不是,未失真的图像会被放大和模糊,使关键点检测更难(在我的情况下,我将使用光流)?
我已经用opencv示例图片测试了代码,结果很好。
下面是我的源代码:
已经在 answers.opencv.org 中询问某人,他成功地尝试了我的代码和我的数据集。我想知道实际上出了什么问题。
image-processing - 捆绑调整和运动结构之间的概念区别是什么?
在我看来,它们都意味着从 2D 图像中的匹配点重建 3D 坐标。这些概念和多视图立体有什么区别?
您将哪一种算法称为从关键点匹配计算稀疏点云的算法,并且需要先验地知道相机的外部和内部参数?
python - OpenDroneMap中匹配的例程和结果特征在哪里?
我不是 pyhton 方面的专家,我正在寻找 OpenDroneMap 中图像的匹配特征的例程和结果的位置。因为我想创建或添加一个子例程来选择所有匹配的最终特征的随机特征匹配,所以在转到计算 3D 稀疏结构的下一个 SfM 步骤之前
有人知道我在哪里可以找到这个来添加这个例程吗?
使用的 OpenDroneMap 是分支:master https://github.com/OpenDroneMap/OpenDroneMap
computer-vision - 3D 重建和 SfM 相机内在参数
我正在尝试了解 3D 重建的基本原理,并选择使用OpenMVG。但是,我已经看到证据表明我所询问的以下概念适用于所有/大多数SfM/MVS 工具,而不仅仅是 OpenMVG。因此,我怀疑任何计算机视觉工程师都应该能够回答这些问题,即使他们没有直接的 OpenMVG 经验。
我试图完全理解相机内在参数,或者它们似乎被称为“相机内在参数”或“内在参数”。根据 OpenMVG 的文档,相机内部函数取决于用于拍摄照片的相机类型(例如,相机型号),其中,OpenMVG 支持五种型号:
- 针孔:3个内在参数(焦点、主点x、主点y)
- 针孔径向 1:4 个内在参数(焦点、主点 x、主点 y、一个径向畸变因子)
- 针孔径向 3:6 个参数(焦点、主点 x、主点 y、3 个径向畸变因子)
- 针孔棕色:8 个参数(焦点、主点 x、主点 y、5 个失真因子(3 个径向+2 个切向))
- 带鱼眼失真的针孔:7 个参数(焦点、主点 x、主点 y、4 个失真因子)
这一切都在他们的wiki 页面上进行了解释,该页面解释了他们的相机型号,这是我的问题的主题。
在该页面上,我需要澄清几个核心概念:
- 焦平面:它是什么以及它与图像平面有何不同(如该页顶部的图表所示)?
- 焦距/长度:它是什么?
- 主要观点:它是什么,为什么理想情况下它应该是图像的中心?
- 比例因子:这只是对相机离图像平面多远的估计吗?
- 失真:它是什么以及它的各种子类型之间的区别是什么:
- 径向
- 切线
- 鱼眼
在此先感谢您的任何澄清/更正!
computer-vision - 通过点对应检测/校正照片翘曲
我意识到有很多与我所问的有关的蠕虫罐头,但我必须从某个地方开始。基本上,我要问的是:
给定两张用未知相机拍摄的场景照片,我可以在多大程度上确定照片之间的(相对)翘曲?
下面是 1904 年世界博览会的两张图片。它们是在无线电报塔上的不同高度拍摄的,因此摄像机或多或少是垂直排列的。我的目标是根据这些照片和其他照片创建该区域的模型(在 Blender 中,如果重要的话)。我不是在寻找一个完全自动化的解决方案,例如,我对手动选择点和特征没有任何问题。
在过去的一个月里,我自学了关于射影变换和极线几何的知识。对于一些照片对,我可以通过从点对应中找到基本矩阵F来做得很好。但是下面的两个给我带来了问题。我怀疑存在某种翘曲——也许只是纵横比的变化,也许不止于此。
我的流程如下:
- 我找到了两张照片之间的对应关系(见下图的红色锯齿线)。
- 我通过 Matlab(实际上是 Octave)运行点对以找到极点。目前,我正在使用 Peter Kovesi 的 Peter's Functions for Computer Vision。
- 在 Blender 中,我设置了两个覆盖图像的相机。我根据消失点定位第一台相机。我还确定了消失点的焦距。我使用极点和其中一个点对(下方,演奏台顶部的点)相对于第一个相机定位第二个相机。
- 对于每个点对,我从每个相机通过其采样点投射一条射线,并标记这对点最近的覆盖范围(下方为浅黄色)。 我意识到这遗漏了基本矩阵中的信息——见下文。
如您所见,这些点并没有很好地收敛。您从演奏台点水平走得越远,左边的那些就会展开。我猜这显示了相机内在特性的差异。不幸的是,我找不到从点对应派生的F中找到内在函数的方法。
最后,我认为我并不关心个人内在本质本身。我真正需要的是一种应用内在函数来“纠正”图像的方法,以便我可以将它们用作叠加层来手动优化模型。
这可能吗?我需要其他信息吗?显然,我几乎没有希望找到有关相机内在函数的任何信息。但是有一些明显的结构信息,例如哪些特征是正交的。我在某处看到了一个提示,消失点可用于进一步改进或升级转换,但我找不到任何具体的东西。
更新 1
我可能已经找到了一个解决方案,但我希望在我将其作为答案发布之前,对该主题有一定了解的人来权衡一下。事实证明,Peter 的计算机视觉函数具有对样本点的单应性进行 RANSAC 估计的函数。使用m2 = H*m1
,我应该能够在第二张图像上的实际 m2 点之上绘制 m1 -> m2 的映射。
唯一的问题是,我不确定我是否相信我所看到的。即使在使用F中的极线排列得很好的图像对上,单应性的映射看起来也很糟糕。
我会尝试捕捉一个可以理解的图像,但我的推理有什么问题吗?
opencv - 计算机视觉:运动中的“逆”结构
注意:我不是要求代码只是我可以研究的一些算法的名称
问题
我正在尝试从主体旋转的多个图像进行 3D 重建。
我在 CV 领域没有太多经验,我的数学也不是特别好,所以我依赖于简单的论文或现有的库/工具。
我在哪里
我一直在研究和测试使用 Structure from Motion(使用 VisualSFM)生成 3d 点云和多视图立体(使用 CMPMVS)来重建场景。
显然,这些算法旨在处理相机(或相机)移动且场景静止的图像,因此重建失败的原因有很多。
示例:我一直在处理一个人围绕地板上的标记旋转的短视频,见下文。我已经尝试删除背景,但这似乎使 SfM 更难建立对,可能是因为缺乏信息。
问题
有谁知道能够重建一系列具有静态背景和旋转对象的图像的算法/管道的名称?
还是不能以这种方式进行 3d 重建?
opencv - 在 Python 中使用 OpenCV 的运动结构教程有哪些好的资源?
我正在为我的论文做一个项目,它需要实现从运动技术到创建点云模型的结构。但是,是否可以用数字方式定义点云模型?
matlab - 使用 MATLAB 从多视图中获取运动结构
当谈到运动结构这个话题时,我是个新手。我一直在尝试遵循 MathWorks 网页中的 SFM 教程:LINK。
但是,运行代码后,我收到以下错误消息:
有人可以帮我理解为什么会这样吗?有人可以为我提供不同的方法吗?
python - 高斯曲率和平均曲率是否适用于粗糙表面?
对于我正在进行的一个项目,我已经成功地对道路图像数据执行了 SFM 程序,并且能够生成一个包含点云坐标(X、Y、Z)、RGB 值和法线(nx、纽约,新西兰)。
现在,我有兴趣从我拥有的数据中计算每个点的曲率值。我在 Python 中遇到过Surface Curvature MATLAB Equivalent,但据说该实现仅在 X、Y 和 Z 是二维数组时才有效。
如果路面非常粗糙,是否适用高斯曲率和平均曲率?给定大小为 NX3 的 (X,Y,Z) 坐标数据和大小为 NX3 的 (nx,ny,nz) 法线数据,我应该如何找到曲率?Python中有当前的实现吗?