工业级 ISP 常用压缩算法设计原理

目录

一、为什么通用压缩算法不能用?(核心痛点)

[二、工业级 ISP 压缩的核心设计原理](#二、工业级 ISP 压缩的核心设计原理)

[原则 1:分块独立编码 (Tile-Coding)](#原则 1:分块独立编码 (Tile-Coding))

[原则 2:自适应位宽 (Adaptive Bit-depth)](#原则 2:自适应位宽 (Adaptive Bit-depth))

[原则 3:固定带宽约束 (Fixed Budget)](#原则 3:固定带宽约束 (Fixed Budget))

[原则 4:像素紧凑打包 (Pixel Packing)](#原则 4:像素紧凑打包 (Pixel Packing))

三、典型硬件架构与数据流

[3.1 硬件模块组成](#3.1 硬件模块组成)

[3.2 3DNR 参考帧写入流程](#3.2 3DNR 参考帧写入流程)

[3.3 3DNR 参考帧读取流程](#3.3 3DNR 参考帧读取流程)

四、经典算法实现详解(以通用自适应模板为例)

[Step 1:块头定义 (Header)](#Step 1:块头定义 (Header))

[Step 2:差分脉冲编码调制 (DPCM)](#Step 2:差分脉冲编码调制 (DPCM))

[Step 3:存储布局](#Step 3:存储布局)

[五、这种设计对 3DNR 的独特价值](#五、这种设计对 3DNR 的独特价值)

六、总结


通用压缩算法(如 JPEG、LZ77、H.264)绝对不能用于 ISP 实时帧缓存 ,因为它们无法支持随机访问(Random Access)

真正在SoC/ISP/DPU 芯片中量产的参考帧压缩技术,统称为帧内无损 / 近无损、基于块的自适应压缩算法


一、为什么通用压缩算法不能用?(核心痛点)

在 ISP Pipeline 中,3DNR、AF、AWB 等模块访问内存不是按顺序从头到尾读,而是随机跳跃的。

特性 通用压缩 (JPEG/DEFLATE) 工业级帧缓存压缩 (Tile-Based)
数据流 串行流,依赖前后文 独立块,无跨块依赖
随机访问 必须从头解压到目标位置,延时爆炸 定位块地址 -> 直接解压单块,延时 < 1 周期
错误扩散 1bit 错误导致整图花屏 错误仅限当前小块,鲁棒性极高
带宽控制 压缩比浮动大,DDR 带宽不可控 设定压缩上限,保证最坏情况不爆带宽
硬件实现 复杂,需大缓存 极简,流水线友好

结论 :ISP 参考帧压缩的第一准则是 ------必须支持任意 8x8/16x4 像素块的独立解码,且解码延迟固定。


二、工业级 ISP 压缩的核心设计原理

所有量产方案(如高通 HXCR、三星 MBZ、ARM Frame Buffer Compression)都遵循以下四大黄金原则

原则 1:分块独立编码 (Tile-Coding)

将一帧图像切割成固定大小的微小像素块。

  • 标准块大小4x4、8x4、16x4(高度通常为 1,适配行扫描)。
  • 原理:每一块的数据头 + 数据独立存储。
  • 访问逻辑
    1. 根据像素坐标计算块索引。
    2. 通过 ** 索引表(Lookup Table)** 查到该块在 DDR 中的物理地址。
    3. 仅读取该块的几十字节数据。
    4. 硬件解码器即时解压。
  • 优势:想读哪里读哪里,完全模拟原始未压缩内存的访问习惯。

原则 2:自适应位宽 (Adaptive Bit-depth)

利用图像空间相关性,计算块内像素的动态范围,只分配够用的位数。

  • 步骤
    1. 计算块内最大值 Max 和最小值 Min
    2. 计算差值 Range = Max - Min
    3. 根据 Range 决定所需位宽(如 2bit、4bit、6bit、8bit)。
    4. 块头记录 Base 值(Min)和位宽模式。
    5. 像素数据存储为相对于 Base 的残差。
  • 数学模型Pixel = Base + Resample(Residual)
  • 优势 :平坦区域(如天空)压得很小,纹理区域保持清晰,视觉无损

原则 3:固定带宽约束 (Fixed Budget)

这是芯片稳定运行的关键。

  • 原理:强制规定每个块的最大存储字节数。
  • 策略
    • 如果压缩后小于预算,填充 0 或截断。
    • 如果难以压缩(如噪点极大的块),直接旁路(Bypass),即不压缩原样存储。
  • 优势:DDR 控制器可以精确计算最坏情况下的带宽,避免带宽溢出导致的 Pipeline 卡死。

原则 4:像素紧凑打包 (Pixel Packing)

摒弃标准的 8 位字节对齐,利用位拼接引擎实现比特级紧凑存储。

  • 示例 :一个 16x4 块,自适应为 4bit / 像素。
    • 总数据量 = 16 * 4 * 4bit = 256bit = 32Byte
    • 硬件直接连续打包写入 DDR,无字节空隙。

三、典型硬件架构与数据流

3.1 硬件模块组成

  1. 地址转换单元(ATU)
    • 维护块地址表。记录每一个压缩块存在 DDR 的哪个位置。
    • 负责虚拟像素坐标 -> 物理 DDR 地址的转换。
  2. 压缩 / 解压缩引擎(CODEC)
    • 纯组合逻辑或短流水线,无帧缓存
    • 并行处理多个 Tile。
  3. DDR 控制器
    • 以 Burst 方式读写压缩块。

3.2 3DNR 参考帧写入流程

  1. 当前帧输出送入压缩引擎
  2. 按 16x4 切分 Tile。
  3. 逐 Tile 进行自适应预测、残差计算、位宽压缩。
  4. 将压缩后的数据写入 DDR。
  5. 将该 Tile 的起始地址更新到ATU 块地址表

3.3 3DNR 参考帧读取流程

  1. 3DNR 模块需要读取(x, y)处的参考像素。
  2. 向 ATU 发送坐标请求。
  3. ATU 计算出 Tile 索引,查表得到 DDR 地址。
  4. 从 DDR 读取该单个压缩块
  5. 解压缩引擎即时解压出 16x4 像素块。
  6. 送出目标像素给 3DNR 计算。
  7. 整个过程仅需读取几十字节,而非整帧数据。

四、经典算法实现详解(以通用自适应模板为例)

我们以最常见的16x4 块、2bit 模式头为例,讲解内部编码细节:

Step 1:块头定义 (Header)

每个块前固定 2bit,指示编码模式:

  • 00:Bypass 模式(8bit / 像素,共 64Byte)
  • 01:6bit 模式(共 48Byte)
  • 10:4bit 模式(共 32Byte)
  • 11:2bit 模式(共 16Byte)

Step 2:差分脉冲编码调制 (DPCM)

为了提高压缩效率,块内并非直接存残差,而是使用前向预测

plaintext

复制代码
Predicted Pixel = Left Neighbor Pixel
Residual = Current Pixel - Predicted Pixel
  • 第一个像素使用绝对数值。
  • 后续像素存储与左边像素的差值。
  • 由于差值通常很小,更低位宽即可表示。

Step 3:存储布局

plaintext

复制代码
[2bit Mode][Base Value][Residual Data (Packed)]
  • 解压时,先读 Mode,确定位宽;再读 Base,逐像素重建。

五、这种设计对 3DNR 的独特价值

  1. 运动估计精准 :由于是帧内压缩,不涉及帧间预测,不会引入额外的运动矢量误差,保证了 3DNR 运动检测的准确性。
  2. 抑制噪声漂移:采用近无损压缩,不会像视频编码那样产生振铃效应,避免噪声被压缩算法放大后带入下一帧,导致噪声累积。
  3. 低时延反馈:3DNR 计算当前行时,能瞬间解压出参考帧对应行的块,完美匹配流水线时序,无需额外的行缓冲缓存整行解压数据。

六、总结

工业级 ISP 参考帧压缩,本质上是一种 "带地址索引的、分块的、自适应位宽的 DPCM 打包存储系统"。

它牺牲了极致的压缩比(通常压缩比在 1.5x~2.5x),换取了等同于未压缩内存的随机访问能力硬件级的实时性。这是在 DDR 带宽、芯片面积、图像质量三者之间做出的最优工程妥协,也是现代高清 ISP 能够实时运行 3DNR 的底层技术支柱。

相关推荐
大熊背1 天前
工业级 ISP 常用压缩算之二
压缩·isp pipeline·3dnr
大熊背2 天前
工业级 ISP 常用压缩算法设计原理之三
压缩·isp pipeline·3dnr
大熊背5 天前
子采样残差压缩(Subsampled Residual Compression)原理
压缩·isp pipeline·3dnr
大熊背6 天前
ISP Pipeline 需要多次 DDR 读写以及一些行buffer缓冲原因
isp pipeline·行缓冲
大熊背8 天前
ISP 节点 DDR 读写位置图
ddr·isp pipeline
ae_zr10 天前
QT静态库如何使用
qt·压缩·静态exe
有梦想的攻城狮22 天前
kafka消息在发送时通过压缩算法进行压缩,在Broker是否会进行解压缩
分布式·kafka·压缩·lz4
初级代码游戏22 天前
C#:程序发布的大小控制 裁剪 压缩
c#·.net·dotnet·压缩·大小·发布·裁剪
lpfasd1232 个月前
压缩与解压缩原理全解
压缩