如何搜索最佳抖动模式?

数据挖掘 梯度下降 元学习
2021-09-15 14:58:13

我正在尝试找到一个最佳抖动模式,它可以用作灰度图像的阈值以生成 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 来计算解决方案的得分,用于模拟退火逻辑。

对于模拟退火,我通过以下方式初始化模式:

  1. 初始化 NxN 模式,使行 M 设置为 M/N。
  2. 随机播放图案

在计算模拟退火的可能移动时,我在 NxN 模式中随机选择两个值并交换它们。

这对我来说不是很好,但我不确定这是否不是一个好的方法,或者我是否为模拟退火和/或 SSIM 选择了错误的参数。

模拟退火有一个起始温度,以及从那里到温度 0 的指定迭代次数。

另一方面,SSIM 有 c1、c2 和 c3,我将它们设置为零。我还对抖动图像中的每个 8x8 块进行 SSIM(所有这些块,即使它们重叠)并将它们平均在一起以获得 SSIM 分数。

这是该算法提出的 5x5 抖动模式的示例,它看起来真的一点也不好看。

在此处输入图像描述

我手动导出了一个 5x5,实际上看起来好多了:

在此处输入图像描述

有人对我如何更好地搜索/解决这个问题有任何建议吗?

1个回答

我认为你在正确的轨道上。如果您可以为输出生成一个客观评分算法,它比 1:1 误差更接近您的主观感知,您绝对可以使用模拟退火从给定大小 N 的最优矩阵中推导出。

您当前的错误评分计算似乎过于关注高频信息(细节),而对低频信息(较大区域)不够关注 - 请注意您认为主观上优越的结果,如果模糊(低通滤波器)更多与您认为较差的结果相比,非常类似于输入图像(如果也模糊)。

如果是我,我的下一步可能是尝试分层以避免偏向任何给定频率,可能是四叉树,其中每个级别为 1x1、2x2、4x4 等。我平均节点子节点的值,然后评分使用树之间的误差。