【问题标题】:Cubemap from panoramic horizontally wrappable image来自全景水平可折叠图像的立方体贴图
【发布时间】:2019-06-19 15:09:36
【问题描述】:

我正在尝试编写一种算法,以从上面的水平可折叠全景图像生成“天花板面板”。图像 1 到 4 是立方体墙壁的直线切割,但天花板会更复杂,因为我认为它需要从部分 5a 到 5d 合成。有谁知道伪代码的解决方案吗?

我的猜测是我们需要遍历天花板瓷砖的坐标 即

for y=0 to height
for x=0 to width
     colorofsomecoordinateonoriginalimage = some function (poloar coords?)
     set pixel(x,y) = colorofsomecoordinateonoriginalimage
next
next

【问题讨论】:

  • 这首先取决于全景图的生成方式。您知道使用了哪种投影吗?
  • 不是真的,如果我们假设只是从固定点拍摄并沿 Y 轴旋转相机的一系列照片呢?

标签: opengl textures 3d


【解决方案1】:

嗯...我记得有一次在研究生院的计算机视觉课上做过类似的事情。这并非不可能,但需要做很多工作。一种方法是降低整个产品的质量。这是最简单的起点。一旦你对它进行了足够的降级(取决于你需要拉伸多少边缘),你就可以开始对图像应用非线性变换。这可能最好通过逐步切割圆柱体的各个部分然后应用用于制作平面地图(如墨卡托或 CADRG 或其他东西)的古老投影之一来近似完成......但你必须记住插入像素,请确保您至少对像素进行平均以近似。这是我能想到的最好的了。

【讨论】:

    【解决方案2】:

    您无法仅通过从一个位置拍摄照片并拼接它们来生成全景图。好吧,您可以使用单个水平设置,但它看起来很难看(通常,您缝合超过 4 张照片以避免边缘变形)。 在这里,您在 y 方向上拥有更多数据,这意味着更多图片,以及某种花哨的投影来生成最终图像。

    如果您仔细查看全景图,您会注意到该区域在阳光下的边界不是直的。那是因为您的全景图投影在圆柱体上,而不是立方体上。所以我认为 1/2/3/4 看起来不会直接映射到立方体。

    归根结底,你真的不能将这 8 个块视为从一个固定点拍摄的 8 张照片(如果你需要说服力,请尝试自己拍摄 8 张这样的照片并尝试将它们拼接在一起。你会看到多么有趣是上排,下排虽然容易,但在缝合区域上看起来有多丑)。

    现在,您需要立方体贴图的原因极大地改变了您的选择。如果您只是在寻找一个立方体贴图来实现廉价的环境映射效果,那么最简单的方法是找到一个任意函数,将边缘映射到您想要的位置,并简单地在它们之间进行线性插值。这是完全错误的投影,但应该给出一个看起来足够好的图片来达到预期的目标。

    如果您正在寻找更准确的东西,那么您需要知道投影是如何生成的,以便您可以在将其重新投影到立方体上之前取消投影。

    话虽如此,拍摄立方体贴图也比处理全景图生成它们要容易得多,但这对您来说可能是不可能的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      相关资源
      最近更新 更多