【问题标题】:Plumb bob camera distortion in Three.jsThree.js 中的铅锤相机失真
【发布时间】:2020-12-06 23:25:58
【问题描述】:

我试图在 Three.js 中复制一个真实世界的相机,我将相机的失真指定为“铅锤”模型的参数。特别是我有PKRD指定here

如果我对所有内容都理解正确,我想设置 3 来进行从右侧的“X”到左上角的“输入图像”的翻译。我正在考虑的一种方法是制作我自己的 Three.js Camera,将projectionMatrix 设置为...涉及KD 的东西。这有意义吗?考虑到 KD 被指定为一维数组,长度分别为 9 和 5,我究竟会将它设置为什么。我有点迷失如何组合所有数字:(

我在this answer 中注意到,将直线渲染为弯曲需要一些复杂的事情,它们会在某些相机失真下(如鱼眼镜头)。如果这更复杂,我不需要它来达到我的目的。简单地渲染每个顶点就是正确的点就足够了。

【问题讨论】:

  • 什么是铅锤?
  • 在这种情况下,它是“失真模型”的名称。这里有一些解释:calib.io/blogs/knowledge-base/camera-models
  • 是的,创建自己的 Camera 类很有意义,而且工作量也不大。您可以考虑的另一件事是使用仅执行径向失真部分的后处理效果来处理您正在谈论的失真,因为它似乎只需要图像坐标(而不是需要 xyz 坐标)
  • @MicheleLambertucci 谢谢。我不熟悉后期处理效果,但我在寻找选项时确实注意到了它们。我开始认为我可能需要编写一些webgl代码来实现径向失真,我认为这意味着它会在这样的后处理效果吗?你知道这是否属实,还是可以用投影矩阵表示?还是有其他选择?
  • 后处理效果是应用于渲染图像的附加着色器通道。这在这种情况下特别有用,因为您想要实现的失真在“渲染空间”中起作用(它不需要任何有关深度的信息)。是的,我认为您可以使用简单的 GLSL 着色器在渲染图像上应用径向失真

标签: three.js


【解决方案1】:

本文档显示了相机矩阵的逐步推导(Matlab 参考)。

见:http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html

所以,是的。您可以使用此过程计算矩阵,并将真实世界的 3D 点映射到 2D 输出图像。

【讨论】:

  • 太棒了!我看过那个参考资料,但我不明白如何使用它来为 Three.js 相机创建一个 4x4 投影矩阵。你能帮忙回答一下吗?我看到他们定义为 KK 的“相机矩阵”,但那是 3x3,而 Three.js 使用 4x4 矩阵。此外,它的值都与“失真系数”无关,所以我不确定它怎么可能是我唯一需要的。
猜你喜欢
  • 2023-04-03
  • 2017-11-13
  • 1970-01-01
  • 2021-06-03
  • 2021-08-23
  • 2017-06-20
  • 2021-02-26
  • 1970-01-01
  • 2014-11-29
相关资源
最近更新 更多