问题标签 [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 投票
0 回答
833 浏览

android - OpenGL:模型视图和投影矩阵

我想使用 gluUnProject 进行 3D 拾取。它返回错误的值。我认为原因是 ModelView & Projection 矩阵生成不正确。为了获取它们,我使用 API 演示中的 MatrixGrabber、MatrixStack 和 MatrixTrackingGL 类:

无论我把相机放在哪里,Projection 和 ModelView 矩阵都是一样的:

模型视图

投影

一些代码:

非常感谢您的任何建议!

0 投票
0 回答
1038 浏览

opengl-es - webGL中的gluOrtho2D

更新:这段代码确实有效。我的错误是对glViewport; 这似乎是浏览器窗口锚定的,而不是 webGL 中的画布相关的,它把所有东西都推到了屏幕外。所以这个问题中的代码显示了如何为 WebGL 创建正确的正交投影:

webGL 没有gluOrtho2D. 我已经复制 - 并转置,因为 OpenGL 矩阵应该是 - 从glOrtho

然后我使用createOrtho2D(0,canvas.offsetWidth,canvas.offsetHeight,0).

例如,createOrtho2D(0,1024,768,0)=

我上传这个gl.uniformMatrix4fv(this.program.mvp,false,mvp);并在顶点着色器中应用它gl_Position = mvp * vec4(vertex,z,1.0);

但是,这不起作用:

  • 点 10,10 在屏幕上不可见
  • 点 10,100 就在屏幕顶部

我做错了什么?

0 投票
0 回答
339 浏览

opencv - 帧间单应性错误

我正在使用帧间单应性来计算场景单应性并将图形可视化为由纯旋转和缩放相机捕获的视频。最终场景单应性(Hscene)计算为:Hscene = Hinterframe * Hscene;通过使用 OpenCV。我知道部分帧间单应性错误会导致累积错误。但是我有一些视频序列,其中出现了另一个错误。此错误还表现为可视化图形的漂移。当图形投影到图像边框时,漂移更加明显。第一个想法是镜头失真,但视频不包含任何失真。当我计算从初始帧到目标帧的直接单应性时,投影也没有漂移。

您知道是什么原因导致这种漂移以及如何消除它吗?

[EDITED 5.9.2012] 原因是镜头失真。可以从帧间特征点对应关系中估计它吗?

0 投票
1 回答
271 浏览

3d - 将相机与矩形对齐

我们正在尝试对齐我们的相机,以便看到尽可能接近的矩形(平行六面体的面,因为我们在 3D 中)。此处考虑的视口的纵横比与要对齐的矩形不匹配。

我们所做的:

在我们的场景中就是这个矩形。摄像头位于其前方。下面是摄像头的配置:

float Fov = PI/4;

float AspectRatio = device.Viewport.AspectRatio;

Vector3 Target设置为矩形的中心。

Vector3 Position是我们正在寻找的价值。

然后初始化相机: oat width = (float)GraphicsDevice.Viewport.Width; 浮动高度 = (float)GraphicsDevice.Viewport.Height;

VS 解决方案

更精确:为了创建视图,我们使用Matrix.CreateLookAt和 进行投影Matrix.CreatePerspectiveFieldOfView。我们也不确定这些是否是完美的选择,但听起来很像。

我们得到什么:

在一些基本的三角函数之后,我们得到了一个在高度 > 宽度时工作的相机位置。作为: 在此处输入图像描述 在此处输入图像描述

但是当宽度>高度时它不会: 在此处输入图像描述

你...

...知道我们做错了什么吗?您有其他或更好的方法来实现这一目标吗?

0 投票
0 回答
1888 浏览

opencv - 三角测量,来自 calibrateCameras()s 的 tvec 和 rvec

也很难找到我问题的确切答案,这就是为什么我想在这里问它,即使在其他地方解释得不好。我尝试在代码中添加解决方案,以便每个人都可以返回我的结果。但首先必须解决它。

它与 OpenCV 进行三角测量cv::triangulatePoints()。我知道它的记录很差,但可以在 willowgarage(现在)找到它(搜索文档 2.4.9)

  1. 我用于棋盘校准 22 个不同角度的立体图像(两个凸轮)等。为稳定的内在参数。
  2. 得到了棋盘角cv::findChessboardCorners()
  3. 可选的 -cv::cornerSubPix()
  4. 在所有棋盘点上创建 objectPoints cv::Point3f( k*m_squareSize, j*m_squareSize,0.0f)(k - 棋盘宽度,j 棋盘高度,反之亦然,squareSize = 真实世界大小)
  5. 做2.-4。对于每张图片
  6. 把所有东西都放在这里:cv::calibrateCamera(object_points1, image_points1, image.size(), intrinsic1, distCoeffs1, rvecs1, tvecs1);这个功能就像我想要的那样完美,我也在用第二个相机图像来做。经过长时间的研究,我发现了这一点:
  7. cv::Mat R12 = R2*R1.t(); cv::Mat T12 = T2-R*T1;这是针对 cam1 和 cam2 之间的关系 (R|T)。这工作得很好,我已经用cv::stereoCalibrate().
  8. 在这一步,我想使用我的 tvecs 和 rvecs 重新投影 2D 太 3D 和 3D 太 2D。最后我完成了cv::projectPoints(object_points1[i],rvecs1[i],tvecs1[i],intrinsic1, distCoeffs1, imagePoints1);-> 工作正常 - 我从 2Pixel 差异中得到了 48 * 2 * 22 点,最多只有一个点。但是知道我不能从 2d 到 3D 的三角测量走得更远。我有!太用了cv::triangulatePoints()。我怎么得到这个工作???

到目前为止我所做的尝试没有一个好的结果:您首先需要投影矩阵 P1 和 P2。

抱歉,这看起来很重,但它只有旋转矩阵 (rodrigues(rvecs1,R1)) 和平移向量 tvecs1。这是错的吗?我必须反转旋转矩阵 R1 吗?

下一步:您需要左右图像中的 imagePoints(Corners)。这些 imagePoints 是我从 findChessboardCorners() 获得的未失真角。

使用cv::triangulatePoints(P1, P2, cv::Mat(undisPt_set1).reshape(1,2), cv::Mat(undisPt_set2).reshape(1,2), point3d);point3d 后是一个“4D”点,其中第四个参数也被convertPointsHomogeneous(point3d.reshape(4, 1), point3dCam1);

这是我到目前为止所做的 - 但它不起作用。有人知道我做错了什么吗?最后一步有什么错误的想法吗?我已经尝试过数学,但我不确定投影矩阵 P1 和 P2。我知道它的构建类似于 [R|t],但它是我的 tvecs 和 tvecs 吗?它是转置的还是倒置的?任何帮助都会很好,但请帮助我提供一些代码或明确的步骤 - 而不是更多我应该阅读和思考的链接,我真的做了研究,我有学习 OpenCV 书、OpenCV2 食谱,还有 Hartley 和 Zisserman 在这里在我前面。但我无法做到。

0 投票
3 回答
4146 浏览

projection - 将 2D 点反投影到 3D Plucker 线

我正在尝试构建一个跟踪器(手跟踪个人项目),因此我需要使用 Plucker 坐标将 2d 点反向投影到 3d 线。(如光线追踪)

作为输入,我有一个点的二维坐标和投影矩阵。

网络上有关采摘器坐标的信息概述了它们为何有用,但没有论文分析性地描述上述过程。(他们只是提到他们将项目反向投影到采摘线,没有任何进一步的描述)

有人可以指出我正确的方向吗?

0 投票
1 回答
887 浏览

opencv - 如何构建正确的投影矩阵?

有人可以告诉我 triangulatePoints 的投影矩阵是什么样的吗?这并不容易,我找到了几个可能的投影矩阵,但现在无法弄清楚哪一个是正确的。

如果我有来自 Robust Matcher/或其他匹配方法的 KeyPoints,那么我会从 E 获得旋转和平移。这将导致像 P0=[I|T] 和 P1=[R|T] 这样的矩阵,其中 R 和 T 是提取的,没有改变价值观。我对吗?当我有一个使用 calibrateCamera() (显式不是 stereoCalibrate !!)或使用 SolvePnP 的立体钻机时,我从 camera1 和 camera2 获得 R 和 T。这些矩阵看起来像这样吗?:P0=[R0|t0] and P1=[R1|t1] or P0=[R0|R0*t0] and P1=[R1|R1*t1] 还是别的什么?

我发现了一些关于“纠正”的东西,你知道我在获得关键点之前是否有过纠正,或者 undistortPoints 是 tiangulatePoints() 所需的唯一需要的函数吗?

感谢帮助

0 投票
1 回答
874 浏览

svd - SVD 矩阵调节 - 如何从原始空间投影到条件空间?

一种经典的数据去噪方法是创建一个矩阵,执行 SVD,将小的奇异值设置为零,然后将分解的矩阵部分相乘以创建一个新矩阵。这是“调节”或“规范化”输入数据的一种方式。

给定原始矩阵空间中的一个向量,如何将该向量投影到新的条件空间中?

0 投票
2 回答
906 浏览

c - 正确计算 OpenGL 使用的模型和视图矩阵?

我在 GL 3.2 中遇到了一些矩阵问题。我如何(最好以矩阵表示法)生成模型和视图矩阵?如何设置我的模型/视图矩阵?我已经有一个投影矩阵;它被定义为:

我知道这个正交矩阵必须乘以模型和视图矩阵,并且必须乘以点。如何设置这些矩阵?

编辑:我不介意它们是否连接成一个(模型视图)。

0 投票
1 回答
261 浏览

ios - 通过修改 OpenGL 中的 GL_PROJECTION 来补偿屏幕旋转

是否可以在 OpenGL 中设置 GL_PROJECTION 来补偿屏幕旋转?

我认为这有很多应用,例如在增强现实或立体视图中。

特别是,我想在移动设备倾斜时对视角进行“假”改变。

此效果如图所示在此处输入图像描述