IspPipeline高位宽转低位宽色带消除的Dither 抖动技术介绍

Dither 抖动技术深度详解:高位宽转 8bit 消除色带

一、高位宽转低位宽出现色带(Banding)的原因

1. 量化误差本质

位宽压缩 = 量化,把连续的亮度 / 色彩区间映射到离散有限阶梯。 以你 ISP 场景举例:10bit Y 通道(0~1023,共 1024 级灰阶)压缩到 8bit(0~255,仅 256 级)

  • 10bit 每 4 个连续数值会被映射到同一个 8bit 值:0/1/2/3→04/5/6/7→1 ......
  • 中间被合并的像素会丢失细微亮度差,原本平滑渐变的天空、墙面、肤色会出现一圈一圈清晰的分层条纹,就是色带 Banding

2. 量化误差数学模型

设高位宽原始值为 X,量化低位宽输出为 (Q(X)),量化误差:

无抖动时,同一量化区间内所有像素误差完全相同,整片区域统一偏亮 / 偏暗,人眼对这种固定系统性误差极其敏感,肉眼直接看见分层条纹。

举 10bit→8bit 线性映射例子: 原始 Y:4,5,6,7 全部量化输出1 真实浮点目标值:1.0、1.25、1.5、1.75。量化误差:0、-0.25、-0.5、-0.75 整片渐变区域固定存在负偏差,均匀分层,色带明显。

3. 人眼视觉特性放大色带问题

人眼对缓慢均匀亮度变化敏感度极高,纯色渐变背景(天空、雾、墙面、肤色)是色带重灾区; 而纹理丰富区域(树叶、纹理、噪点画面)本身存在天然细节,会掩盖量化分层,看不出色带。


二、Dither 抖动核心原理:随机打散量化误差

核心思路

在高位宽像素量化之前,叠加一个低幅度、有规律 / 随机的微小噪声信号,打破同一区间像素统一的量化误差,把固定分层误差转化为人眼难以分辨的细密噪声。 公式:

  • D:抖动噪声(微小幅值)
  • step:量化步长(10bit→8bit 时 step=4)

无 Dither vs 有 Dither 对比

  1. 无抖动 同一量化区间全部像素误差一致 → 规整、连续、可见的色带条纹;
  2. 加微小抖动噪声 同一区间内像素叠加随机小幅偏移,有的向上量化、有的向下量化,整体平均亮度不变,但局部离散化分层边界; 人眼会将细密均匀噪声融合,感知到平滑渐变,无法分辨原本清晰的色带。

关键约束:抖动噪声幅值必须小于 1 个量化步长

10bit 转 8bit 量化步长 = 4,抖动幅值一般取 ±1、±2(不超过一个完整量化台阶);

  • 噪声不能过大:否则画面出现明显颗粒噪点,损失干净画质;
  • 噪声不能过小:无法打散量化误差,消除不了色带。

三、主流 Dither 分类

分类 1:随机抖动 Random Dither(最简单,部分低端 ISP 内置)

  1. 实现逻辑 每个像素叠加独立随机整数噪声,范围 \(-step/2,\\;+step/2\),再做量化舍入。 10→8bit step=4,噪声范围:-2,-1,0,1,2
  2. 优缺点
  • 优点:硬件实现极简,只需要一个线性反馈移位寄存器 LFSR 生成伪随机数;
  • 缺点:纯随机噪声会让画面出现轻微雪花噪点,信噪比小幅下降;
  1. 适用场景:低成本摄像头、预览流,对静态画质要求不高的场景。

分类 2:有序抖动 Ordered Dither(ISP 最常用,硬件流水线友好)

也叫矩阵抖动,预定义固定 N×N 噪声模板(2x2/4x4 矩阵),按像素坐标循环复用噪声,不需要随机发生器,时序稳定、无随机雪花。 经典 2x2 抖动矩阵(幅值 0~3,适配 step=4 量化):

