代码之家  ›  专栏  ›  技术社区  ›  Agnius Vasiliauskas

像素着色器的FloydSteinberg抖动替代方案

  •  11
  • Agnius Vasiliauskas  · 技术社区  · 14 年前

    Floyd–Steinberg dithering 算法不能用像素着色器实现,因为该算法是严格顺序的。但是,可能存在一些与Floyd Steinberg算法相似的高抖动并行抖动算法。

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

    顺便说一句,在不超过2次的情况下,允许使用多通道算法,而且这些通道之间的CPU开销很小。

    有什么想法吗?


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

    也许我并没有很好地解释这个问题。所以我将试着在具体问题上展开一点。 问题是这样的-假设我们有这张照片:
    alt text
    我们有上面的图片,但是用抖动算法处理:
    alt text

    一。在Photoshop中将这些图片加载为一张有两层的图片。

    三。在图层上执行“合并可见”操作,只得到一个图层。
    四。执行操作=>图像/调整/均衡


    alt text
    如你所见-中间的像素是单调的红色,根本没有抖动。 左右图像区域的抖动也有点不同。尝试用这种行为重建抖动算法。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Ned Batchelder    14 年前

    如果你从8位减少到7位,你几乎没有丢弃任何信息。你真的需要犹豫吗?

    如果您需要抖动,添加随机噪声,然后剪辑,这将是您的应用程序的充分好处。

        2
  •  4
  •   Mark Ransom    14 年前

    你可以用一个 ordered dither

    编辑:

    下面是一些伪代码:

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

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

    alt text

    推荐文章