问题标签 [reverseprojection]

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 投票
13 回答
51135 浏览

3d - 如何将 2D 点反向投影到 3D?

我在屏幕空间中有 4 个 2D 点,我需要将它们反向投影回 3D 空间。我知道这 4 个点中的每一个都是 3D 旋转刚性矩形的一个角,并且我知道矩形的大小。如何从中获得 3D 坐标?

我没有使用任何特定的 API,也没有现有的投影矩阵。我只是在寻找基本的数学来做到这一点。当然没有足够的数据将单个 2D 点转换为 3D 没有其他参考,但我想如果你有 4 个点,你就会知道它们在同一平面上彼此成直角,而且你知道它们之间的距离,你应该能够从那里弄清楚。不幸的是,我无法完全弄清楚如何。

这可能属于摄影测量的范畴,但谷歌搜索并没有让我找到任何有用的信息。

0 投票
2 回答
6252 浏览

3d - 将 2D 点反向投影到 3D

假设我们有一个 3d 空间,上面有一个平面,上面有一个任意方程: ax+by+cz+d=0 现在假设我们在该平面上选择 3 个随机点: (x0,y0,z0) (x1,y1,z1 ) (x1,y1,z1)

现在我对这架飞机有不同的观点(相机)。我的意思是我有一个不同的相机,可以从不同的角度看这架飞机。从该相机的角度来看,这些点具有不同的位置。例如 (x0,y0,z0) 将是 (x0',y0') 并且 (x1,y1,z1) 将是 (x1',y1') 并且 (x2,y2,z2) 将是 (x2',y2 ') 从新相机的角度来看。

所以这是我的一个小难题!我想从新相机的角度选择一个点,例如(X,Y),并告诉它在那个平面上的位置。我所知道的是 3d 空间上的 3 个点及其位置以及它们在新相机视图上的投影位置。


你知道平面方程的系数和相机位置(连同投影),还是你只有六个点?- 尼尔斯

我知道前 3 个点的位置。因此我们可以计算平面的系数。所以我们从(0,0,0)的角度确切地知道飞机的位置。然后我们有了只能看到点的相机!所以相机看到的唯一东西是 3 个点,而且它知道它们在 3d 空间中的位置(并且肯定它们在 2d 相机视图平面上的位置)。毕竟我想看看相机视图,选择一个点(例如(x1,y1))并告诉那个点在那个平面上的位置。(当然这个(X,Y,Z)点应该适合平面方程)。我也对相机位置一无所知。

0 投票
1 回答
6512 浏览

math - 反向透视投影

我正在使用

将屏幕空间坐标转换为世界空间坐标。我以为

将转换为远平面上的一个点,而

转换为近平面上的一个点,并连接线我可以查询与线相交的视锥体中的所有对象。转换后,我将结果点除以它们各自的 .w 分量。这适用于远平面,但近平面上的点不知何故被转换为世界空间原点。

我认为这与我输入逆投影的 1 的 w 分量有关,因为通常它在投影之前是 1,而不是之后,我正在做逆投影。我究竟做错了什么?

0 投票
5 回答
2368 浏览

math - 逆 3D(三角形)投影

我有一个似乎无法解决的 3D 数学问题。

我有3分的数据。数据是平面上的(2D)坐标,漂浮在 3D 空间的某个位置。我也知道投影的(2D)坐标。这将产生以下数据数组:

其中法线(x1 等)坐标代表平面上的坐标,另一个(px1 等)代表投影坐标。

我想做的是投影一个的二维坐标([x4,y4])。

.

到目前为止我尝试了什么:

当然,你需要一只眼睛来进行投影,所以我将它设置为 [xe,ye,-1]。xe 和 ye 是已知的。(这是照片参考,所以我只是把眼睛放在照片的中心。)

在眼睛下方,我放置了投影面(z=0)。这给出了以下投影坐标:

