问题标签 [rotational-matrices]

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 投票
0 回答
680 浏览

c++ - 如何在 OpenCV 中翻转旋转的矩形?

我想从已经翻转的矩阵中翻转一个旋转的矩形,并对其进行一些数学运算并得到一个新的矩形(未旋转)。仅仅改变 x, y 坐标并没有帮助,因为计算出的矩形将导致相反的方向。例如,如果我得到新矩形的起点,它将向翻转输入矩阵的方向扩展,这与我的结果矩形正好相反。该cv::flip函数不接受 rotateRect 作为输入。所以我不得不在这里寻求帮助。

0 投票
2 回答
423 浏览

python - 如何加快 Python 中的旋转操作?

我有一个适用于数千个粒子的 N 体模拟脚本。它输出粒子位置的最终 2D 投影,我想围绕给定轴以不同的旋转角度多次运行它,以便能够从不同的角度看到最终的 2D 结果。为此,我在开头添加了一些代码:

接着:

脚本的核心部分在此之后开始。总之,最初的脚本是这样做的:

  • 读取模型 > 运行模拟 > 输出 2D 投影

我添加了我的部分,所以现在:

  • 读取模型 >旋转 3D 中的每个粒子> 运行模拟 > 输出 2D 投影

但我发现轮换过程需要太多时间。Python中有没有办法或不同的方法来加速这个?(如果有帮助,我只希望最终的 2D 投影沿给定轴旋转)。

0 投票
1 回答
2515 浏览

c++ - findHomography() 中得到的矩阵的单应性分解

我已使用此代码 作为基础来检测场景中的矩形目标。我使用 ORB 和 Flann Matcher。我已经能够使用findHomography()perspectiveTransform()函数成功地在我的场景中绘制检测到的目标的边界框。
参考图像(img_object在上面的代码中)是仅矩形目标的直视图。现在我的场景图像中的目标可能会向前或向后倾斜。我想找出它倾斜的角度。我已经阅读了各种帖子,得出的结论是findHomography()可以将返回的单应性分解为旋转矩阵和平移向量。我使用了此链接推荐的https://gist.github.com/inspirit/740979中的代码翻译成C++。这是从OpenCV的相机标定模块得到的张SVD分解代码。我从 O'Reilly 的 Learning OpenCV 书中得到了这个分解代码的完整解释。
我的问题是:

  1. 我是否正确假设我得到的分解旋转矩阵会告诉我目标倾斜的角度?
  2. 其次,我可以使用从findHomography()in 获得的 Homography 作为该分解模块的输入并期望正确的输出吗?还是我缺少什么?
  3. 有没有其他方法可以达到同样的效果?

最后,我在移动平台上编码,所以我也关心性能。如果你能指出我正确的方向,我会很高兴。

提前感谢您的时间和回复。

0 投票
1 回答
1930 浏览

c++ - 解析旋转矩阵以获得角度

我已将此代码用作在场景中检测我的矩形目标的基础。我使用 ORB 和 Flann Matcher。我已经能够使用 findHomography() 和 perspectiveTransform() 在我的场景中成功绘制检测到目标的边界框功能。
参考图像(上面代码中的img_object)是仅矩形目标的直视图。现在我的场景图像中的目标可能向前或向后倾斜。我想找出它倾斜的角度。我有看了各种帖子,得出的结论是findHomography()返回的单应性可以分解为旋转矩阵和平移向量。我使用了此链接推荐的 https://gist.github.com/inspirit/740979 中的代码翻译成C++。这是从OpenCV的相机校准模块得到的张SVD分解代码。我从O'Reilly的Learning OpenCV一书中得到了这个分解代码的完整解释。
我还在匹配器返回的关键点上使用了 solvePnP() 来交叉检查从单应性分解返回的旋转矩阵和平移向量,但它们似乎并不相同。
我已经测量了所有场景图像的倾斜度。我找到了两种从旋转矩阵中检索角度的方法,以检查它们与我的值的匹配程度。

  • 给定一个 3×3 的旋转矩阵

    R =
    [ r_{11} & r_{12} & r_{13} ]
    [ r_{21} & r_{22} & r_{23} ]
    [ r_{31} & r_{32} & r_{33} ]

    3 个欧拉角是

    theta_{x} = atan2(r_{32}, r_{33})

    theta_{y} = atan2(-r_{31}, sqrt{r_{32}^2 + r_{33}^2})

    theta_{z} = atan2(r_{21}, r_{11})


  • 轴,角度表示 - 作为 R 一个通用旋转矩阵,其对应的旋转轴 u 和旋转角度 θ 可以从以下位置检索:
    cos(θ) = ( trace(R) − 1) / 2
    [u]× = (R − R⊤) / 2 sin(θ)


