Agn*_*kas 11 image-processing glsl dithering pixel-shader
我知道Floyd-Steinberg抖动算法不能用像素着色器实现,因为该算法是严格顺序的.但也许存在一些高度并行的抖动算法,它的视觉输出类似于Floyd-Steinberg算法?
所以问题是 - 什么是抖动算法适合在像素着色器(最好是GLSL)上实现,输出质量(非常)类似于Floyd-Steinberg抖动?
BTW.允许多次传递算法,直到不超过2次传递,并且这些传递之间的CPU开销很小.
有任何想法吗 ?
编辑:
我需要从24位颜色到21位颜色抖动.
(也就是说 - 我需要将8位/通道转换为7位/通道.)
编辑2
也许我没有很好地解释问题.所以我会尝试扩展一些确切的问题.问题是这个 - 考虑一下我们有这张照片:
我们有上面的图片,但用抖动算法处理:
现在这是测试你的抖动对我有好处的程序:
1.在Photoshop中将这些图片作为一张图片加载2层.
2.选择"图层"混合模式为"差异".
3.对图层执行"合并可见"操作,以获得一个图层.
4.执行操作=>图像/调整/均衡
之后你必须得到这样的图像:
正如你所看到的那样 - 单调红色的中间像素根本没有抖动.左右图像区域的抖动也有点不同.尝试用这种行为重建抖动算法.
您可以使用有序抖动。它看起来比 Floyd-Steinberg 更粗糙,但像素之间没有依赖性。
编辑:由于您只删除了一点,所以这几乎变得微不足道。有序抖动背后的原理是创建一种使过渡阈值产生偏差的模式;在这种情况下,偏差将为 0 或 1,图案将为 2x2 像素。这两项更改一起将使该模式比维基百科文章中的模式更不令人讨厌 - 您甚至可能比 Floyd-Steinberg 更喜欢它。
这是一些伪代码:
bias = (X xor Y) and 0x01
value = pixel + bias
if value > 255: value = 255
pixel = value and 0x7e
Run Code Online (Sandbox Code Playgroud)
编辑2:这是我的差异结果,尽我所能。如果不知道如何将 7 位值映射回 8 位,我就无法做得更好。