我不能对飞机上的坐标做同样的事情,因为我对那架飞机一无所知。

我还认为我可以对从眼睛穿过投影坐标的线条进行参数化公式。对于 line1,这将是:

我也知道 3D 中点之间的距离。这与 2D 中的相同。这意味着 point1 和 point2 之间的距离将是 sqrt((x1-x2)^2+(y1-y2)^2)。

我也随时知道线路(线路 1 和线路 2)之间的距离。即 sqrt((line1x-line2x)^2+(line1y-line2y)^2+(line1z-line2z)^2)。

但是,我真的不知道如何从这里走……或者甚至不知道这是否是正确的路线。

.

我希望你明白我想要做什么,并且你能帮助我。

提前致谢!

0 投票
10 回答
17819 浏览

image-processing - 透视变形矩形的比例

给定一张被透视扭曲的矩形的 2d 图片:

在此处输入图像描述

我知道这个形状最初是一个矩形,但我不知道它的原始大小。

如果我知道这张图片中各个角的像素坐标,如何计算出原来的比例,即矩形的商(宽/高)?

(背景:目标是自动去扭曲矩形文档的照片,边缘检测可能会用霍夫变换完成)

更新:

关于是否有可能根据给出的信息确定宽度:高度比,已经进行了一些讨论。我天真的想法是它一定是可能的,因为我想不出办法将例如一个 1:4 的矩形投影到上面描述的四边形上。该比率显然接近 1:1,因此应该有一种数学方法来确定它。然而,除了我的直觉猜测之外,我没有证据证明这一点。

我还没有完全理解下面提出的论点,但我认为必须有一些隐含的假设,即我们在这里遗漏了,并且对此有不同的解释。

但是,经过几个小时的搜索,我终于找到了一些与该问题相关的论文。我正在努力理解那里使用的数学,到目前为止没有成功。特别是第一篇论文似乎准确地讨论了我想要做什么,不幸的是没有代码示例和非常密集的数学。

  • 张正友,何立伟,“白板扫描与图像增强” http://research.microsoft.com/en-us/um/people/zhang/papers/tr03-39.pdf p.11

    “由于透视失真,矩形的图像看起来像是一个四边形。但是,由于我们知道它是空间中的矩形,因此我们能够估计相机的焦距和矩形的纵横比。”

  • ROBERT M. HARALICK “从矩形的透视投影确定相机参数” http://portal.acm.org/citation.cfm?id=87146

    “我们展示了如何使用 3D 空间中未知大小和位置的矩形的 2D 透视投影来确定相对于矩形平面的相机视角参数。”

0 投票
1 回答
457 浏览

image-processing - 需要一些帮助来理解公式

这是针孔相机型号:

在此处输入图像描述

(我不明白,是不是有[R t],还是(R,t)) 这个公式是把点的3d坐标转换成针孔相机得到的一张图片的2d坐标。

投影图:

在此处输入图像描述

波浪号在向量上,表示将“1”作为元素添加到该向量中。M是该点在3d空间中的坐标,m是该点在图片中的坐标,f是相机的焦距,s是像素长宽比。(R, t) 描述了描述矩形的世界坐标系和相机坐标系之间的 3D 变换。

我不清楚 A 之后的 [R t](或 (R, t))是什么意思,以及如何通过将角的 3D 坐标(像素纵横比 = 1)插入公式中得到:

在此处输入图像描述

“t”字母是什么意思?

我在这里找到了这个公式(第 13 页)。

0 投票
1 回答
1902 浏览

language-agnostic - 从 2D 图像平面计算 3D 坐标,考虑透视,无需直接访问视图/投影矩阵

第一次在堆栈交换上提出问题,希望这是正确的地方。

我似乎无法为我的情况开发足够接近的近似算法,因为我在 3D 数学方面并不是最好的。

