我知道还有其他方法可以做到这一点,最好的方法之一就是“快速能力”受限的Voronoi镶嵌”。 [Hongwei 09],但我使用的是Mitchell的最佳候选算法。
此算法的工作原理是生成$ N $个随机像素位置作为下一个黑色像素应到达的位置的候选对象,然后选择具有
我已经实现了这一点,并使用它使用各种候选计数将455个黑色像素放置在64x64图像上。查看结果的DFT(频率幅度,而不是相位),我看到了一些意外的频率数据。
奇怪的是,我从来没有得到过“同心的好我期望并在论文中看到有关蓝噪声样本模式的DFT频率振幅。
这些结果是否可以预期?
手动搜索100至1000个样本,似乎400几乎是最佳选择。
基于图像尺寸和所需样本(黑色像素),要使用的候选对象数量是否存在“最佳点” )计数以获得最佳结果?
#1 楼
另一种非常简单,易于实现的算法来生成泊松圆盘/蓝噪声点分布,其算法如下[1]:确定半径r,从而确定期望数每区域N个样本(使用公式来计算分布在环形域中的k个磁盘的最大填充密度,请参见[2])
使用普通的无偏蒙特卡洛采样在您的区域中生成10〜20 x N个样本
直到所有样本都符合泊松圆盘条件:
随机选择一个样本p
从p
移走小于r的所有样本。 />
最后,可以进一步迭代第3步,选择距离在r内的生存样本最少的样本。
您可以找到此方法的实现
参考文献
[1]高效且灵活的具有三角形网格的蓝噪声特性的采样Massimiliano Corsini,Paolo Cignoni,Roberto Scopigno
IEEE可视化和计算机图形学交易,第18卷,第6期,第914--924页-2012
[2]生成泊松磁盘分布方法的比较Ares Lagae,PhilipDutré,
计算机图形学论坛vol:27 Issue:1,2008
#2 楼
问题原来是您没有为每个点分配相同数量的候选项,但是如果您已经拥有$ n $个点,则应该为下一个点生成$ m * n $个候选项。$ m $是一个可调参数,通常$ m $的较高值将花费较长的时间来计算,但会导致更高质量的采样。
候选数应与现有样本数成比例的原因是它会保持有关点常数的统计信息,因此让您通过查看较低的样本数量来推断较高的样本数量/行为。
$ m $的值太高最终看起来像问题的较低图片但是,随机性几乎完全消失了。
高样本数的问题在于它们可以更充分地覆盖所有可能的像素位置,并且由于选择了最佳候选者,因此大量随机性将消失,从而给您带来一些麻烦。更具确定性。
我个人选择做$ m * n + 1 $个样本以稍微简化逻辑并在$ n = 0 $时让它处理第一个样本。
此技术在本文中进行了描述:
“用于分布射线跟踪的光谱最优采样” Mitchell 1991。 > https://dl.acm.org/citation.cfm?id=122718.122736
下面是与问题相同的设置,其中将455个黑色像素放置在64x64图像中,显示某些$值的结果m $。即使$ m $的值较低,其质量也令人惊讶地良好,并且执行时间比问题中描述的过程低很多。我还将候选计数限制为最大像素数的1/2(我想出的任意限制),以防止候选计数过高而无法进行更密集的采样,以保持质量和计算时间不错。
我听说将点存储在网格中可以帮助加快“该候选者离最近点有多远”的计算时间,我相信应该,但是我还没有尝试过。
当$ m = 0 $,相当于白噪声,只是随机放置点。
请注意,在计算两点之间的距离时,我将图像视为环绕,因此将相对边缘上的点紧密靠近。如果对如何计算环绕(环形)空间中的距离的细节感兴趣,请查看此博客文章:
https://blog.demofox.org/2017/10/01/calculating-the-distance-between -points-in-wrap-around-toroidal-space /
这也是我写过有关Mitchell最佳候选算法的博客文章:
https://blog.demofox.org/2017/10/ 20 /用mitchells-最佳候选算法生成蓝色噪声样本点/
评论
$ \ begingroup $
该技术与非常容易生成的Halton序列相比如何?
$ \ endgroup $
– Quinchilion
17-10-5在22:05
$ \ begingroup $
离理想的蓝噪声很近。可能值得另一个问题!
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
17-10-5在22:52
$ \ begingroup $
3年后的一个更好的答案...哈尔顿序列是一个低差异序列。它的收敛速度比白噪声快,但在收敛之前可能会出现混叠问题。蓝噪声的收敛速度与白噪声相同,但启动误差较低。它留下的错误在感觉上比白噪声或LDS更好。蓝噪声基本上是针对低样本数的。
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
20年7月29日在17:29