我正在尝试找到一个最佳抖动模式,它可以用作灰度图像的阈值以生成 1 位黑白图像。理想情况下,它会是最佳的,因为人类会在感知上判断它最接近源图像。
例如,白噪声抖动看起来很糟糕:
尽管具有相同数量的错误,但使用蓝噪声进行抖动看起来要好得多:
(图片来自https://blog.demofox.org/2017/10/31/animating-noise-for-integration-over-time/)
虽然白噪声看起来不太好,但它可以很容易地实时生成,而蓝噪声则不能。
因此,我试图找到一种抖动模式:
- NxN 大小
- 具有均匀分布的值:0/N、1/N ... (N-1)/N
- 感觉上最好的性价比
在我获得给定 N 的最佳模式(或相当好的模式)之后,第 2 步将尝试找出如何在数学上计算它,但第一步是找到模式。
有没有人对这样做的好方法有任何建议?
我目前正在尝试使用模拟退火来找到最佳解决方案。我正在使用 SSIM 来计算解决方案的得分,用于模拟退火逻辑。
对于模拟退火,我通过以下方式初始化模式:
- 初始化 NxN 模式,使行 M 设置为 M/N。
- 随机播放图案
在计算模拟退火的可能移动时,我在 NxN 模式中随机选择两个值并交换它们。
这对我来说不是很好,但我不确定这是否不是一个好的方法,或者我是否为模拟退火和/或 SSIM 选择了错误的参数。
模拟退火有一个起始温度,以及从那里到温度 0 的指定迭代次数。
另一方面,SSIM 有 c1、c2 和 c3,我将它们设置为零。我还对抖动图像中的每个 8x8 块进行 SSIM(所有这些块,即使它们重叠)并将它们平均在一起以获得 SSIM 分数。
这是该算法提出的 5x5 抖动模式的示例,它看起来真的一点也不好看。
我手动导出了一个 5x5,实际上看起来好多了:
有人对我如何更好地搜索/解决这个问题有任何建议吗?