2

我正在寻找一种通用算法来计算从原始图像和他的 b/w 深度图开始的红色/cian 浮雕(例如:http ://www.swell3d.com/2008/07/turn-2d-painting- into-3d-anagl.html )

例如,在 Photoshop 中使用了该算法,但我找不到可读的解释来重现它。

谢谢

4

3 回答 3

4

经过一些研究,我找到了我想要的东西。首先,我阅读了一些 Photoshop/Gimp 教程,这些教程描述了如何从两个输入中制作立体图:图像及其灰度深度图。该过程的核心是使用“置换工具”和深度图作为置换图。几个 youtube 教程之一:http ://www.youtube.com/watch?v=gfYMe_vYhu4

所以,我通过查看这个http://docs.gimp.org/en/plug-in-displace.html并直接查看工具的源代码,获取了一些关于 Gimp 的 Displace Tool 的文档(该方法与Asgeir 提出的一项)。

这让我们可以通过查看深度图从输入中生成两个立体图像。通过阅读此页面http://3dtv.at/Knowhow/AnaglyphComparison_en.aspx计算每个图像的红色和青色(“优化”矩阵是最好的)。

然后,两个图像的总和将产生最终的立体图。谢谢大家。

于 2011-11-14T14:08:47.630 回答
3

涉及两种算法。第一个使用原始图像和深度图来生成左右图像。第二个将这些图像组合成一个红青色立体图。

有几种方法可以完成第一部分。一种是将原始图像和纹理映射到位于 XY 平面上的精细网格上。然后根据深度图中的相应值调整网格中每个顶点的 Z 值。您基本上已经创建了带纹理的浅浮雕。然后,您使用 3D 渲染算法从水平偏移少量的两个有利位置渲染图像(主要是从人的左右眼观看浅浮雕的有利位置)。

可能有一种方法可以直接左右移动像素,这是我上面描述的一个很好的快速近似值。

获得左右图像后,一张通过青色滤镜,一张通过红色滤镜。如果您有 RGB 源,这就像从一张图像中获取红色通道并将其与另一张图像中的绿色和蓝色通道组合一样简单。

浮雕最适合使用柔和的颜色。如果你有很强的初选,它看起来不会那么好。在开始之前,您可以使用一种算法来降低原始图像的颜色饱和度。

于 2011-10-10T16:17:27.407 回答
1

根据您提供的链接中的描述,我认为它类似于

for each pixel in depthmap
    x_offset = (depthmap[x][y] / 255.0f) * MAX_PIXEL_OFFSET * DIRECTION
    output[x + x_offset][y] = color_buffer[x][y]

blend output with color_buffer

其中 MAX_PIXEL_OFFSET 是像素的最大偏移,DIRECTION 是一种颜色的 -1 和另一种颜色的 1。这是假设深度缓冲区是每个像素一个字节,范围 [0..255] 并且深度缓冲区中的 0 表示最大距离。

于 2011-10-11T08:29:26.183 回答