【GAD翻译馆】抖动第二部分-黄金比例序列,蓝噪声,高通滤波和重映射

发表于2017-11-14
评论0 1.7k浏览
抖动第二部分-黄金比例序列,蓝噪声,高通滤波和重映射
译者:王晗(天将明)   审校:赵菁菁(轩语轩缘)
2016年10月30号, bartwronski发表
在微型系列的前一部分,我介绍了抖动的定义以及抖动如何改变一维量化和功能的误差特性。在这一部分我将尝试观察蓝噪声,但还是想先看看我在上一篇文章使用的数字序列,我发现非常有用。你可以找到关于黄金序列的一个数学软件的笔记本这里,它的pdf版本这里。文章的第二部分,可以找到这个笔记本这里,以及它的pdf版本这里。

黄金比例序列
在上一篇文章中,我是用了“一些”准随机函数/序列,并提到了虽然不完美,但却是有效的。这个序列由黄金数字的下一次乘法的小数部分构成
FractionalPart [N *黄金比例]
我在由Colas Schretter和Leif Kobbelt发表的论文低比例采样的黄金比例序列一文中找到了使用它的想法。这真是一个令人着迷的不可思议的序列,因为它的分布非常广泛,很完美:
 

https://bartwronski.com/2016/10/30/dithering-part-two-golden-ratio-sequence-blue-noise-and-highpass-and-remap/(动图链接)
相邻元素的差值在模1以内:
{0.381966, 0.618034, 0.381966, 0.381966, 0.618034, 0.381966, 0.618034, 0.381966}
震荡黄金数模1本身再加上2减去黄金数模1。这些数字都距0足够远,产生了一个分布良好的序列,在这里可以可以为下一个样本添加大量的信息。即使对于序列中的少量“样品”,它们也很好地涵盖了整个0-1范围:
 
https://bartwronski.com/2016/10/30/dithering-part-two-golden-ratio-sequence-blue-noise-and-highpass-and-remap/(动图链接)
绘制为颜色的数字看起来效果也令人惊喜:
 
我们看周期图:
 
我们也找到了一些迷人的属性。首先,能量似乎随着频率的增加而增加,在某些频率中有可见的“尖峰”,更有趣的是,下一个尖峰发生在黄金比例倍数上,它的黄金比例倍增。对此,我没有任何的解释,如果你在数学上比我更好,请发表一下评论。

这种频率特性是非常有用的,但不能满足我们所有的抖动需求。为什么呢?假设我们抖动的信号源包含相同的频率,那么我们会在这些频率中看到额外的混叠。任何用于抖动的噪声结构都会变得可见,并且可能产生不符合预期的混叠。
我仍然认为这个序列非常有价值,并且在例如时间技术(以及半球形采样)中大量使用它。还有其他非常有用的低差异序列在渲染中被大量使用  - 我不会在这里介绍这些,而是将参考Matt Pharr, Wenzel Jakob和Greg Humphreys的基于物理的渲染“圣经”第三版:从理论到实现的第七章放在这里,也感谢作者们免费提供。现在让我们来看看蓝噪声和理论上“完美”的抖动序列。

蓝噪声
什么是蓝噪声?维基百科这样定义:蓝噪声也被称为良性噪声。蓝噪声的功率密度随着频率的增加(与f成比例的密度)在有限的频率范围内增加3 dB。在计算机图形学中,术语“蓝噪声”有时被更宽松地用作具有最小的低频分量的噪声,并且没有集中的能量尖峰。而我们这里会使用更自由的定义(频率分布密度增加没有严格的定义)。

我们很快会发现,以前的黄金比例序列不是蓝噪声,因为它有很多可见的频谱峰值。完美的蓝噪声没有尖峰,因此不容易产生混叠或放大这些频率。有很多算法可以产生蓝色的噪音,不幸的是,许多算法都获得了大量的专利。我们将看看可以用来产生近似蓝噪声的两种相对简单的技术。

产生蓝色噪声 - 高通滤波和重映射
我们将会看到的第一个技术来自于Timothy Lottes和他的AMD GPUOpen 博客上的文章电影艺术。这个技术很简单,但是却很棒-第一步我们获得不期望的频谱的噪声,然后使用高斯滤波器来重塑它。不幸的是,任意的高通滤波器将产生具有非常不均匀的直方图的信号和与原始噪声分布完全不同的取值范围:
 
原来在0到1范围内的随机噪声,经过随机高斯滤波之后的结果
该算法的第二步:强制在0到1之间重塑直方图,这一步也比较简单,按照元素的值进行排序,然后将值重新映射到列表中的位置。效果更好了:
 
不幸的是,重映射直方图的操作也改变了频谱。这是不可避免的,因为直方图重新映射改变元素的相对值不是线性的。直方图中间的值(对应于原本已经失去低频分量的区域)将比具有高频率内容的区域中的值更多。这样一来,高通滤波效果就会消失:
 
重映射之前的直方图(红色)和重映射之后的直方图(黑色),手动重新归一化。
注意一些低频分量是否重新出现。没有高通滤波,看起来效果也不错:
 
顶级 - 常规随机噪声。底部 - 高通和直方图重新映射。
其频谱也看起来很有希望:
 
但是,仍然有这个尾随的低通分量。它并没有包含大量的能量,但仍然可以在抖动图像中引入一些可见的低通误差。

