我可以使用哪种算法来模拟散景?


12

我正在尝试编写一个脚本,该脚本循环遍历照片中的每个像素,并将散景应用于整个图像。

我基于此链接构建了一个脚本,但是这似乎是一个hack。

我有三个输入图像:黑白深度图,照片和散景“画笔”图像(当前为六边形)。对于照片的每个像素,我都在bokeh画笔上加盖印记,以使其居于该像素上并以该像素的颜色为中心。

看起来...对微小的散景笔刷来说还可以,但是一旦我增加了散景笔刷的大小,它最终看起来就像是高斯模糊。这是我的算法模糊的时间平方的图片:

在此处输入图片说明

没关系,黑暗的边缘,我可以解决。

您可以说出它与高斯有所不同,但距离可以被称为bokeh的东西还有很长的路要走,边缘清晰:

在此处输入图片说明

我了解为什么我的算法会执行它的工作...我如何才能更准确地模拟bokeh?


1

@我只是了解这些差异,并且散景通常是由镜头引起的,而高斯则是由后处理引起的,但是我想模拟散景。
实体

@Entity:如何寻找具有准确深度图的样本图像?你的准确吗?我想自己尝试一下(决赛之后)。也许我会在几周后得出一个答案。如果您的是公开的,我可以链接到它吗?
Martijn Courteaux

@MartijnCourteaux对于我的初始测试,我只是使用平坦的深度图,以便使所有内容都变得模糊。对于简单的几何图形(例如桌子上的杯子),我认为制作一个美观的深度图将非常简单。对于更复杂的图像,您可能需要一个真实的深度图。这可以从两个图像甚至仅从一个图像计算
实体

Answers:


20

我认为主要问题是动态范围之一,您的算法可能正确,但是您正在处理错误的数据类型。

通过散焦的透镜,原本可以夹住并变成纯白色的点光源会散布在更大的区域上,因此它形成的光盘不那么明亮,因此无法夹住。

这就是为什么您在真实的散景图像中得到那些漂亮的圆圈的原因。如果剪切信号(使其亮度不如正常情况好,然后通过bokeh模拟将其分散开),您会得到一个暗淡的圆圈(或六角形或其他形状),该圆圈不明显,因此看起来不真实。

您在真实图像链中拥有的是:

bokeh (from the lens) -> digitisation (clipping) -> gamma correction & dynamic range compression

你在做什么

sharp image -> digitisation (clipping) -> gamma correction & dynamic range compression -> bokeh simulation

您将无法获得正确的结果,因为您不使用线性数据。

您可以做的是尝试线性化数据,替换因剪切而丢失的任何动态范围,执行bokeh模拟,然后重做非线性操作!

这是一个例子。我从色调映射的HDR图像开始,给出了高度非线性的结果。这是尝试散景模拟的最差图像!

进行标准的卷积运算以模拟散景(使用photoshop的镜头模糊工具)会产生此结果,该结果与您得到的结果非常相似:

为了获得更好的结果,我应用了一条极端曲线来尝试使图像恢复到色调映射之前的大致水平,其中高光比图像的其余部分要亮得多。我使用关卡工具将中心输入向右推很长一段距离,从1.0到大约0.2)。然后,像以前一样,我应用了镜头模糊工具。最后,我在与第一条曲线相反的方向上应用了一条极限曲线。结果虽然离完美还很远,但看起来更像真实的镜头散景:

 

如果在代码中执行此操作,请尝试求出每个值,然后应用bokeh模拟例程,然后取每个值的立方根。您应该会看到一个改进。可能需要一些调整。

tl; dr即使已实现了bokeh的理想数学模型,也必须将其应用于未剪切的线性数据。如果对经过大量修改的数据应用相同的计算(即使从数学的角度来看,甚至是对JPEG相机中的标准进行了大量修改),您也会得到截然不同的结果。


12

首先,在光学中,只有光会累加,而黑暗则不会。确保您的算法不会使暗像素向外溢出其原始位置。生成的像素应该比附近的源像素更大,而不是平均值。或者,更确切地说,您将总结影响源像素的对数。

蒙版的边缘不锋利的另一个可能原因是边缘不清晰。您作为参考提供的页面中的动画可能会被误解,因此在蒙版中,原始像素变亮,而其他像素逐渐变暗。这也将转化为计算的散景中的泥泞边缘。在摄影中,光圈具有确定的边缘,而不是渐变的边缘。因此,实际上,遮罩中的大多数像素应具有相同的亮度,并且只有边缘(其中的边缘应少于一个像素的颜色才能形成平滑的线条)可以是某种灰色阴影。

您还提到一个深度图,但没有提及使用它。您的bokeh蒙版尺寸应与像素深度和焦平面深度差相关-像素离焦平面越远(沿任一方向),其蒙版应越大。在焦平面上,遮罩大小应为1×1像素。


如果操作都是累加的,则不会出现暗区扩散的问题。的确,您需要一个锋利的面具才能获得清晰的圆圈,但是主要的问题是,他的bokeh操作正在应用于非线性数据。
Matt Grum 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.