【问题标题】:General approach to temporal dithering时间抖动的一般方法
【发布时间】:2019-05-12 19:04:33
【问题描述】:

我正在寻找有关在处理中实现时间抖动的一般方法的一些输入。

目前我有一个处理草图,它生成一个十六进制文件,可以通过 SPI 发送到 APA102 LED 灯条。我能够实现的帧速率应该足以实现时间抖动以增加 LED 的动态范围,主要是在较低亮度的情况下。我查看了 FastLed 和 Fadecandy 以尝试了解它是如何完成的,但我无法真正弄清楚。使用这些库不是一个选项,因为动画应该在 hex 文件中“硬编码”。

谁能指出我正确的方向?

编辑: 我目前实现了以下内容:首先,我计算 LED 上可实现的帧速率,这给出了我可以插入的抖动帧的数量,基于我的串中 LED 的数量和 SPI 时钟速度。 LEDstrip 可以以 420fps 的速度更新,因此我每帧有 7 个“虚拟”帧,仍然能够拥有 60fps 的基本刷新率。 然后我计算一个 7x7 的查找表,如下所示:

0 0 0 0 0 0 0 
0 0 0 1 0 0 0
0 0 1 0 0 1 0
0 1 0 1 0 1 0
0 1 0 1 1 0 1
1 1 0 1 1 1 0
0 1 1 1 1 1 1

我使用浮点数进行所有伽马颜色校正计算,查找表中的每一行对应于两个值之间的 1/7 步长。然后将这些添加到底 RGB 值以实现抖动。 然而,这一切在视觉上并没有太大的变化。与没有抖动的动画相比,我看不出有什么不同。 我希望看到类似https://www.youtube.com/watch?v=1-_JtRl2ks0

【问题讨论】:

    标签: processing led temporal dithering fastled


    【解决方案1】:

    您可以在master/controller.h 中阅读 FastLED 用于抖动的代码——搜索 init_binary_dithering。通过阅读本文,我了解到他们只是检查自上次更新以来已经过去了多少时间,以估计他们可以获得多少虚拟抖动“位”。

    由于您没有提供工作代码,我不确定您为什么没有看到差异。但是,我可以通过一个示例来了解时间抖动应该做什么。

    假设您的全局亮度设置为 32。这意味着所有 RGB 值在显示之前都除以 8 (256/32)。例如 255,255,255 实际上将显示为 31,31,31。

    (现在我将忽略“G”和“B” - 我们假设它只是“R”。)

    • 如何显示 32?它显示为 1。
    • 0如何显示?它显示在 0。

    现在

    • 如何显示 16?它将显示为 0。但这是时间抖动可能有用的地方。我们真正想做的是将其显示为一半时间为 0,一半时间为 1。

    • 如何显示 24?它也将显示为 0,但对于时间抖动,我们应该在四分之一的时间将其显示为 0,在其他四分之三的时间将其显示为 1。

    再次从您的描述中,我不确定为什么您没有看到预期的效果。

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 2016-10-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 2016-09-12
      • 2012-01-22
      • 2012-05-29
      相关资源
      最近更新 更多