逐行逐像素按坐标取矩阵值叠加到原始像素,再量化。

  1. 优势
  • 纯查表实现,硬件无延时,流水线友好,适合 RGB2YCbCr、GBCE 输出端实时插入;
  • 噪声呈规律细密网格,视觉上比纯随机噪点更柔和,静态画面无闪烁;
  1. 劣势:极端纯色背景下,近距离细看能发现微弱网格纹理;
  2. 工程适配:你文档中 10bit Y 转 8bit 输出,绝大多数 ISP 在 Clip 截断前插入 2x2 有序抖动模块。

分类 3:误差扩散抖动 Error Diffusion(画质最优,硬件成本高)

代表算法:Floyd-Steinberg 不提前加噪声,量化后把当前像素的量化误差分摊扩散到相邻未处理像素。

  1. 原理: 像素量化产生误差 e,按比例分给右、下、右下邻域:7/16 传给右侧,3/16 传给左下,5/16 传给正下方,1/16 传给右下;
  2. 效果:消除色带能力最强,渐变过渡极其平滑,几乎看不到噪点;
  3. 短板:
  • 需要行缓存存储邻域误差,占用片上 RAM;
  • 串行处理,破坏 ISP 并行流水线,延时高;
  1. 使用场景:仅静态图片抓拍、高端工业相机,视频实时流很少使用。

四、结合 ISP 流程:Dither 插入位置(10bit→8bit 场景)

对应两份框图数据流:

10bit Y_out(RGB2YCbCr) → GBCE模块 → 量化压缩(10→8bit) → Dither → ClipU8 → 8bit输出

gamma校正的时候比如12bit转到10bit的时候,在校正的叠加取整后和实际值之间的误差做到类似去抖动的功能。

标准硬件流水线插入点

  1. GBCE Mode1(LUT 映射):LUT 输出本身 8bit,一般不需要抖动;
  2. GBCE Mode2 / GBCE Off(线性 10→8bit 压缩):移位 + 四舍五入之后、Clip 饱和截断之前插入 Dither; 流程拆解(GBCE Off 模式):
  3. 10bit(0-1023)
  4. 亮度缩放: 线性量化,产生量化分层误差
  5. 叠加小幅抖动噪声 D(±1~±2)
  6. ClipU8 限幅到 0~255 输出 8bit Y

为什么放在 Clip 前:叠加噪声后数值可能短暂超出 0/255 边界,由后级 Clip 统一饱和截断,不会出现数值溢出。

Cb/Cr 色度通道是否需要 Dither?

  1. 人眼对色度分层敏感度远低于亮度 Y;
  2. 多数 ISP 默认仅 Y 通道开启 Dither,Cb/Cr 关闭,节省硬件逻辑;
  3. 高端航拍 / 影视设备:CbCr 同样开启低幅值抖动,消除渐变色彩条纹。

五、工程权衡:Dither 的副作用与调参策略

1. 负面副作用

  1. 画面静态噪点提升:低光暗区本身信噪比差,开启 Dither 会让暗部颗粒感加重;
  2. 编码压缩效率下降:抖动引入高频细微噪声,H.264/H.265 编码码率小幅上升;
  3. 极纯净纯色画面出现细微网格 / 雪花。
相关推荐
大熊背2 个月前
近期遇到的一些问题总结(四)
算法·拍照·白平衡·isp pipeline
大熊背4 个月前
ISP离线模式应用(二)-如何利用 ISP 离线模式 加速 3DNR 收敛
linux·算法·rtos·isp pipeline·3dnr
大熊背5 个月前
LSC(Lens Shading Correction,镜头阴影校正)是 ISP pipeline 中的位置以及原因(一)
isp pipeline·lsc
大熊背5 个月前
APEX自动曝光调整逻辑
apex·自动曝光·isp pipeline
大熊背5 个月前
工业级 ISP 常用压缩算法设计原理
压缩·isp pipeline·3dnr
大熊背5 个月前
工业级 ISP 常用压缩算之二
压缩·isp pipeline·3dnr
大熊背5 个月前
工业级 ISP 常用压缩算法设计原理之三
压缩·isp pipeline·3dnr
大熊背6 个月前
子采样残差压缩(Subsampled Residual Compression)原理
压缩·isp pipeline·3dnr
大熊背6 个月前
ISP Pipeline 需要多次 DDR 读写以及一些行buffer缓冲原因
isp pipeline·行缓冲