4.4 调色板预测(Palette)

作者:chai51
出处:https://www.cnblogs.com/chai51
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

引言

调色板预测(Palette Prediction)是AV1帧内预测中的一种特殊预测模式,使用颜色索引来预测块,适合颜色数量较少的区域(如屏幕内容、图形界面、文本等)。它通过维护一个颜色调色板,然后用索引来表示每个像素的颜色。

源码说明: 本文档基于作者自己编写的AV1解码器Python实现,所有代码示例和实现细节均来自实际可运行的源码。源码仓库:GitHub - av1_learning


调色板预测概述

位置: src/frame/decoding_process.py - predict_palette()

规范文档: 7.11.2.7 Palette prediction process

功能说明

调色板预测使用颜色索引来预测块,适合颜色数量较少的区域(如屏幕内容、图形界面、文本等)。它通过维护一个颜色调色板,然后用索引来表示每个像素的颜色。

应用场景

  • 屏幕内容编码:图形界面、文本、图标等
  • 颜色数量少的区域:大面积单色或少量颜色的区域
  • 高压缩比需求:当颜色种类远少于像素数量时

调色板语法解码

位置: src/tile/tile_group.py - __palette_mode_info()

解码流程

  1. 检查条件

    if (tile_group.MiSize >= SUB_SIZE.BLOCK_8X8 and
        Block_Width[tile_group.MiSize] <= 64 and
        Block_Height[tile_group.MiSize] <= 64 and
        frame_header.allow_screen_content_tools):
        self.__palette_mode_info(av1)
    
  2. 解码调色板大小

    palette_size = read_S(av1, 'palette_size')
    tile_group.PaletteSizeY = palette_size
    
  3. 解码调色板颜色

    for i in range(palette_size):
        tile_group.PaletteColorsY[i] = read_S(av1, 'palette_color')
    
  4. 解码颜色索引映射

    self.__palette_tokens(av1)  # 解码ColorIndexMap
    

预测流程

  1. 解码调色板

    • 解码调色板颜色(PaletteColors)
    • 调色板大小通常在2-8之间
  2. 解码颜色索引

    • 解码颜色索引映射(ColorIndexMap)
    • 每个像素对应一个索引值
  3. 生成预测

    pred[i][j] = PaletteColors[ColorIndexMap[i][j]]
    

调色板预测流程图

graph TD A[调色板预测开始] --> B{满足调色板条件?} B -->|否| C[跳过调色板预测] B -->|是| D[解码调色板大小<br/>PaletteSize] D --> E[解码调色板颜色<br/>PaletteColors] E --> F[解码颜色索引映射<br/>ColorIndexMap] F --> G[遍历每个像素位置] G --> H[根据索引获取颜色<br/>pred = PaletteColors index] H --> I{还有像素?} I -->|是| G I -->|否| J[调色板预测完成] C --> K[使用其他预测模式] style A fill:#e1f5ff style B fill:#fff9c4 style J fill:#c8e6c9

调色板预测的优势

  1. 高压缩比:当颜色种类少时,索引编码比直接编码颜色值更高效
  2. 精确表示:对于屏幕内容,可以精确表示每个像素的颜色
  3. 快速解码:索引查找操作简单快速

总结

调色板预测适合屏幕内容编码,通过颜色索引实现高压缩比,能够精确表示少量颜色的区域。它是AV1帧内预测体系的重要补充,特别适合处理图形界面、文本、图标等屏幕内容。


参考资源:

上一篇: 基本帧内预测
下一篇: CFL预测

posted @ 2026-01-10 07:50  chai51  阅读(2)  评论(0)    收藏  举报