11

我知道Floyd-Steinberg 抖动算法不能用像素着色器实现,因为该算法是严格顺序的。但也许存在一些高度并行的抖动算法,其视觉输出类似于 Floyd-Steinberg 算法?

所以问题是 - 哪些抖动算法适合在像素着色器(最好是 GLSL)上实现并且输出质量(非常)类似于 Floyd-Steinberg 抖动?

顺便提一句。允许多遍算法,直到不超过 2 遍并且这些遍之间的 CPU 开销很小。

有任何想法吗 ?

编辑:
我需要从 24 位颜色抖动到 21 位颜色。
(也就是说 - 我需要从 8 位/通道转换为 7 位/通道。)

编辑 2 也许我没有很好地解释问题。所以我会尝试扩展一下确切的问题。问题是这样的 - 考虑我们有这张图片:
替代文字
我们有上面的图片,但是用抖动算法处理:
替代文字
现在这是测试你的抖动是否适合我的程序:
1. 将这些图片加载到 Photoshop 中作为一张图片和 2层。
2.选择图层混合模式为“差异”。
3. 对图层执行“合并可见”操作,只得到一个图层。
4. 执行操作 => Image/Adjustments/Equalize

之后你必须得到这样的图像:
替代文字
如您所见 - 单调红色的中间像素根本没有抖动。左右图像区域的抖动也有点不同。尝试用这种行为重建抖动算法。

4

2 回答 2

5

您可以使用有序抖动。它比 Floyd-Steinberg 看起来更粗糙,但像素之间没有依赖关系。

编辑:由于您只删除了一个位,因此这几乎是微不足道的。有序抖动背后的原理是创建一个偏置转换阈值的模式;在这种情况下,偏差为 0 或 1,图案为 2x2 像素。这两个更改一起将使该模式比 Wikipedia 文章中的模式更不令人讨厌 - 您甚至可能比 Floyd-Steinberg 更喜欢它。

这是一些伪代码:

bias = (X xor Y) and 0x01
value = pixel + bias
if value > 255: value = 255
pixel = value and 0x7e

编辑2:这是我的差异结果,尽我所能。在不知道如何将 7 位值映射回 8 位的情况下,我无法做得更好。

替代文字

于 2010-11-03T22:08:17.623 回答
2

如果您从 8 位减少到 7 位,那么您几乎不会丢弃任何信息。你确定你甚至需要抖动吗?

如果您需要抖动、添加随机噪声然后进行剪辑,这对您的应用程序非常有用。

于 2010-11-07T20:24:02.427 回答