SVT-AV1学习-svt_aom_get_sg_filter_level,svt_av1_selfguided_restoration_c

发布于:2025-04-11 ⋅ 阅读:(37) ⋅ 点赞:(0)

SVT-AV1学习-svt_aom_get_sg_filter_level,svt_av1_selfguided_restoration_c

一 函数的作用

根据编码模式输入分辨率快速解码标志动态计算引导恢复(Self Guide Restoration)过滤器启动级别以下详细解析

1 参数说明

EncMode enc_mode 编码模式(如ENC_MO,ENC_M3等, 通常表示编码复杂度,数值越小模式越低)

uint8_t input_resolution 输入视频 分辨率范围(如INPUT_SIZE_8k_RANGE,

INPUT_SIZE_360p_RANGE等)

uint8_t fast_decode 快速解码标志

2 核心逻辑

根据编码模式设置初始化过滤级别

if (enc_mode <= ENC_M0)

sg_filter_lvl = 1;

else if (enc_mode <= ENC_M3)

sg_filter_lvl = 3;

else

sg_filter_lvl = 0;

编码模式(如ENC_M0) 优先保证图像质量启用过滤(强度1)

中低编码模式(如ENC_M3) 进一步优化质量启用更强过滤

编码模式 性能优先关闭滤镜

根据分辨率快速解码调整过滤级别

if (input_resolution >= INPUT_SIZE_8K_RANGE ||

(fast_decode && !(input_resolution <= INPUT_SIZE_360p_RANGE)))

sg_filter_lvl = 0;

分辨率 >= 8k. 关闭滤镜

二 sg filter详解

Self-Guide 滤波器是一种用于图像视频恢复技术旨在通过结合两个初始过滤帧X1X2改善图像质量总结

1 SGF目的

设计用于获取两个初始化过滤X1X2通过他们来恢复最终图像X

2 最终恢复公式

最终恢复X1退化样本XX1X2X差值组合公式如下

Xr = X + a(X1-X) + b(X2-X)

3 编码器参数计算

ab使用最小均方差方法计算得到

a,b^T = (A^T A)^-1 A^Tb

其中AX1-XX2-X组成矩阵b原始样本向量y减去样本向量x结果

4 引导滤波器控制参数

X1X2使用引导滤波得到半径参数r噪声参数e控制

r的较大意味更高空间方差e较大值意味更高范围方差

5 SGF应用

编码器需要r1,e1,r2,e2,ab信号传输比特流

6 初始过滤派生步骤

分别X1X2生成提供(r,e)

计算过滤像素中心窗口输入样本均值u方差sigma^2.

使用如下公式计算每个样本过滤样本

X' = sigma ^2/(sigma ^ 2 + e) + e/(sigma^2 + e) * u

使用过滤样本x'LRU每个样本生成X1X2

7 SGF最终应用

使用如下方程信号传输(a,b)应用SGF

Xr = X + a(X1 - X) + b(X2-X)

SGF通过结合退化样本粗略恢复样本差异以及通过引导滤波得到两个初始过滤帧优化图像质量这种方法允许保持图像细节同时减少噪声压缩伪影

三 滤波函数svt_av1_selfguided_restoration_c

svt_av1_selfguided_restoration_c 函数SVT-AV1编码器用于执行自引导恢复(Self-Guided Restoration,SGR)函数以下函数参数解释功能说明

参数解释

dgd8: 指向输入图像数据指针, 表示需要恢复图像

width 输入图像宽度

height 输入图像高度

dgd_stride 输入图像步长每行像素字节数

flt0 指向第一个过滤器指针用于存储过滤后图像数据

flt1 指向第二个过滤器指针用于存储过滤后图像数据

flt_stride 过滤器补偿每行过滤器数据字节数

sgr_params_idx 自引导恢复参数索引用于特定恢复参数

bit_depth 图像深度

highbd 是否使用高比特深度处理

svt_av1_selfguided_restoration_c函数注释

void svt_av1_selfguided_restoration_c(const uint8_t *dgd8, int32_t width, int32_t height, int32_t dgd_stride,
                                      int32_t *flt0, int32_t *flt1, int32_t flt_stride, int32_t sgr_params_idx,
                                      int32_t bit_depth, int32_t highbd)

{

//定义一个局部数组用于存储扩展后图像数据包括边界扩展部分

int32_t dgd32_[RESTORATION_PROC_UNIT_PELS];

//计算扩展图像步长包括水平方向边界扩展

const int32_t dgd32_stride = width + 2 * SGRPROJ_BORDER_HORZ;

//指向扩展图像数据指针初始位置指向扩展区域中心

int32_t *dgd32 = dgd32_ + dgd32_stride * SGRPROJ_BORDER_VERT + SGRPROJ_BORDER_HORZ;

//如果高比特深度处理

if (highbd) {

//输入图像数据转换16指针

const uint16_t *dgd16 = CONVERT_TO_SHORTPTR(dgd8);

//图像进行垂直方向边界扩展

for (int32_t i = -SGRPROJ_BORDER_VERT; i < height + SGRPROJ_BORDER_VERT; ++i) {//图像进行水平方向的边界扩展

for (int32_t j = -SGRPROJ_BORDER_HORZ; j < width + SGRPROJ_BORDER_HORZ; ++j)

//扩展后的图像数据存储dgd32数组

dgd32[i * dgd32_stride + j] = dgd16[i * dgd_stride + j];

}

} else {

//对图像进行垂直方向边界扩展

for (int32_t i = -SGRPROJ_BORDER_VERT; i < height + SGRPROJ_BORDER_VERT; ++i) {//图像进行水平边界扩展

for (int32_t j = -SGRPROJ_BORDER_HORZ; j < width + SGRPROJ_BORDER_HORZ; ++j)

//扩展图像数据存储dgd32数组中

dgd32[i * dgd32_stride + j] = dgd8[i * dgd_stride + j];

}

}

//获取自引导恢复参数根据参数索引sgr_params_idx预定参数获取

const SgrParamsType *const params = &svt_aom_eb_sgr_params[sgr_params_idx];

// If params->r == 0 we skip the corresponding filter. We only allow one of

// the radii to be 0, as having both equal to 0 would be equivalent to

// skipping SGR entirely.

//断言确保两个半径参数至少有一个部位0否则自引导恢复没有意义

assert(!(params->r[0] == 0 && params->r[1] == 0));

//如果第一个半径参数0 执行快速自引导恢复

if (params->r[0] > 0)

selfguided_restoration_fast_internal(

dgd32, width, height, dgd32_stride, flt0, flt_stride, bit_depth, sgr_params_idx, 0);

if (params->r[1] > 0)

//如果第二个半径参数0执行标准自引导恢复

selfguided_restoration_internal(

dgd32, width, height, dgd32_stride, flt1, flt_stride, bit_depth, sgr_params_idx, 1);

}

边界扩展 处理图像为了处理图像边界像素通常会进行边界扩展这里SGRPROJ_BORDER_VERTSGRPROJ_BORDER_HORZ 定义了垂直和水平方向的扩展宽度。

比特深度处理 highbd参数指示是否使用高比特深度处理如果是输入数据16整形表示否则8无符号字符表示

自引导恢复参数 sgr_params_idx 用于定义参数表中选择自引导恢复参数这些参数定义了恢复过程关键参数半径

断言 assert 用于确保两个半径参数至少有一个部位0否则自引导恢复无意义

恢复函数 selfguided_restoration_fast_internal selfguided_restoration_internal 分别用于快速标准自引导恢复处理


网站公告

今日签到

点亮在社区的每一天
去签到