问题标签 [homogenous-transformation]

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 投票
1 回答
66 浏览

c++ - OpenGL 对象在屏幕空间中拖动后变形

我想在OpenGL中用鼠标位置偏移拖动一个对象。渲染管道是这样的。

所以我想我应该反转(投影*视图)然后将它们相乘以获得将应用于模型矩阵的转换。

当我拖动它时,该对象正在跟随鼠标移动。但是如果我从其他角度看,这个物体会严重变形。那么我做错了什么?(投影*视图)应该倒置吗?

拖动前的骰子:
拖动前骰子

拖动后的骰子:
拖动后骰子

您可以从其他角度看到失真:
你可以从其他角度看到失真

失真的一个更明显的例子:
失真的一个更明显的例子

更新:我设法通过仅保留位置转换来解决问题(某种)。所以我怀疑转换中左上角的 3x3 矩阵有问题。调试的时候发现第四行的前三列不是零,这是绝对错误的!但我不明白是什么原因造成的。这种现象只有在我使用 glm::perspective 作为投影矩阵时才会发生。使用 glm::ortho 也是一种无需丢弃左上角 3x3 矩阵的解决方案。

0 投票
0 回答
525 浏览

python - 使用 OpenCV 将相机坐标中的点云均匀变换到世界坐标

我有相机校准内在和外在(包括旋转和平移,即rvecs 和 tvecs,用于一组 N 相机姿势,相对于固定的 ChArUco 目标。

此外,对于每个相机姿势,我都有一组在标准OpenCV 相机坐标系中定义的 3D 坐标(“点云”) 。

经过大量阅读,我会认为我需要首先计算每个相机相对于 ChArUCo 板的姿势,方法是在 python 中构建一个齐次变换矩阵:

基本上,上面的代码可以工作,但是当我从不同的相机角度在多个点云上运行它时,它们并没有像我预期的那样神奇地排列。我可以确认我的逆齐次变换确实是直接从 rvecs 和 tvecs 构造的齐次变换的逆;曾尝试将其分解为先平移然后旋转,反之亦然;并且已经看到非逆变换使所有东西几乎从一个角度排列(但从其他角度都奇怪地旋转)......

任何帮助表示赞赏!

0 投票
1 回答
137 浏览

opencv - openCV 如何使用物点和图像点估计焦距

我正在尝试使用 openCV、openGL 显示 3D 棋盘图像(涉及旋转、平移),如 matlab 的相机校准工具箱。

为此,我正在研究相机校准,均匀等。我的问题是函数calibrateCamera(),我想知道openCV如何仅使用棋盘角的对象点(vec3),图像点(vec2)计算(估计)焦距.

请告诉我任何方程式或原理..

对不起我的英语不好 谢谢

0 投票
1 回答
135 浏览

math - 累积同质变换:旋转有效,但平移无效?

我有 3 个点云(云 0、云 1 和云 2),使用地面激光扫描仪在 3 个不同的位置获得。这些云在它们之间重叠,这意味着存在一个刚性 3D 身体变换 T,它可以正确地将一个云记录到另一个云上。我有两个这样的转换,T10,它将云 1 移动到云 0;和 T20,它将云 2 移动到云 0(选择云 0 作为全局参考)。问题是,如何找到将云 2 与云 1 重叠的转换?我已经找到了旋转,但我找不到平移向量。这是可能的?

我通过将变换 T20 乘以 T10 的倒数得到的旋转,因为 T10^(-1) = T01,因此,T20*T01 = T21。当我将此转换应用于云 2 时,它会正确地将云 2 旋转到云 1(两者都在同一方向),但是它们之间存在偏移,我不明白为什么。

这些变换只是齐次矩阵 T (4x4),它们只是旋转矩阵 R (3x3) 和平移向量 t (3x1) 的交汇点,对吧?可以组成轮换。我发现从云 2 到云 1 的旋转表明了这一点。但是为什么这种转变会出现在翻译中呢?

其实我有几朵云,要注册一个远离原点的云,我需要通过乘法累加几次变换(例如:T50 = T54 * T43 * T32 * T21 * T10),我乘的越多,差异越大在翻译中。

我想说的是,虽然乘法会累积错误,但它们非常小,因为注册是手动完成的,并通过 ICP 进行了细化。事实上,成对应用任何转换都会导致几乎完美的重叠,但累积它们会导致翻译出现巨大偏差。旋转非常好,以至于闭环实际上会产生单位矩阵。

0 投票
0 回答
163 浏览

c++ - ROS 奇怪的转化行为

我试图找到激光雷达和相机之间的刚体转换。一旦找到转换为 dx、dy、dz、yaw、pitch、roll (rad),我使用带有启动文件的 ROS 静态转换发布器来发布转换,如下所示:

然后,我听那个变换:

输出是:

  • 我的第一个问题是为什么翻译值彼此不同?

  • 第二个问题:如果我使用下面的代码从相同的 6DoF 获得 4x4 变换矩阵

输出矩阵为:

在这一点上,即使平移也是正确的,为什么旋转值与 ROS tf static transform publisher 提供的矩阵不同?

0 投票
1 回答
71 浏览

point-cloud-library - 如何计算具有齐次变换矩阵的相机的视角?[PCL]

我的目标是计算平面与相机视角之间的角度。我知道如何计算角度,但我不知道如何以线的形式获得视角。

对于相机来说,已知的同质变换矩阵描述了它在全局三维坐标系中的位置和旋转。我想我必须首先通过将相机放在原点上来消除平移部分,但是我该如何进行旋转来计算方向呢?

0 投票
0 回答
25 浏览

computer-vision - 为什么用基本矩阵检查对应点时点的顺序很重要?

为什么在计算基本矩阵方程的点之间的对应关系时点的顺序很重要?

在这里我不明白为什么切换点不会产生相同的答案

我的猜测是,这与通常您将第一个相机设置为规范相机 [I 0] 并且这是假设图像点 x 的事实有关,但大多数参考文献没有提到第一个相机 P 有为 [I 0]。

0 投票
0 回答
19 浏览

coordinate-systems - 一个点相对于同一 3D 帧中另一个点的实际位置

我有 2 个坐标,有 6 个值 x、y、z 偏航、俯仰和滚动,代表自我车辆和目标车辆的位置。我想找到目标车辆相对于自我车辆的相对位置。两者都在同一个坐标系中。我想澄清一下我解决这个问题的方法是否正确:检索每个演员的个人姿势,比如 T_ego 和 T_targ。每个姿势都是一个 4*4 齐次变换矩阵,它描述了演员的平移和旋转,wrt 虚幻世界框架。目标 wrt ego-vehicles 的相对姿态由 T_rel = inv(T_ego) * T_targ 给出。相对位置是 T_rel[:3, 3] 相对旋转(从目标轴到自我车辆轴)是 T_rel[:3, :3]。请让我知道这是否是正确的方法,并想知道如何准备同质矩阵。