目录
[0. 一句话核心原理](#0. 一句话核心原理)
[1. 分块原理(决定随机访问能力)](#1. 分块原理(决定随机访问能力))
[1.1 为什么必须分块?](#1.1 为什么必须分块?)
[1.2 工业标准块大小](#1.2 工业标准块大小)
[2. 压缩流程(逐步骤细化原理)](#2. 压缩流程(逐步骤细化原理))
[步骤 1:读取一个 16×4 块像素](#步骤 1:读取一个 16×4 块像素)
[步骤 2:DPCM 预测与残差计算(缩小动态范围)](#步骤 2:DPCM 预测与残差计算(缩小动态范围))
[步骤 3:统计残差块的 Min / Max / Range](#步骤 3:统计残差块的 Min / Max / Range)
[步骤 4:根据 Range 自适应选择位宽模式](#步骤 4:根据 Range 自适应选择位宽模式)
[步骤 5:残差归一化( you wanted: Base + Res )](#步骤 5:残差归一化( you wanted: Base + Res ))
[步骤 6:位打包 Bit Packing(紧凑存储)](#步骤 6:位打包 Bit Packing(紧凑存储))
[步骤 7:添加块头](#步骤 7:添加块头)
[步骤 8:写入 DDR 并维护块地址表](#步骤 8:写入 DDR 并维护块地址表)
[3. 解压缩流程(逐步骤细化原理)](#3. 解压缩流程(逐步骤细化原理))
[步骤 1:像素坐标 → 块定位](#步骤 1:像素坐标 → 块定位)
[步骤 2:解析块头](#步骤 2:解析块头)
[步骤 3:位解包 Bit Unpacking](#步骤 3:位解包 Bit Unpacking)
[步骤 4:恢复原始残差](#步骤 4:恢复原始残差)
[步骤 5:IDPCM 逆预测重建像素](#步骤 5:IDPCM 逆预测重建像素)
[步骤 6:输出重建像素到 3DNR](#步骤 6:输出重建像素到 3DNR)
[4. 关键原理总结](#4. 关键原理总结)
[4.1 分块原理](#4.1 分块原理)
[4.2 压缩原理](#4.2 压缩原理)
[4.3 解压缩原理](#4.3 解压缩原理)
[4.4 核心价值原理](#4.4 核心价值原理)
自适应位宽(Adaptive Bit-depth, ABD) 的原理,主要流程:分块规则 → 压缩全流程 → 解压缩全流程。
0. 一句话核心原理
把图像切成固定大小的独立小块,对每块统计动态范围,只分配刚好能表示该块的最小位宽,用 "基值 + 残差" 方式紧凑存储,实现块独立、可随机访问、近无损压缩。
它是为 ISP 帧缓存 / 3DNR 参考帧 设计的专用压缩,不是通用压缩。
1. 分块原理(决定随机访问能力)
1.1 为什么必须分块?
- 整帧压缩无法随机读取一小块(随机访问)。
- 块必须独立编码、独立解码、无跨块依赖。
- 块大小要适配 ISP 行流水线 与 DDR 突发长度。
1.2 工业标准块大小
最常用:16×4(宽 16,高 4)其他可选:8×4、4×4
分块方式(光栅分块)
- 横向块数 = 图像宽度 ÷ 16
- 纵向块数 = 图像高度 ÷ 4
- 所有块按从左到右、从上到下顺序排列
块独立性
- 块 A 的编码不依赖块 B 的任何像素
- 想读任意像素 → 只需要读取它所在的一个块
- 这是 ABD 能用于 3DNR 随机参考读取 的根本原因
2. 压缩流程(逐步骤细化原理)
以 16×4 块、8bit 像素、左向 DPCM 为例。
步骤 1:读取一个 16×4 块像素
输入块结构:
plaintext
P00 P01 P02 ... P015
P10 P11 P12 ... P115
P20 P21 P22 ... P215
P30 P31 P32 ... P315
共 64 像素。
步骤 2:DPCM 预测与残差计算(缩小动态范围)
目的:让残差数值尽可能小,更容易进入低位宽模式。
规则:
- 每行第一个像素:Res=Px,y
- 其余像素:左向预测Pred=Px−1,yRes=Px,y−Pred
- 差值为负时做无符号化 :
Res += 256
原理:
图像局部空间强相关,预测后残差 Range 大幅缩小,大部分区域残差接近 0。
步骤 3:统计残差块的 Min / Max / Range
对 64 个残差计算:Min=min(Res0...Res63)Max=max(Res0...Res63)Range=Max−Min
Range 决定该块能压到多低位宽。
步骤 4:根据 Range 自适应选择位宽模式
典型量产模式表(组合逻辑查表):
| Range | 分配位宽 | 模式 (2bit) |
|---|---|---|
| 0~3 | 2bit | 00 |
| 4~15 | 4bit | 01 |
| 16~63 | 6bit | 10 |
| ≥64 | 8bit | 11(Bypass) |
原理:
找到满足 2N−1≥Range 的最小 N。
步骤 5:残差归一化( you wanted: Base + Res )
Resnorm=Res−Min
- Min 称为 Base(基值)
- 归一化后残差一定落在 [0, Range]
- 刚好可以用选定的位宽无损表示
步骤 6:位打包 Bit Packing(紧凑存储)
将 64 个归一化残差按 bit 连续排列 ,不按 8bit 字节对齐。
例:4bit 模式
- 64 像素 × 4bit = 256bit = 32Byte
- 原始 8bit 需要 64Byte
- 压缩比 = 2.0×
硬件原理:
多级移位 + 或门阵列,并行打包,无状态、固定延迟。
步骤 7:添加块头
每个块前固定头格式:
plaintext
[2bit Mode][8bit Base]
最终压缩块物理格式:
plaintext
Mode(2bit) + Base(8bit) + Packed_Residuals
步骤 8:写入 DDR 并维护块地址表
- 每个压缩块写入 DDR
- 建立块号 → DDR 地址的索引表
- 支持后续随机寻址读取任意块
3. 解压缩流程(逐步骤细化原理)
步骤 1:像素坐标 → 块定位
给定 (x,y):
- 块列号 = x ÷ 16
- 块行号 = y ÷ 4
- 查块地址表 → 得到该块在 DDR 的物理地址
- 从 DDR 只读出这一个块
步骤 2:解析块头
从压缩块头部取出:
- Mode(2bit)→ 确定解包位宽
- Base(8bit)→ 残差偏移
步骤 3:位解包 Bit Unpacking
按 Mode 指定位宽,从比特流中逐像素恢复 Resnorm。
纯组合逻辑:移位 + 掩码 + 拼接。
步骤 4:恢复原始残差
Res=Resnorm+Base
步骤 5:IDPCM 逆预测重建像素
- 每行第一个像素:Px,y=Res
- 其余像素:Px,y=Px−1,y+Res
- 超出 0~255 时取模还原
步骤 6:输出重建像素到 3DNR
块重建完成,送后续处理。
4. 关键原理总结
4.1 分块原理
- 固定大小 16×4 独立块
- 块间无依赖 → 支持随机访问
- 适配 ISP 行流水线与 DDR 突发
4.2 压缩原理
- 分块
- DPCM 预测 → 缩小残差范围
- 统计 Min/Max/Range
- 自适应选择最小合法位宽
- Base + 残差归一化
- Bit Packing 紧凑存储
- 附加块头
- 写入 DDR 并维护地址表
4.3 解压缩原理
- 坐标 → 块寻址
- 读块、解析 Mode + Base
- Bit Unpacking 恢复残差
- 残差 + Base 还原
- IDPCM 重建像素
- 输出到 3DNR
4.4 核心价值原理
- 块独立 → 随机访问
- 自适应位宽 → 高压缩比
- Base + 残差 → 无损 / 近无损
- DPCM → 进一步提升压缩率
- 固定最大长度 → DDR 带宽可预测
- 全组合逻辑 → 硬件友好、固定低延迟
自适应位宽是一种块级、独立、近无损、支持随机访问的帧缓存压缩技术。
- 分块:16×4 固定独立块。
- 压缩:DPCM 预测 → 统计 Range → 自适应位宽 → Base + 残差 → 位打包。
- 解压:解析块头 → 位解包 → 残差恢复 → IDPCM 重建。
- 优势:随机访问、低延迟、硬件友好、不影响 3DNR 去噪效果。