我使用从单应性分解和solvepnp()获得的旋转矩阵的方法计算了角度。所有的角度都是不同的,并且给出了非常意想不到的值。
我的理解有漏洞吗?我不明白我的计算在哪里错了。我可以使用其他替代方法吗?

0 投票
2 回答
839 浏览

matlab - 是否有将旋转矩阵转换为加速度矢量的 matlab 函数?

给定一些具有恒定加速度 A 的 3 x 3 旋转矩阵,我想找到三个方向的分量加速度,即 Ax、Ay、Az。

虽然“重新发明轮子”并不难,但我想知道是否已经有一个 Matlab 函数可以做到这一点,特别是在航空航天工具箱中?

0 投票
0 回答
4035 浏览

matlab - 如何使用旋转矩阵旋转 3D 点

下面我有两组不同的代码试图做同样的事情。我希望能够采用许多极点 [n, 3] 并为每个欧米茄 [nx 1] 创建一个旋转矩阵。我很难弄清楚我应该如何存储和操作旋转矩阵。

我也尝试过使用 3D 矩阵来执行此操作,但遇到了一些不支持 3D 矩阵的函数的问题。

根据评论的建议进行了编辑

例如,如果我有一个 2x3 向量矩阵

还有一个我想旋转的 1x3 角度矩阵

并运行函数rotationMatrix(poles, omega)

我以 3x3x3 的形式得到这个值矩阵

现在我想用这个矩阵 3x1x3 旋转一些坐标

现在我要旋转这些点,但似乎我不能做矩阵乘法..

使用bsxfun也不起作用,因为它返回一个 3x3 矩阵,而它应该是 3x1

我的直接解决方案是构建一个 for 循环。这可能不是最有效的方法。

如何在 3D 空间中进行矩阵乘法?

干杯,丹尼尔

0 投票
2 回答
2007 浏览

ios - 了解solvepnp的输出?

我一直在使用solvepnp()计算旋转和平移矩阵。但是从获得的旋转矩阵计算出的欧拉角给出了非常不稳定的值。为了找到问题,我为我的标记设置了一组 2D 投影点,并保持其他参数solvepnp()不变。
例如值:

2D点从solvepnp()的输出旋转矩阵计算出
[219.67473, 242.78395;
363.4151, 238.61298;
503.04855, 234.56117;
501.70917, 628.16742;
500.58069, 959.78564;
383.1756, 972.02679;
262.8746, 984.56982;
243.17044, 646.22925]
的欧拉角theta(x)为-26.4877

接下来,我只将第一个点的 x 值(即 219.67473)增加了 0.1,以检查 theta(x) 欧拉角的变化(保持其余点和其他参数不变)并再次运行 solvepnp()。对于那个非常小的变化,我的值从-19度,-18度(对于x坐标= 223.074)然后突然跳到27度一段时间(对于x坐标= 223.174到226.974)然后下降到1.3度(对于 x 坐标 = 227.074)。

我根本无法理解这种行为。有人可以解释一下吗?我从旋转矩阵计算欧拉角使用这个过程

0 投票
1 回答
230 浏览

math - 在旋转图像中找到对应点

我需要帮助将旋转视图中的选定点转换回原始图像中的对应点。因此,例如,如果我在旋转视图中单击左上角 ( 0,0 ),它应该对应于原始图像中的 (0,1280)。

无论旋转如何,解决方案都可以加分。

更新

我几乎不是一个数学家,所以任何牵手都会受到赞赏。:)

0 投票
1 回答
247 浏览

c++ - 在 Opengl 中使用矩阵的正确顺序是什么?

我查看了几个资源,例如http://antongerdelan.net/teaching/3dprog1/maths_cheat_sheet.pdf

我发现我应该使用列主要排序,当我发现这个问题的答案时就会出现混乱

为什么我的翻译矩阵需要转置?

答案显示了列主要排序中的翻译矩阵,但先前的资源显示了列主要排序中的翻译矩阵,它似乎是此答案中显示的转置矩阵。

我知道这个答案中的矩阵是正确的,因为我已经尝试过了并且我的转换有效。我试图找到的是列主要比例、旋转和透视矩阵,也是用这种 c++ 数组样式表示法编写的,而不是第一个资源中的那个。

0 投票
1 回答
3399 浏览

rotation - 反转 3d 旋转序列

我有一个构造为的转换矩阵 H = Rz * Ry * Rx。所以旋转是按 xyz 顺序执行的。

现在,给定围绕 x、y 和 z 轴的旋转角度,有没有办法找到旋转角度来执行逆运算,这样

v = Rz * Ry * Rx * v0

v0 = Rz' * Ry' * Rx' * v

只是为了完成。最后,我从变换矩阵中提取了欧拉角,如下所述:

从旋转矩阵计算欧拉角 - Gregory G. Slabaugh