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

IspPipeline高位宽转低位宽色带消除的Dither 抖动技术介绍 Dither 抖动技术深度详解高位宽转 8bit 消除色带一、高位宽转低位宽出现色带Banding的原因1. 量化误差本质位宽压缩 量化把连续的亮度 / 色彩区间映射到离散有限阶梯。 以你 ISP 场景举例10bit Y 通道0~1023共 1024 级灰阶压缩到 8bit0~255仅 256 级10bit 每 4 个连续数值会被映射到同一个 8bit 值0/1/2/3→0、4/5/6/7→1……中间被合并的像素会丢失细微亮度差原本平滑渐变的天空、墙面、肤色会出现一圈一圈清晰的分层条纹就是色带 Banding。2. 量化误差数学模型设高位宽原始值为 X量化低位宽输出为 (Q(X))量化误差无抖动时同一量化区间内所有像素误差完全相同整片区域统一偏亮 / 偏暗人眼对这种固定系统性误差极其敏感肉眼直接看见分层条纹。举 10bit→8bit 线性映射例子 原始 Y4,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 时 step4无 Dither vs 有 Dither 对比无抖动同一量化区间全部像素误差一致 → 规整、连续、可见的色带条纹加微小抖动噪声同一区间内像素叠加随机小幅偏移有的向上量化、有的向下量化整体平均亮度不变但局部离散化分层边界 人眼会将细密均匀噪声融合感知到平滑渐变无法分辨原本清晰的色带。关键约束抖动噪声幅值必须小于 1 个量化步长10bit 转 8bit 量化步长 4抖动幅值一般取 ±1、±2不超过一个完整量化台阶噪声不能过大否则画面出现明显颗粒噪点损失干净画质噪声不能过小无法打散量化误差消除不了色带。三、主流 Dither 分类分类 1随机抖动 Random Dither最简单部分低端 ISP 内置实现逻辑 每个像素叠加独立随机整数噪声范围 \([-step/2,\;step/2]\)再做量化舍入。 10→8bit step4噪声范围-2,-1,0,1,2优缺点优点硬件实现极简只需要一个线性反馈移位寄存器 LFSR 生成伪随机数缺点纯随机噪声会让画面出现轻微雪花噪点信噪比小幅下降适用场景低成本摄像头、预览流对静态画质要求不高的场景。分类 2有序抖动 Ordered DitherISP 最常用硬件流水线友好也叫矩阵抖动预定义固定 N×N 噪声模板2x2/4x4 矩阵按像素坐标循环复用噪声不需要随机发生器时序稳定、无随机雪花。 经典 2x2 抖动矩阵幅值 0~3适配 step4 量化逐行逐像素按坐标取矩阵值叠加到原始像素再量化。优势纯查表实现硬件无延时流水线友好适合 RGB2YCbCr、GBCE 输出端实时插入噪声呈规律细密网格视觉上比纯随机噪点更柔和静态画面无闪烁劣势极端纯色背景下近距离细看能发现微弱网格纹理工程适配你文档中 10bit Y 转 8bit 输出绝大多数 ISP 在 Clip 截断前插入 2x2 有序抖动模块。分类 3误差扩散抖动 Error Diffusion画质最优硬件成本高代表算法Floyd-Steinberg 不提前加噪声量化后把当前像素的量化误差分摊扩散到相邻未处理像素。原理 像素量化产生误差 e按比例分给右、下、右下邻域7/16 传给右侧3/16 传给左下5/16 传给正下方1/16 传给右下效果消除色带能力最强渐变过渡极其平滑几乎看不到噪点短板需要行缓存存储邻域误差占用片上 RAM串行处理破坏 ISP 并行流水线延时高使用场景仅静态图片抓拍、高端工业相机视频实时流很少使用。四、结合 ISP 流程Dither 插入位置10bit→8bit 场景对应两份框图数据流10bit Y_out(RGB2YCbCr) → GBCE模块 → 量化压缩(10→8bit) → Dither → ClipU8 → 8bit输出gamma校正的时候比如12bit转到10bit的时候在校正的叠加取整后和实际值之间的误差做到类似去抖动的功能。标准硬件流水线插入点GBCE Mode1LUT 映射LUT 输出本身 8bit一般不需要抖动GBCE Mode2 / GBCE Off线性 10→8bit 压缩移位 四舍五入之后、Clip 饱和截断之前插入 Dither 流程拆解GBCE Off 模式10bit0-1023亮度缩放线性量化产生量化分层误差叠加小幅抖动噪声 D±1~±2ClipU8 限幅到 0~255 输出 8bit Y为什么放在 Clip 前叠加噪声后数值可能短暂超出 0/255 边界由后级 Clip 统一饱和截断不会出现数值溢出。Cb/Cr 色度通道是否需要 Dither人眼对色度分层敏感度远低于亮度 Y多数 ISP 默认仅 Y 通道开启 DitherCb/Cr 关闭节省硬件逻辑高端航拍 / 影视设备CbCr 同样开启低幅值抖动消除渐变色彩条纹。五、工程权衡Dither 的副作用与调参策略1. 负面副作用画面静态噪点提升低光暗区本身信噪比差开启 Dither 会让暗部颗粒感加重编码压缩效率下降抖动引入高频细微噪声H.264/H.265 编码码率小幅上升极纯净纯色画面出现细微网格 / 雪花。