弗洛伊德 - 斯坦伯格抖动像素着色器的替代品
-
27-09-2019 - |
题
我知道弗洛伊德斯坦伯格抖动算法不能与像素着色器实现的,因为该算法是严格的顺序。但是,也许存在一些higly平行抖动算法,其通过它的视觉输出类似于弗洛伊德斯坦伯格算法?
所以,问题是 - 什么是抖动算法,其适合于像素着色器(优选GLSL)来实现,并与输出质量(非常)类似于弗洛伊德斯坦伯格抖动
顺便说一句。多遍算法被允许直到有不超过2个通行证和CPU开销那些遍之间较小。
任何想法?
修改强>结果,我需要24位颜色抖动至21位颜色。结果(即 - 我需要转换从8位/信道到7位/信道。)
修改2 强> 也许我没有解释的问题很好。所以我会尽力扩大确切的问题了一下。 问题是这样的 - 考虑到我们有这样的画面:点击 结果我们有上面的图片,但用抖动算法处理:点击 结果现在,这是程序这将考验你的抖动是为我好与否: 结果1。加载在Photoshop这些图片对作为一个画面有2层。 结果2。选择图层混合模式为“差”。 结果3。执行“合并可见图层”操作的图层,得到的只是一个层。 结果4。执行操作=>图像/调整/均化 搜索结果之后,你必须得到这样的图像:点击 结果正如你看到的 - 这是在单调中像素红色,完全没有抖动。 同时左,右图像区域的抖动是一个有点不同。试图重建与这种行为抖动算法。
解决方案
如果您是从8个比特减少7,则扔掉几乎没有信息。你确定你甚至需要抖动?
如果您需要的抖动,添加随机噪声,然后再剪裁,这将是您的应用程序很多不错的。
其他提示
您可以使用有序抖动。它更粗看起来比弗洛伊德斯坦伯格但有像素之间不存在相关性。
编辑:因为你只是删除单个位,这成为几乎微不足道。有序抖动背后的原理是创建一个偏见的过渡门槛的模式;在这种情况下,偏压将是0或1,所述图案将是2×2个像素。在一起的这两个变化将使该模式远远超过了一个维基百科的文章较少讨厌 - 你甚至可能喜欢它比弗洛伊德 - 斯坦伯格更好
下面是一些伪代码:
bias = (X xor Y) and 0x01
value = pixel + bias
if value > 255: value = 255
pixel = value and 0x7e
编辑2:这是我的差异的结果,是最好的,我能做到。不知道你如何你的7位值映射回8位,我不能做的更好。