文章目录
前言、先看效果对比
二值化黑白图像展示
灰度抖动图像展示
一、黑白世界的色彩想象
之前使用 ESP32-S3 + 12864 OLED 做了个串流小电视(见 桌面小电视新思路,ESP32-S3 + 12864 OLED 串流视频),通过网络发送视频帧的方式来播放视频。
因为 12864 OLED 是一个单色显示屏,因此在播放视频时,整个画面的颜色通过“灰度化->二值化”的步骤来生成黑白纯色画面,在视频中可以看到画面没有层次和细节,不太容易看清画面内容是什么。
因此我们需要引入灰度来让整个画面更加丰富,但是在 12864 OLED 没有灰度的情况下如何显示灰度信息呢?
在这里我们就可以引入一种特别的显示技术——抖动 (Dithering),它能让单色屏幕拥有显示4阶灰度的能力。
二、什么是抖动 (Dithering)?
抖动,它的原理却非常直观,相当于通过大脑形成一种视觉错觉。
在单色屏幕上,只有纯黑和纯白的像素。抖动的核心思想就是:通过改变像素点的排布密度,来模拟出不同程度的灰度。
举个最简单的例子,如果你仔细观察报纸上的照片,你会发现那些“灰色”的部分,其实是由许多大小不一或疏密不同的黑色墨点组成的。在远处看,这些墨点混合在一起,就形成了我们看到的灰度。旧式的点阵打印机也是同样的原理,通过打印点的疏密来表现深浅。
抖动就是利用人眼的这种视觉混合效应。当我们观察一个由许多纯黑和纯白像素组成的区域时,如果这些像素非常小并且排列得足够紧密,我们的大脑就会将这些黑白像素的混合视为一个统一的灰色。像素点越密,看起来就越黑;像素点越稀疏,看起来就越白。
三、4 阶灰度:从纯黑到纯白
我们通常说的灰度,可以有 256 级,甚至更多。但是通过抖动模拟出的灰度,其实是牺牲了有效分辨率换来的。
对于 12864 OLED 来说,原生的黑白分辨率是 128x64,通过 2x2 的点阵抖动来实现灰度时,实际有效分辨率可以等同于 64x32。
因此,要实现更多级的灰度,会严重损失画面内容,而 4 阶灰度,却是一个在有限资源下,既能有效提升显示效果,又相对容易实现的折衷方案。
那么,这 4 阶灰度具体指什么呢?它们通常代表以下四种亮度等级:
- 0% 亮度: 纯黑色
- 33% 亮度: 较深的灰色
- 66% 亮度: 较浅的灰色
- 100% 亮度: 纯白色
纯黑和纯白是单色屏幕的本色,可以直接显示。但介于两者之间的“较深的灰色”和“较浅的灰色”要如何呈现呢?这就是抖动技术大显身手的地方。
四、实现原理:点阵的巧妙组合
现在,我们不再把一个像素看作一个独立的点,而是将几个像素组合成一个微小的“点阵”。最常用也最容易理解的是使用 2x2 的点阵,也就是由四个像素组成的一个小方块。
通过控制这四个像素中哪些是“亮”的(白色)和哪些是“暗”的(黑色),我们就可以模拟出四种不同的灰度等级。
这里是2x2点阵的四种组合方式,以及它们所代表的灰度等级:

通过这样的点阵组合,我们的眼睛在一定距离下观看时,就会将这些微小的黑白点阵“混合”成具有不同灰度感觉的区域。这就是单色屏幕上实现4阶灰度的基础。

五、抖动算法:误差扩散抖动
虽然 2x2 点阵的原理很简单,但如果仅仅是机械地将图像划分为 2x2 的小块,并根据平均灰度值来选择对应的点阵模式,图像看起来可能会有明显的块状感,细节丢失严重。
为了获得更自然、更平滑的灰度过渡,我们需要更高级的抖动算法,其中最常用且效果显著的一种是误差扩散抖动 (Error Diffusion Dithering)。
简单来说,误差扩散抖动不再是孤立地处理每个像素或小点阵,而是考虑了图像的整体性。当算法处理一个像素时,它会首先判断这个像素应该显示为黑还是白。但关键在于,如果这个像素的原始灰度值与最终选择的黑白值之间存在“误差”,这个误差并不会被简单地丢弃,而是会被“扩散”到它周围的、尚未处理的像素点上。
下图是 floyd-steinberg 典型误差扩散权重设定:

这样一来,被扩散的误差会影响到后续像素的黑白决策,使得整体灰度分布更加均匀,视觉效果也更接近原始图像的灰度。常见的误差扩散算法有 Floyd-Steinberg、Jarvis-Judice-Ninke 等,它们的主要区别在于误差扩散的权重和方向。
不同抖动算法效果对比

通过示例图可以看到,经过算法优化的抖动图像,可以显示更多原始图像的细节。
六、实际应用场景
虽然现在大多数带屏设备已经是使用了更高像素、更多色彩的 LCD,甚至是 OLED 显示屏,但是在相当多的领域,还是会有单色屏在使用。
在这些单色屏场景中,抖动技术就发挥着重要作用:
- 电子书阅读器: 很多早期的E-Ink屏幕就是利用抖动技术来显示文本和图片的,以在有限的灰度等级下提供更好的阅读体验。
- 工业显示屏: 在一些对成本、功耗有严格要求的工业设备上,单色显示屏配合抖动技术可以以较低的成本实现更好的视觉效果。
- 旧款打印机: 点阵打印机和早期喷墨打印机也利用抖动来模拟灰度或颜色。
- 图像处理软件: 许多图像编辑软件都提供了抖动功能,用于在将图像转换为低色深格式时,减少色带(banding)现象,保持图像细节。
七、总结
不得不说,人类的智慧是无限的,在有限的资源下,通过算法能创造出超越硬件限制的体验。
计算机图形学还有相当多的东西可以学习,在以后的 DIY 过程中再慢慢学习吧~

0 条评论。