随机点立体图的抗锯齿

Anti-aliasing of random dot stereograms

我最近完成了一些 Python (2.7) 基于 this paper 生成随机点立体图的代码。输出相当好,但我注意到,即使在深度图中有平滑的梯度,输出的立体图也没有这些平滑的梯度,而是具有不同的深度级别。我相信这是由于生成图像时选择的 DPI 造成的。虽然可以通过增加 DPI 来增加深度的细节,但随着会聚点变得更加难以达到,这变得不切实际。

这里有两个例子。第一个是 75 DPI,第二个是 175 DPI。在 75 DPI 图像上,可以看到明显的 "triangles" 深度。在 175 DPI 的图像中,这些不太明显,但图像底部的引导点距离更远,因此观看 3D 图像更加困难。

我想修改我当前的代码以消除 3D 图像的锯齿,以便即使在较低的 DPI 下也能平滑渐变。我尝试在深度图和图案上使用 SSAA 并生成立体图,然后使用抗锯齿过滤器再次减小图像尺寸。然而,这似乎只包含图像左侧的立体图。例如,如果我将图像放大 4 倍,则立体图仅限于图像的左手四分之一。其余的只是随机噪音,无法查看。我将如何对隐藏在立体图中的图像进行抗锯齿处理?我的代码与 the paper 中描述的算法几乎相同,因此基于该算法的抗锯齿算法将是完美的。

我遇到的问题的解决方案是立体图包含在图像的左侧,这是由于没有扩展 same 数组以反映更大的深度图造成的。这导致超出深度图原始长度的所有内容都是随机生成的噪声。

解决这个问题后,又出现了第二个问题,3D 图像因抗锯齿而变形,导致比解决的梯度问题更多。我对此的解决方案是增加代码中的 DPI 设置。例如,如果我将深度图的大小增加 4 倍,则必须使用 4 倍大的 DPI(300,而不是 75)生成立体图。当再次缩小时,这产生了极好的结果。

此图像使用 2x SSAA,使渐变与问题中的 175DPI 图像相当,但收敛点更容易。

这张图片使用了 4x SSAA,我发现锯齿几乎看不出来。这里的噪点变得更加模糊,图像的整体颜色变得相当灰暗。我发现可以通过预先生成噪声并按相同的 AA 因子将其放大来避免这种效果。下一张图片对此进行了演示。