问题标签 [pose-estimation]
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 - 多幅图像的位置估计
首先,我想声明我对这个领域很陌生,如果这个问题有点重复,我深表歉意。我环顾四周,但徒劳无功。我正在阅读 Hartley 和 Zisserman 的书,但这需要我一段时间。
我的问题是我有一个区域的 3 个视频源,我需要在视频的每一帧找到相机位置。我没有关于拍摄视频的相机的任何信息(即没有内在信息)。
在寻找解决方案时,我遇到了 SfM 并尝试了现有的软件,即 Bundler 和 Vsfm,它们似乎都运行良好。但是我有几个问题。
1) 我的情况真的需要 SfM 吗?既然 SfM 做的是稀疏重构,而且图像之间的公共点也是输出,那么它是否完全有必要呢?还是有更合适的方法可以做到这一点,因为我真正需要的只是职位?或者有没有我可以使用的不太复杂的方法?
2)根据我的阅读,我需要校准相机并找到它的内在和外在。我怎么能在不知道的情况下做到这一点?我已经查看了 5 点问题和其他问题,但其中大多数都要求您了解我没有的相机的内在属性,并且我不能使用诸如棋盘之类的模式来校准它们,因为它们来自我无法控制的来源。
谢谢你的时间!
matlab - 使用平面的相机校准参数从 2d 投影在平面上重建 3d
尝试使用“Matlab 的相机校准工具箱”中的外在和内在相机参数从相机图片中的 2D 像素坐标重建平面上点的 3D 坐标。
内在参数: 焦距:fc = [1017.21523 1012.54901] 主点:cc = [319.50000 239.50000]
外在参数: 平移向量:Tc_ext = [4.409693 -74.116018 393.057934] 旋转矩阵:Rc_ext = [-0.083632 0.991715 -0.097501 0.832136 0.015674 -0.554350 -37482.8025] -0.5482.8025 -0.5482.8025
任何人都可以帮助如何从相机图像中的 2d 获取平面上点的 3d 坐标吗?
matrix - 五点基本矩阵估计的 Sampson 误差
我使用 Nister 的 5 点方法来计算基本矩阵。使用 RANSAC 和 Sampson 错误阈值进一步改进了异常值拒绝。我随机选择 5 个点集,估计基本矩阵并评估匹配向量的 Sampson 误差。Sampson 误差低于阈值t
(0.01
在我使用的示例中设置为)的点坐标被设置为内点。对所有基本矩阵重复该过程,我们保留内点得分最高的矩阵。
我注意到d
sampson 错误向量的大多数值太大:例如,如果 的大小d
为 (1x1437),如果我这样做
那么length(g)=1425
这意味着只有 7 个值是不正确的阈值的内点!
如何设置阈值?如何解释 Sampson 错误值?
请帮帮我。谢谢
3d - 使用单个校准相机从 2D 图像中获取世界坐标
我正在尝试从没有棋盘的单个图像校准我的相机。为此,我使用了以下应用程序 ( http://w3.impa.br/~zang/qtcalib/index.html ),它使用 Tsai 的方法来校准相机。
应用程序返回固有矩阵、旋转矩阵和平移矩阵。
之后,我想从二维图像计算世界坐标。因此,为我的程序提供 2d 坐标 (x,y) 和矩阵(内在、旋转、平移)我想获得 3D 坐标 (X,Y,Z)。
我遵循了一些相关线程的指令(如果已知外在参数和内在参数,则从 2D 图像像素获取 3D 坐标),但结果并不如我所料。另外,我不知道我的起源(0,0,0)在哪里。
我究竟做错了什么?
computer-vision - 相机位姿估计
我正在尝试从头开始编写一个可以估计相机姿势的程序。我对任何编程语言都持开放态度,并使用内置函数/方法进行特征检测......
我一直在探索估计姿势的不同方法,如 SLAM、PTAM、DTAM 等……但我真的不需要跟踪和映射,我只需要姿势。
你们中的任何人都可以提出可以帮助我的方法或任何资源吗?我知道姿势是什么以及如何估计它的粗略想法,但我找不到任何资源来解释它是如何完成的。
我正在考虑从录制的视频开始,从视频中提取特征,然后使用这些特征和几何形状来估计姿势。
(请原谅我的天真,我不是计算机视觉专家,对这一切都还很陌生)
matlab - 基本矩阵错误?
我试图通过扫描从相机拍摄的两张图像来估计相机的姿势,检测图像中的特征,匹配它们,创建基本矩阵,使用相机内在函数计算基本矩阵,然后分解它以找到旋转和翻译。
这是matlab代码:
我面临的问题是 R 和 T 总是不正确的。ThetaZ 大多数时候等于 ~90,如果我重复计算很多次,有时我会得到预期的角度。(但仅在某些情况下)
我似乎不明白为什么。这可能是因为我计算的基本矩阵是错误的。还是有其他地方我出错了?
另外 T 的比例/单位是多少?(平移向量)还是推断不同。
PS 计算机视觉新手...
opencv - OpenGL透视矩阵的内在相机参数:近远参数?
我正在开发一个将图形叠加到相机图像上的增强现实应用程序。使用 OpenCV Pose Estimator 和设备本身的 Intrinsic Camera Parameters,我能够生成一个相当不错的 OpenCV Camera Matrix 和 OpenGL Perspective Matrix,从而产生合理的结果。
然而,我的解决方案,以及我在这个论坛和其他 Internet 位置检查过的所有类似解决方案,只是对透视矩阵近距和远距参数使用一些有些随意的值(通常为 1.0 和 100)。
然而,虽然如果感兴趣的对象不太靠近,这通常是可以的,但当对象靠近视点时,它会变得更加不准确并且是失真的来源。
实际上,随着这两个参数(近、远)的调整,透视的消失点会发生变化。
有没有人有更合理的方法来从可用数据中推导出 Near 和 Far 参数?
matlab - 在点云上拟合人体躯干(3 个圆柱体)的简单模型
对于简单的手部姿势估计,我想首先在点云数据上拟合 3 个圆柱体。主要目标是提取手部姿势。
我有(每帧约 1300 个点,其中一些是人类旁边的橱柜和桌子),我读入 Matlab,然后只在“手臂”圆柱体内的点上工作。我该怎么办?我想我会使用 ICP 并从形状中采样一些点,但我不知道如何做到这一点,也不知道如何将变换与圆柱体的参数准确关联(我认为这将是高度、半径、圆柱体的中心底点和方向)。
我可以获得的任何帮助或资源来学习如何做到这一点都会有所帮助。图书馆也一样。
java - 如何估计具有 3d 到 2d 点对应的相机姿势(使用 opencv)
您好,我的目标是开发用于飞机(模拟器)驾驶舱的头部跟踪功能,以提供 AR 以支持平民飞行员在视觉条件不佳的情况下着陆和飞行。
我的方法是检测我知道 3D 坐标的特征点(在黑暗的模拟器 LED 中),然后计算估计的(头戴式相机的)姿势 [R|t](旋转与平移连接)。
我遇到的问题是估计的姿势似乎总是错误的,并且我的 3D 点的投影(我也用来估计姿势)不与 2D 图像点重叠(或不可见)。
我的问题是:
如何使用给定的一组 2D 到 3D 点对应关系估计相机位姿。
为什么它不起作用我如何尝试它以及可能的错误来源在哪里?
测量(3D 和 2D 点以及相机矩阵)必须有多精确才能使理论解决方案在现实生活环境中发挥作用?
理论上该方法是否适用于共面点(x,y 轴改变)?
我使用的硬件是 Epson BT-200。
在飞机上,我定义了一个固定的纵坐标,我希望我的程序会产生相对的平移和旋转。该程序检测(唯一)LED 的图像坐标,并将它们与相应的 3D 坐标相匹配。使用我使用 open-cv 示例 android 代码 ( https://github.com/Itseez/opencv/tree/master/samples/android/camera-calibration ) 获得的相机矩阵,我尝试使用solvePnP估计姿势。
我的相机矩阵和失真略有不同。以下是我从该过程中收到的一些值。我确保我打印出来的圆形图案的圆形距离与源代码中写的相同(以米为单位)。
以下是一些示例以及我如何创建它的 OpenCV Mat。
为了估计相机姿势,我确实使用了 solvePnP (和solvePnPRansac),如几个位置(1、2、3、4)中所述。我将 solvePnP 的结果用作 Projection ( Calib3d.projectPoints ) 的输入。我确实将连接结果 [R|t] 的倒数用作估计姿势。
因为我在生产环境中的结果太糟糕了,所以我创建了一个测试环境。在那种环境中,我将相机(这是因为它是 3D 形状(它是玻璃)在桌子的边缘略微向下旋转。我将这个边缘用作世界坐标系的纵坐标。我搜索了 open-cv坐标系可能会被定向并找到不同的答案(一个在stackoverflow上,一个在官方youtube-talk about opencv中)。无论如何,我测试了我是否通过在图像上投影3D点(在该坐标系中描述)得到了坐标系,并且检查给定的世界形状是否保持不变。
所以我上来时 z 指向前方,y 向下,x 向右。
为了更接近我的解决方案,我估计了测试环境中的姿势。平移向量输出和欧拉角输出指的是 [R|t] 的倒数。欧拉天使可能显示不正确(如果我们考虑顺序,它们可能会被交换或错误),因为我使用传统(我假设是指飞机坐标系)方程计算它,使用 open-cv 坐标系。(计算发生在我将附加的类 Pose 中)。但无论如何,即使是(反向的)平移向量似乎也是错误的(在我的简单测试中)。
在对该图像的一项测试中,我有一个 30° 的滚动(可能是飞机坐标中的俯仰)和一个向上的平移 50厘米。这似乎更合理。所以我假设因为我的点是共面的,我可能会得到模棱两可的结果。所以我实现了另一个测试,其中一个点在 Z 轴上发生了变化。但是通过这个测试,即使投影也失败了。
对于solvePnP,我尝试了所有不同的求解算法标志和ransac算法的不同参数。
也许你能以某种方式帮助我找到我的错误,或者告诉我一个解决我最初问题的好方法。我还将附上带有许多 println 语句和调试图像的调试源代码。此代码包含我的点测量。
提前感谢您的帮助。
1.png
编辑 22.03.2015: 最后我能够找到我犯的错误。
- 我在 for 循环中修改了一个 Mat 对象,因为 OpenCV 在引用调用方面工作得很多,而且我在这里不够小心。所以重投影的 tvec 和 rvec 是不正确的。
- 我在测试环境中的一个观点(在图像坐标中)由于轴方向混淆而被标记为错误。
所以我的方法总的来说是正确的。我的测试数据集中至少(通常)没有收到有效的重新投影。
不幸的是,OpenCV PnP 算法:“迭代,P3P,EPNP”返回各种结果,即使使用非常不准确但接近的内在猜测,结果也只是有时是正确的。P3P 算法应该提供 3种解决方案,但 OpenCV 只提供了一种。EPNP 应该返回良好的结果,但使用EPNP OpenCV 返回最差的结果,这是根据我的人类观察评估的。
现在的问题是,如何过滤不准确的值或确保 OpenCV 函数返回有效值。(也许我应该修改本机代码以接收 3 个 PnP 解决方案)。
此处的压缩图像 (37MB)确实显示了我当前的结果(使用迭代 PnP 求解器),固有猜测为零旋转和向上 75 厘米。打印输出有一个向前的 x 轴、向左的 y 轴和向下的 z 轴,以及对应的滚动、俯仰和偏航角。
computer-vision - 从基本矩阵估计相机位姿
我尝试从一对图像中估计相机运动。我找到了基本矩阵 E 并将其分解为旋转和平移元素。这是 C++ 代码:
函数 infrontOfBothCameras 检查点是否在相机前面。
}
在我想估计相机的新姿势之后。我如何使用 t 和 R 呢?例如,我有相机的旧姿势: old_pose=(0,0,0) 我尝试计算新姿势:
这是对的吗?