问题标签 [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 回答
1079 浏览

matrix - 从模型视图矩阵中提取比例矩阵

我们如何从模型视图矩阵中提取比例矩阵?现在我正在计算每列的长度,但是当比例为负时它会失败。这是我的代码:

例如:

0 投票
2 回答
1139 浏览

c++ - 两个大小不同的矩阵相减,OpenCV报错

我正在尝试制作一个程序,该程序从两张相同的图片中找到齐次坐标,但是对象已被旋转或平移,然后拍摄第一张图片并将其覆盖在第二张图片上。

问题是,我得到一个矩阵错误,因为我有不同的矩阵大小。

我找到了解决方案,我需要将其应用于旋转和平移以在第二张图片上获取第一张图片(我必须在第二个矩阵上应用的值)

这是我的代码:

我收到以下错误:

我想我知道问题是什么,但我不知道解决方案是什么。

矩阵有不同的大小

我能做些什么来解决这个问题?

0 投票
1 回答
503 浏览

clipping - 4D 均匀空间中的裁剪问题?

我正在通过实现一个微型软件渲染器来学习可编程渲染管道。我尝试以“硬件”风格实现它。但是,我对 GPU 管道并不熟悉,并且遇到了一些均匀裁剪的问题。

根据这个线程,假设我们有两个点e0e1在 3D 眼睛坐标中,它们被投影到h0(-70, -70, 118, 120)h1(-32, -99, -13, -11)在 4D 齐次裁剪空间中。然后我们在 4D 齐次空间中进行插值,该段在 4D 点h0-h1被平面w = -xz = -1在 NDC 中)剪裁h(t)=t*h1+(1-t)*h2,其中t = 0.99. 不失一般性,假设我们有h0-h(0.99)一部分(可见的)馈送到光栅化阶段。所以我们需要生成对应的顶点属性h(0.99)(同顶点着色器的输出格式)。我的问题是如何生成这些新顶点的属性?

更新:我尝试使用 t 作为插值变量来获取 h(t) 的顶点属性,并得到合理的结果。我想知道为什么t来自 4D 空间可以在 3D 顶点属性中获得良好的插值结果?

0 投票
1 回答
407 浏览

c++ - 3D to 2D projection using view frustum has issues with translation

I need to create this software rasterizer that given the projection (P), view (V) and model (M) matrices, can create the 2D image of a point cloud (pc) from the given point of view in a bitmap format (a monochrome bitmap).

