问题标签 [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.
c++ - 图像点(像素)到真实世界坐标(米)
我在天花板上有一个鱼眼相机,我想在地板上定位一些点。我将参考系统(现实世界)的原点放在相机下方,我想知道每个物体的位置(以厘米为单位)。这张图片显示了这一点:
首先,我完成了相机校准,并获得了 RMS 为 1.11 的下一个结果:
作为校准的结果,我获得了内在参数(相机矩阵),所以我使用 cv::solvePnP 来获得旋转和平移向量。为了应用这个,我在未失真的图像中标记了一些点(以像素为单位),并根据我的参考系统在现实世界中测量了它们。
例如,原点位于 1024x768 图像的中心,因此:
- 点 0:ImagePoint(512, 384) [像素] --> ObjectPoint(0,0) [厘米]
下一个代码显示了这一点:
现在我有了相机矩阵、旋转矩阵和平移向量,所以通过使用它作为参考,如果我有它的像素位置,我可以计算任何点。这是代码:
对于用于获取参数的相同点,我得到了这个结果:
- 点 0 --> (0.213, 3.391) (应该是 (0,0))错误: 3.69 cm
- 点 1 --> (-68.28, -112.82) (应该是 (-80, -132))错误: 17.49 cm
- 点 2 --> (84.48, 137.61) (应该是 (120, 188))错误: 49.62 cm
其余点也显示错误太大...我使用了更多点,但结果没有改善。我不知道我哪里出错了,谁能帮帮我?
提前致谢。
c++ - OpenCV 中的 recoverPose() 函数是左撇子吗?
我对 OpenCV 相机姿态估计进行了简单的测试。将一张照片和同一张照片按比例放大(放大),我使用它们来检测特征、计算基本矩阵和恢复相机姿势。
因此,当我将原始图像指定为第一个图像并将缩放图像指定为第二个图像时,我得到的平移 T 接近 [0; 0; -1]。然而,第二台相机(放大)实际上比第一台更靠近物体。因此,如果 Z 轴从图像平面进入场景,则第二个摄像机应沿 Z 轴具有正偏移。对于我得到的结果,Z 轴从图像平面朝向相机,与其他轴(X 向右,Y 向下)形成左手坐标系。真的吗?为什么此结果与此处说明的坐标系不同?
python - OpenCV 姿势估计和 projectPoints
我正在做类似于这里的教程:http: //docs.opencv.org/3.1.0/d7/d53/t ...关于姿势估计。本质上,我在模型坐标系中创建了一个轴,并使用 ProjectPoints 以及我的 rvecs、tvecs 和 cameraMatrix 将轴投影到图像平面上。
就我而言,我在世界坐标空间中工作,我有一个 rvec 和 tvec 告诉我一个物体的姿势。我正在使用世界坐标点创建一个轴(假设对象根本没有旋转或平移),然后使用 projectPoints() 在图像平面中绘制对象的轴。
我想知道是否可以消除投影,并在旋转和平移这些轴后获取它们的世界坐标。为了测试,我已经手动完成了轴点的旋转和平移,然后使用 projectPoints 将它们投影到图像平面上(分别传递单位矩阵和零矩阵进行旋转、平移),但结果似乎有些偏离。一旦旋转和平移,如何消除投影步骤以获取轴的世界坐标?谢谢!
java - 绘制 3dAxis 时 ArUco 轴交换
我目前正在尝试为一个项目开发 ArUco 立方体检测器。目标是在不使用大型 ArUco 板的情况下获得更稳定和准确的姿态估计。但是,要使其正常工作,我需要知道每个标记的方向。使用 draw3dAxis 方法,我发现 X 轴和 Y 轴并没有一致地出现在同一位置。这是一个演示该问题的视频:https ://youtu.be/gS7BWKm2nmg
Rvec 检测似乎有问题。Rvec 的前两个值有一个明显的变化,它将保持相当一致,直到轴交换。当此轴交换发生时,值可以在 2-6 的任何地方变化。ARuco 库确实尝试处理旋转,如 Marker.calculateMarkerId() 方法所示:
并且 MarkerDetector.detect() 确实调用该方法并使用 getRotations() 方法:
ArUco 库的完整源代码在这里:https ://github.com/sidberg/aruco-android/blob/master/Aruco/src/es/ava/aruco/MarkerDetector.java
如果有人有任何建议或解决方案,我会非常亲切。如果您有任何疑问,请与我联系。
opencv - 在opencv的solvePnP中,我应该为objectPoints传递什么?
在增强现实应用程序中,我检测场景中的图像,所以我知道 imagePoints,但我正在寻找的对象(objectPoints)是一个虚拟标记,只是存储在内存中以在场景中搜索,所以我不知道它在太空中的位置。
我正在阅读的书(Mastering OpenCV with Practical Computer Vision Projects)通过它,好像标记是一个 1x1 矩阵并且它工作正常,怎么样?
solvePnP 不需要知道对象的大小及其投影,所以我们知道应用了多少比例?
opencv - Aruco 天平坐标错误
我正在使用(新发布的)ArUco 2.0.7 来跟踪一些标记。我使用的摄像头朝下安装在天花板上,所以我只需要 x 和 y 坐标。它可以查看 2.6m x 1.5m 的区域。如果我正确理解文档,我会以任意单位提供我正在使用的标记的边长,姿势的输出将采用相同的单位。所以标记的边长为 19.5 厘米。因为我希望我的结果以米为单位,所以我将该值设置为 0.195。
但是,我得到的结果是不正确的。如果我将标记放在相机视野的角落,它们不在相应的预期 x 和 y 坐标处。
我将全局原点放在视野的一个角上,例如(0,0)是左下角。这是通过使用 getRTMatrix() 获得的矩阵变换将所有传入位置转换到该标记坐标系来完成的。一切似乎都在工作,除了 x 和 y 坐标的单位错误或缩放。旋转完美。
我错过了什么吗?或者我不能期望一个很好的准确性?误差很大,比如应该是(2.6,1.5)的时候显示为(1.8,1),大概是33%的误差。
opencv - 在哪里为solvePnP设置模型空间的原点
(从我在 OpenCV 论坛上的问题交叉发布http://answers.opencv.org/question/100840/where-to-set-origin-of-model-for-solvepnp/)
大家好,一个多月来,我一直在为这个问题而烦恼。我不得不承认我没有仔细研究solvePnP背后的数学(大多数人没有,这就是我们有开源库的原因),因为原因。
关于将模型原点放置在何处,我想就使用solvePnP 寻求一些实用建议。
背景:我正在使用 OpenCV 制作头部跟踪应用程序。跟踪屏幕上的对象(其中 4 个)并不是真正的问题。弄清楚 6DoF 是。
摄像头:手机摄像头。我还没有进行校准,但我认为只要对象将头部保持在视图的中心,这应该不是什么大问题。我确实注意到边缘明显的桶形失真。
当前结果:根据模型“放置”的位置,我可以从旋转或平移部分获得稳定的性能。此外,在奇怪的情况下,我会从不同的运行中得到疯狂的结果。可能是某个地方的奇点。
输入solvePnP的参数:图像点——来自跟踪器(原点在左下角)。模型点——来自 3D 模型(原点左下角,转换为 OpenCV 左上角原点)。相机矩阵——图像的 fx,fy 最大尺寸,图像中心的主点,无倾斜(如果我进行校准,可能会改变)。将 ITERATIVE 与 extrinsicGuess 一起使用(因为没有它会非常紧张)。
所以我想问的具体建议是:我应该在哪里设置模型的原点(在这种情况下是人头)以获得一致的 6DoF 值?理想情况下,我想让旋转值“锚定”在颈部内部(距前部大约几厘米深)。我尝试将头部模型点平移到颈部内部,但我注意到当模型的很大一部分在 -z 范围内时,z 平移值变得疯狂。此外,它变得无法正确解决 x 旋转(无论我向上还是向下看,它都会给我正值)。
我应该将模型放置在模型空间的特定八分圆吗?我应该避免将模型的任何部分放在 -z 范围内,还是应该期望 solvePnP 在这种情况下返回 -z 转换?
PS这个问题可能有多个单独的问题,如果你能解决它们也很好,但我最关心模型空间中的模型放置及其与solvePnP的交互
matlab - 均方误差回归卷积网络停止学习
- 我正在尝试使用 alexnet 对使用 MatConvNet 的人体姿势估计进行回归。
- 当我在前两个时期训练网络时,损失正在迅速减少。但是之后,损失不再减少,当我可视化第一个特征图时,它只显示随机噪声。
- 该代码可以在https://github.com/MaxChu719/HumanPoseEstimation中找到。
- 我已经尝试过使用不同的学习率。当学习率太高时,它会很快发散。如果学习率在 0.0001 左右,它将开始减少两个时期的损失。看损失图:Loss
c++ - 在 real_time_pose_estimation 中没有错误但未能检测到对象
我正在研究实时姿态估计,您可以在此处找到代码 https://github.com/opencv/opencv/tree/master/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation(opencv 3.1.0 中给出的示例)。
它有两个阶段:
模型注册(在.yml文件中注册要检测的对象的3D纹理模型)
模型检测
如果我发送 /real_time_pose_estimation/Data 中已经存在的 .yml 文件(cookies_ORB.yml),那么检测将按预期成功
为什么它没有检测到我是否在 .yml 文件中手动注册对象的 3D 纹理模型并以意外输出结束。
这就是我所做的:
错误
预期产出——