问题标签 [projection-matrix]

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 回答
452 浏览

opengl - OpenGL 3D 转换:z 纵横比

我在 OpenGL (webgl) 中做 3D 透视投影,自己用统一矩阵做。一切正常,但我的纵横比为 3:2(600 像素 x 400 像素),这会扭曲所有渲染的几何图形。

在 2D 中,我曾经通过将 x 和 y 分别除以 1 / width 和 1 / height 来修复模型矩阵中的这个问题。

现在我也有 z 担心,我很不知道如何/在哪里转换 z 以不扭曲我的 3:2 纵横比。

模型矩阵似乎没有提供任何机会来做到这一点,我不知道在投影矩阵中在哪里/做什么。

编辑:投影矩阵:

列主要顺序

编辑 2:n < 1 上的奇怪扭曲 图像

0 投票
0 回答
127 浏览

3d - 将 4 个跟踪点转换为 3D 表示

我已经构建了这个用 LED 构建的小玩意形状。这种漂亮的漫射光来自聚苯乙烯泡沫塑料球。

小发明
(来源:rapidus.net

然后,我做了一个窗口 c++ 文件来启动一个连接的 Kinect 来检测光球并将跟踪器放在

屏幕(使用 sdl)。如果程序未检测到 Kinect,它会尝试启动您的网络摄像头并跟踪灯光

球(使用 OpenCV)。

动感:

kinect
(来源:rapidus.net

摄像头:

摄像头
(来源:rapidus.net

所以我最终得到了 4 个坐标 (x,y),可以连续输入给我。

我想从这些坐标创建一个 3D 表示并获得一个向量。我会进行重置定位,然后比较该位置的旋转和平移,以评估 Gizmo 位置的变化。

我们从维基百科得知 Kinect 的低分辨率为 640x480,传感器具有水平 57° 和垂直 43° 的视场角。所以我首先会坚持使用 kinect,因为我们肯定知道它的参数。

我试图了解如何使用这些线程来做到这一点,但坦率地说,我并没有从中得到太多。 如何将 2D 点反向投影到 3D?

所以,如果有人有关于如何开始应对这一挑战的基本信息,我很想听听。我对矩阵和 3D 的东西(点积、叉积)有所了解,但我不是数学家。请尽可能保持简单。谢谢。

0 投票
1 回答
860 浏览

directx - 透视投影似乎是错误的,模型的较近部分显得更小,反之亦然

我正在尝试 D3D11 并努力正确渲染模型。

这是我的问题;虽然我的世界和视角转换似乎是正确的,但
我的视角转换似乎是错误的。
当我第一次渲染模型时,感觉有些不对劲,所以我尝试旋转模型以查看它是什么。
然后我注意到,模型靠近相机的部分看起来更小,而更远的部分看起来更大。

如果它是相关的,我正在使用 assimp 来加载我的模型,这就是我的做法。

这就是我构建投影矩阵的方式。

我摆弄了 XMMatrixPerspectiveFovLH 的 nearZ 和 farZ 参数。
我尝试每帧逐渐增加farZ,然后意识到随着值的增加,远裁剪平面越来越靠近相机,这与我想象的完全相反。

在顶点着色器中,这就是我对顶点位置所做的事情。这是非常基本的。

模型在位置、缩放、旋转和视图位置方面正确渲染。
所以我假设世界和视图变换很好,问题在于投影矩阵。
总而言之,我认为投影顶点的 Z 值以某种方式“翻转”。

我用谷歌搜索了很多次都无济于事。

如果有人能指出我可能做错了什么,将不胜感激。
如果您需要查看我的一些代码来提供帮助,请告诉我。

0 投票
1 回答
273 浏览

math - 3D:无论相机的变焦距如何,在屏幕上绘制的水平线都保持在相同的高度

我有这个奇怪的用例。

这些变量是已知的:

  • 相机变焦(或 fov)

  • 相机绕 Y 轴和 Z 轴旋转(方向)= 0

现在,我希望在屏幕上以特定的2D 高度“YY”绘制地平线(地平线位置)。相机 X 轴旋转必须是什么才能在“YY”处绘制地平线?= (0,0,Infinite)

你可能会问我为什么需要这个:好吧,当我改变相机变焦时,地平线会改变屏幕上的位置(在所有情况下,除了 X 轴旋转时= 0)。我需要能够更改相机变焦并保持地平线不变(相对于其 2D 位置)。AFAIK,这只能通过相应地改变 X 轴旋转来实现。

0 投票
1 回答
2550 浏览

c++ - 来自单应性的投影矩阵

我正在使用OpenCV 3.0stereoRectifyUncalibrated()下的方法进行立体视觉。

我通过以下步骤校准我的系统:

  1. 检测和匹配来自 2 个摄像头的图像之间的 SURF 特征点
  2. findFundamentalMat()与配对申请
  3. 用 得到整流同应性stereoRectifyUncalibrated()

对于每个相机,我计算一个旋转矩阵如下:

要计算 3D 点,我需要获取投影矩阵,但我不知道如何估计平移向量。

我试过decomposeHomographyMat()这个解决方案https://stackoverflow.com/a/10781165/3653104但旋转矩阵与我用 R1 得到的不同。

当我使用 R1/R2(使用initUndistortRectifyMap()后跟remap())检查校正后的图像时,结果似乎正确(我使用极线检查)。

我对视力的薄弱知识有点迷茫。因此,如果有人可以向我解释。谢谢 :)

0 投票
2 回答
480 浏览

ios - OpenGL ES屏幕投影矩阵和相机投影矩阵

我有一个从增强现实应用程序中的相机校准派生的投影矩阵,只要屏幕纵横比与相机图像纵横比匹配,一切都很好。当相机图像与屏幕边缘不匹配时,您将在跟踪中出现失真。

问题场景:

  • iPad 上的 1280x720 视频
  • iPhone 5S 上的 640x480 视频。

工作场景:

  • iPad 上的 640x480 视频
  • iPhone 5S 上的 1280x720 视频。

目标:我想以一般方式处理此屏幕/相机纵横比不匹配。

信箱格式示例

存在这个问题是因为视图在屏幕的纵横比中具有标准化的设备坐标(iPad 为 4:3),而投影矩阵具有相机图像的纵横比(720p 为 16:9)。背景图像需要与投影矩阵匹配,否则增强现实的幻觉会失败,因此如果我想在“适合”和“填充”之间切换,我需要更改投影矩阵以匹配图像大小。

注意:我希望在没有 OpenGL 特定解决方案的情况下处理这个问题。所以我正在寻找一个涉及操纵投影矩阵的更一般的数学答案。

0 投票
1 回答
435 浏览

opengl-es - webgl中的矩阵和投影

在以上几行中,我了解到正在上传投影矩阵和模型视图矩阵。我想知道这背后的数学原理。

我有一些 3d 顶点(overlayvertices),后来以这种方式传递:

其中 overlayvertices[i] 是一个 4*1 数组,其中 x,y,z,1

最终绘图发生在特定相机的框架上,根据该框架确定模型视图和投影矩阵。我想手动获取相机帧中的转换顶点。即,(x,y,1)。我稍后会下载每一帧中的数据,因此 x,y 应该是像素坐标。由于这发生在 webgl 内部,因此我无法检索此信息。

0 投票
1 回答
594 浏览

matlab - MATLAB 的estimateUncalibratedRectification 用数学方法表示什么?它具体计算什么?

MATLAB 的estimateUncalibratedRectification在数学/几何方面有什么作用?

它究竟计算什么?

据我了解,如果相机参数未知,则只能从两个图像计算基本矩阵,而不是基本矩阵。

因此,据我了解,estimateUncalibratedRectification的结果对于某种变换应该是模棱两可的,T因为基本矩阵(如果相机的内在参数未知,则可以从两个图像中计算出来)对于任意投影变换来说是模棱两可的.

它是否正确 ?

我的猜测是estimateUncalibratedRectification计算一个射影变换P1image1另一个射影变换P2image2这样当在相应的图像上使用这两个变换(P1P2)时,结果图像(R1R2)将在相应的核线将被校正的意义上位于同一行中,如下图所示。

在此处输入图像描述

我的问题是:这个结果有多模棱两可?我的感觉是,由此产生的转换对于某些转换来说是模棱两可的,P1但我真的不明白这可能是什么。P2TT

有人可以解释一下estimateUncalibratedRectification概念上/数学上/几何上的工作原理,并告诉什么T是可能的吗?

换句话说,当应用于和时将产生图像对的变换是什么 ,它将具有与 和 相同的校正属性,即对应的极线出现在 和 中的匹配行中,就像它们在和中一样?TR1R2TR1TR2R1R2TR1TR2R1R2

这是什么T?有这样的T吗?

PS .:我estimateUncalibratedRectification.m在发布这个问题之前已经阅读了代码,但这让我变得不明智。

0 投票
1 回答
732 浏览

image-processing - 单应性和射影变换

我正在尝试编写一个可以进行投影变换的代码,但有超过 4 个关键点。我发现这个有用的指南,但它使用 4 个参考点 https://math.stackexchange.com/questions/296794/finding-the-transform-matrix-from-4-projected-points-with-javascript

我知道matlab使用了一个函数tcp2form来处理这个问题,但到目前为止我还没有找到方法。

任何人都可以给我一些指导,如何做到这一点?我可以使用(最小二乘法)求解方程,但我被卡住了,因为我有一个大于 3*3 的矩阵并且我不能乘以齐次坐标。

谢谢

0 投票
1 回答
4223 浏览

opencv - 将一个摄像机视图中的 2D 点投影到同一场景的另一摄像机视图中的相应 2D 点

我在带有两个摄像头的多视图场景中使用 C++ 中的 open cv。我有两个相机的内在和外在参数。

我想将视图 1 中的 (X,Y) 点映射到第二个视图中的同一点。我有点不确定我应该如何使用内在和外在矩阵来将点转换为 3D 世界,并最终在视图 2 中得到新的 2D 点。