I've got the math down (and things seem to be working for the most part):

  1. Transform the point cloud's points pc' = (P x V x M) x pc (note that the point cloud is already in homogeneous system)
  2. For each point, divide all components by its w (while being careful to discard points that have w close to zero.
  3. Discard points that fall outside the view frustum (by extracting the frustum planes from the P using the method described here)
  4. Transform x and y coordinates of each point to screen coordinates using (x + 1) * imageWidth / 2 and (-y + 1) * imageHeight / 2 (to have the correct y coordinate).
  5. Map the resulting x and y coordinates to bitmap linear index using (int)y * imageWidth + (int)x (with bound-checking).

It seems that everything works fine: I get the exact bitmap as if I were rendering it with OpenGL, rotating the point cloud by an arbitrary quaternion still gives valid results.

Things are good until I have a translation component in matrix M! As soon as I have the slightest amount of translation, the image breaks: the point cloud gets heavily distorted (as if a non-affine transform has been applied to it). It doesn't matter along which direction the translation is applied, ANY translation messes everything up to the point that the point cloud is not recognizable anymore. At first I though my model matrix was transposed (resulting in a non-affine transformation), but that doesn't appear to be the case.

I could post some code if needed, but given the above overview, am I missing anything?? Is there any special consideration that may be needed??

0 投票
0 回答
406 浏览

rotation - 从 SVD 计算的齐次变换中获取旋转参数

我通过使用 eigen::umeyama 得到了一个齐次变换。根据文档(http://eigen.tuxfamily.org/dox/group__Geometry__Module.html),这个转换包括一个旋转,其中缩放已经被乘以,以及一个平移。我以某种方式更改了 eigen::umeyama 代码,使缩放 (c) 也单独返回。

现在我想分别比较 bei eigen::umeyama 找到的变换参数。由于我得到了缩放 (c) 并且可以轻松访问平移向量 (t),因此只有比率 (R) 不容易处理。

由于 R 是由 SVD 计算的,我不知道它是如何构造的以及如何访问旋转参数。

有没有办法从 R 计算不同轴的旋转角度?或者有什么方法可以直接将旋转矩阵(或其参数)与其他矩阵进行比较,通过使用不同的数据集找到?

0 投票
1 回答
375 浏览

matlab - 为什么我的 Matlab hgtransform 矩阵无效?

我试图通过设置'Matrix'matlab hgtransform 对象的属性来应用变换矩阵。变换矩阵如下:

这个特定的矩阵旨在表示翻译

(0.5, 0.5, 0)

并围绕 pi/6 的 Z 轴旋转。

当我尝试这样做时:

我得到错误:

为什么?

编辑

生成变换矩阵的代码。首先,您需要以下构造方向(旋转)矩阵的类:

然后做:

现在可能存在一个问题,旋转实际上不是我想要的,但据我所知,它仍然是一个有效的变换矩阵?

0 投票
2 回答
196 浏览

opengl - 如何将矩阵相乘以到达某个位置(T * R * S)

我有这张照片,我需要从右边的位置到左边的位置:在此处输入图像描述

好吧,在 OpenGL 中很简单,

但我试图了解它在“幕后”的实际运作方式。我要说一点,比如说左下角,然后从那里开始工作吗?

例如:

v1 = (0,1,0,1) 并且第一个矩阵是平移矩阵,所以我将它乘以 x = 6,y = 0,z = 0 的平移矩阵。得到一个新点,即 v2 = ( 6,1,0,1) 并从那里继续使用比例和旋转矩阵?

问题:我需要这样做的同质矩阵是什么?

我想它只是按该顺序乘以 TRS 矩阵,它会产生我需要的矩阵..

0 投票
2 回答
2385 浏览

opencv - OpenCv warp单应性元素的透视意义

我有一个关于投影变换矩阵中元素的含义的问题,例如在OpenCv warpPerspective.

我知道仿射变换的基本知识,但在这里我对射影变换更感兴趣,这意味着在下面显示的矩阵中,元素A31A32

我稍微玩了一下这些值,这意味着所有其他元素都有一个固定的数字。意义:

只有投影元素。

但是究竟是什么导致了元素 A31 和 A32 ?像 A13 和 A23 负责水平和垂直平移。

这两个元素有简单的解释吗?就像具有正值意味着 ....,具有负值意味着 .... 某某 像那样。

希望任何人都可以帮助我。

0 投票
1 回答
57 浏览

robotics - 在模拟机器人的局部坐标系中获取一个点

这是针对我目前正在研究的机器人模拟。如果您查看提供的图表,您将看到两个坐标框架。帧 A ,帧 B ; 你会找到一个点p

坐标系A是世界坐标系,坐标系B是我的机器人的局部坐标系(其中x轴是机器人的前进方向,按照惯例)。机器人能够在世界各地旋转和行驶。

我的目标是找到点p,用框架A表示,然后用框架B重新表示它。

我的设置

我用来实现这一点的标准方程如下:

wheret_xt_y组成 frame B到 frame A的平移变换。

然而,这里有一些复杂的情况阻止我得到我想要的结果:

由于机器人可以旋转(其默认姿势是朝向北的方向 - 并且旋转为 0 弧度),我不知道我将如何定义t_x以及t_y在上面的代码中。因为如果机器人具有平行于框架A的 y 轴的航向方向(即 x 轴) ,则平移向量将不同于机器人具有平行于框架A的 x 轴的航向方向的情况。

您会注意到从框架A到框架B的转换并不简单。我使用这个约定只是因为我正在实现这个模拟器,它使用这个约定作为它的图像帧。

任何帮助将不胜感激。提前致谢。

0 投票
1 回答
644 浏览

opencv - decomposeHomographyMat 结果的含义

我有一个经过校准的 RGB 相机,它在一个静态物体周围移动。我拍摄了两个后果镜头并计算了它们之间的单应性。

然后,使用 Camera Matrix 和 Homography,我调用cv::decomposeHomographyMat它为我提供了可能的旋转角度和平移。

假设第一对旋转和平移总是正确的,那么这些角度和平移是什么意思?这种转变的根源是什么?是关于相机的起源吗?是关于对象的起源吗?