现在我们能做的就是再次应用这个技术,下面使我们得到的:
 
显然频谱看起来更好,整个算法简单实用,而且我们可以根据需要多次使用它。不幸的是,无论我们重新应用多少次,都不可能“修复”所有可能的问题点。
我以这种方式思考,如果图像的某些区域仅包含非常低的频率,则在应用高通滤波器之后,将获得非常接近于零的相邻值。在直方图重映射之后,它们将被重新映射到类似的相邻值。
 
小部分序列具有局部最小值,该算法重复甚至10次都无法退出。注意几乎均匀的灰色区域。
使用不同的高通滤波器或在迭代之间增加一些噪声或检测这些有问题的区域,并且对“修复”它们将有所帮助,但是这不仅仅是本文和原始技术的范围。
值得注意的是,原始算法给出的序列不完美吗,但也足够了,虽然它留下了相当差的局部斑点,但是在全球优化了频谱。
结果
让我们来看看我们的初始的,简单的一维抖动二进制量化:
 
1,3,5行-原始正弦函数第2行-正常噪音抖动。第4行 - 黄金比例序列抖动。第6行- 使用“高通滤波和重映射”蓝噪声序列进行抖动。我们可以看出,黄金比例序列和我们的高通滤波重映射都比正常噪声好。然而,由于较少的“聚集”,黄金比例序列似乎表现更好。我们可以看到在峰值频率的一些频率“跳动”:
 
黑白噪音。红 - 黄比例序列。绿色 - 高通滤波重映射序列。
https://bartwronski.com/2016/10/30/dithering-part-two-golden-ratio-sequence-blue-noise-and-highpass-and-remap/(动图链接)
所以这不是一个完美的技术,但a)非常快b)可调节和c)比任何种类的白噪声方式更好。

更好?较慢的蓝噪声
如果我们想要一些不包含当地“团块”的解决方案,我们该怎么办呢?我们可以看一下Siggraph 上由使用Solid Angle技术的Iliyan Georgiev和Marcos Fajardo发表的论文蓝噪声抖动采样。该算法围绕使用模拟退火的概率技术的概念构建,以全局最小化期望误差度量(在这种情况下相邻元素之间的距离)。我实现了一个简单的(不完全模拟的退火,更像是一个随机的步行),一个支持一维,二维,三维的包装阵列的版本。
https://github.com/bartwronski/BlueNoiseGenerator/

通常采用全局概率优化技术,会花费很长时间。我使用三维阵列在Macbook上,做了一些本地的实现,经过一夜的运行,它收敛到最佳的平均质量顺序。然而,这篇文章并不是关于算法本身(实现起来非常好,相当简单),而是关于抖动和噪声。为了达到本文的实验目的,我用我的实现生成了2000个元素,一个一维序列。这是前64个元素:
 
看起来非常不错,没有聚堆,良好的分布。频谱也看起来很好,像想要的蓝色噪声!(几乎线性能量随频率增加)
 
如果我们将它与“高通滤波重映射”的频谱进行比较,它们没有那么大区别; 只有很少的低频率,更多的是期望中的高频率:
 
高通滤波重映射(黑色)vs固体角技术(红色)。
https://bartwronski.com/2016/10/30/dithering-part-two-golden-ratio-sequence-blue-noise-and-highpass-and-remap/(动图链接)
在应用于一维信号抖动时,我们可以看到它与所有其他技术相比:
 
奇数行:“地面实况”偶数行:白噪声,黄金比例序列,高通滤波重映射,最后产生蓝噪声序列。
在我看来,感觉上很均匀(与黄金比例序列一致)。
我们可以再看一下这些错误的频谱:
 
黑-白噪音。红-黄比例序列。绿色-高通和重映射。黄色生成序列。
https://bartwronski.com/2016/10/30/dithering-part-two-golden-ratio-sequence-blue-noise-and-highpass-and-remap/(动图链接)
如果我们将这些图像变模糊,他们就会看起来特别接近最原始的简单的正弦信号:
 
如果我在这个限制或场景下对他们进行评级,我可能会使用从最坏到最坏的顺序:
1)黄金比例序列,
2)由Solid Angle技术产生的蓝色噪音,
3)由高通和重映射产生的蓝色噪声,
4)白噪声。
我们很幸运,虽然黄金比例序列看起来是最好的,因为共振的错误的频率并没有出现在这个序列中,所以不一定是最佳情况。

总结
在博客上发表的微系列中,我提到了蓝噪声的定义,参考了两种生成蓝噪声的技术和通用高频低差分采样序列之一,这一切还在一维域中,所以在下一篇文章中,我们将看看这些原理如何应用于二维信号量化的抖动。
参考
https://www.graphics.rwth-aachen.de/media/papers/jgt.pdf 低比例抽样的黄金比率序列Colas Schretter和 Leif Kobbelt。
基于物理的渲染,第三版:从理论到实现Matt Pharr, Wenzel Jakob和 Greg Humphreys.
https://en.wikipedia.org/wiki/Colors_of_noise#Blue_noise 
http://gpuopen.com/vdr-follow-up-fine-art-of-film-grain/  电影艺术 Timothy Lottes
蓝噪声抖动采样Iliyan Georgiev和Marcos Fajardo


【版权声明】
原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引