我有一个 3d 环境,我可以在其中访问任何对象(包括我的相机)的位置和旋转,以及从任意两个点运行跟踪线以获得点和碰撞点之间的距离。我也有我的相机的视野。但是,我没有任何形式的访问世界/视图/投影矩阵的权限。

我还有一组 2d 图像,它们基本上是一组来自相机的 3d 环境的屏幕截图,每个集合都是从相同的点和角度拍摄的,平均集合是从大约 60 度角的平均角度拍摄的地平线。

我已经能够使用“注册点实体”,它可以放置在代表 2d 图像角落的 3d 世界中,然后当在 2d 图像上拾取一个点时,它被读取为坐标范围为 0-1,然后在注册点的 3d 位置之间进行插值。这似乎效果很好,但前提是图像是一个完美的自上而下的角度。当相机倾斜并引入另一个维度的透视时,结果变得更加不准确,因为没有补偿这个透视。

我不需要能够计算一个点的高度,比如摩天大楼上的一个窗口,但至少是图像平面底部的坐标,或者如果我从图像中延伸出一条线指定的图像空间点如果没有任何阻碍,我至少需要线与地面相交的点。

我发现的所有关于这方面的材料都说只是使用世界/视图/投影矩阵来解投影点,我发现它本身很简单,除了我无法访问这些矩阵,只是我可以在屏幕截图时收集的数据和其他算法使用我根本不掌握的复杂数学。

这样做的一个最终目标是能够在用户单击图像的 3d 环境中放置标记,而不能从用户的视图中运行简单的反投影。

任何帮助将不胜感激,谢谢。

编辑: Herp derp,虽然由于我的情况的限制,我这样做的实现有点奇怪,但解决方案基本上归结为 ananthonline 关于简单地重新计算视图/投影矩阵的答案。

0 投票
3 回答
2833 浏览

c# - 射线与 XNA 中的 3D 四边形相交?

所以我成功地制作了一条代表未投影到世界中的鼠标的射线,现在我需要检查该射线是否可以与四边形对象相交,这是我用来获取射线的代码:

同样,这是我的四边形结构,我用它在 3d 空间中绘制“立方体世界”。public struct Quad { public Vector3 Origin; 公共 Vector3 左上角;公共 Vector3 左下;公共 Vector3 UpperRight; 公共 Vector3 右下角;公共 Vector3 正常;公共 Vector3 向上;公共 Vector3 左;

我发现射线类有一个方法 intersects() 它将平面结构作为参数,平面结构在构造函数中采用法线和距原点的距离,但我的平面有位置和法线,而不仅仅是距原点的距离,所以我无法转换它们。如何检测我的光线是否与我的四边形结构相交?

编辑:我意识到我不能使用平面结构,因为它不是有限大小并且不包括角,就像我的四边形一样。我现在需要找到一种方法来检测这条射线是否与我创建的四边形相交...

感谢阅读,我意识到这个问题有点冗长,在此先感谢。

0 投票
0 回答
1193 浏览

3d - 如何将平面上的 2D 点反向投影为 3D?

所以,我有一架飞机P。

我得到了平面 P 法线向量 n(n1, n2, n3) 的 3 个坐标,并且得到了属于 P 的给定点 A(a1, a2, a3) 的 3 个坐标。因此,我可以很容易地得到平面方程。

现在,如果A在平面上的3D投影给出坐标(x,y),我想要的是找到B点(属于平面)的3D坐标,假设B在平面上的3D投影给出坐标 (x + x', y + y'). 当然,x' 和 y' 是已知的。

我相信这一定不难,但我找不到解决方案..

0 投票
1 回答
1251 浏览

math - 如何从 2D 坐标计算 3D 点?

我最近遇到了一个涉及 DirectX11 和 3D 坐标计算的困境。我希望将鼠标坐标转换为这个 3D 坐标。在将多边形模型(默认立方体等)或网格对象插入空白空间时,我希望它的行为类似于 Maya 或 Unity。我需要什么步骤和数学来计算这个坐标?