文档章节

嵌入式 量化参数QP和量化步长Qstep

j
 jane_linux
发布于 2017/06/07 10:49
字数 1568
阅读 38
收藏 0
点赞 0
评论 0

转载,虽然矩阵计算看不懂了,但是可以记录一下

H.264编解码器中,量化参数QP和量化步长Qstep的关系:

量化步长Qstep共有52个值。(对于亮度编码而言)

量化参数QP是量化步长Qstep的序号,取值0~51。

QP取最小值0 时,表示量化最精细;相反,QP取最大值51时,表示量化是最粗糙的。

Qstep随着QP的增加而增加,QP每增加6,Qstep增加一倍。

对于色度编码,QP的最大值是39。

RT.假设源和输出都是8bit.

 

QP Qstep
0 0.625
1 0.6875
2 0.8125
3 0.875
4 1
5 1.125
6 1.25
7 1.375
8 1.625
9 1.75
10 2
11 2.25
12 2.5
13 2.75
14 3.25
15 3.5
16 4
17 4.5
18 5
19 5.5
20 6.5
21 7
22 8
23 9
24 10
25 11
26 13
27 14
28 16
29 18
30 20
31 22
32 26
33 28
34 32
35 36
36 40
37 44
38 52
39 56
40 64
41 72
42 80
43 88
44 104
45 112
46 128
47 144
48 160
49 176
50 208
51 224

對於YUV 4:2:0的顏色空間,luma分量的qp範圍為0-51,chroma分量的qp範圍為0-39

其中,qp就是x264 --qp中的那個qp. quantization parameter,Qstep是量化步長,即:

Zij=round(Wij/Qstep)

其中Wij代表一個宏塊(macroblock)經DCT變換后的係數.這個宏塊在h264標準鐘可以是16x16,16x8,8x16,8x8,8x4,4x8,4x4等大小,其來源可以是I幀或者P/B幀的殘差值等等.

這裡同樣和JPEG標準不同,每個宏塊採用相同的量化步長量化.

QP和ln(Qstep)具有線性相關性,每當QP值增加6,Qstep便增加一倍.

因此當raw源中每當某分量每像素平均比特數增加一,最大QP值便可以增加6;反之如果減少一,最大QP值便應該減少6.這一點在x264源碼中也有體現.

因此10bit視頻的luma(亮度)分量其最大量化值就是51+2*6=63.

此外也可以看到當x264 --qp 0時並不是嚴格意義上的無損編碼,只不過是0.625的量化步長幾乎難以產生量化噪聲,因此可以近似看成無損編碼.

而x264的crf和2pass碼率控制模式就是通過marco-block tree等工具,採用一定的預測算法,考慮人眼對不同內容的敏感程度,來確定不同宏塊/幀的量化值,從而完成最終成品的碼率控制的

变换与量化

1、   变换量化的过程如图3-1所示:

2、 H.264 对4×4 的图像块(亮度块或Cr、Cb 色度块)进行操作,则相应的4×4DCT 变换矩阵A为:

,则:

H.264 对4×4DCT 中的进行了改造,采用整数DCT 技术,有效地减少计算量,同时不损失图像准确。上式可等效为:

其中,d=c/b(≈0.414)。符号“?”表示(CXCT)结果中的每个元素乘以矩阵中对应位置上的系数

值的运算。为了简化计算,取d 为0.5。同时又要保持变换的正交性,对b 进行修正,取b=√(2/5) 。对矩阵中的第2 行和第4 行,以及矩阵CT 中的第2 列和第4 列元素乘以2,相应地改造矩阵EEf,以保持原式成立,得到:

H.264 将DCT 中“?Ef”运算的乘法融合到后面的量化过程中,实际的DCT 输出为:

3、  量化:

 

4、 在H.264 中,量化步长Qstep 共有52 个值。如表3-1 所示。其中QP 是量化参数,是量化步长的序号,QP 每增加        6,Qstep 增加一倍。

表3-1

5、 量化步长是实际用来进行量化的值,量化参数只是量化步长的别名。

6、 亮度QP 的最大值是51,而色度QP 的最大值是39。

7、 H.264 量化过程还要同时完成DCT 变换中“?Ef”乘法运算,它可以表述为:

其中,Wij 是矩阵中的转换系数,PF 是矩阵Ef 中的元素,根据样本点在图像块中的位置(i, j)取值:

 

利用量化步长随量化参数每增加6 而增加一倍的性质,可以进一步简化计算。设:

qbits = 15 + floor(QP/6)。令

。于是:

这样,MF 可以取整数。表3-2 只列出对应QP 值为0 到5 的MF 值,对于QP 值大于5 的情况,只是qbits 值随QP 值每增加6 而增加1,而对应的MF 值不变。这样,量化过程则为整数运算,并且可以避免使用除法。

表3-2

具体量化过程的运算为:

 

其中sign()为符号函数;f 为偏移量,它的作用是改善恢复图像的视觉效果例如,对帧内预测图像块f 取2qbits/3,对帧间预测图像块f 取2qbits/6。

 

8、 如果当前处理的图像宏块是色度块或帧内16×16 预测模式的亮度块,则需要将其中各图像块的DCT 变换系数矩阵中的直流分量或直流系数W00 按对应图像块顺序排序,组成新的矩阵WD,再对WD 进行Hadamard 变换及量化。

9、 对亮度块WD 的Hadamard 变换为:

其中,YD 是Hadamard 变换结果。接着要对YD 再进行量化输出:

 

   10、对各色度块WD 的Hadamard 变换为:

       

       其中,YD 是Hadamard 变换结果。接着要对YD 再进行量化输出:

      

 

11、zig-zag扫描顺序如下图3-1:

         

 

         

帧模式                   

                                                                                                   场模式

                                                                                                   图3-1

                cbp是什么参数?

12、cbp一共6bit,高2bit表示cbpc (2:cb、cr中至少一个4x4块的AC系不全为0;1:cb、cr中至少一个2x2的DC系数不全为0;0:所有色度系数全0)。低4bit分别表示4个8x8亮度块,其中从最低一位开始的4位分别对应00,10,01,11位置的8*8亮度块。如果某位为1,表示该对应8*8块的4个4*4块中至少有一个的系数不全为0。 

13、level:幅值;run: 每个非零系数前面 0 的个数。

本文转载自:http://blog.sina.com.cn/s/blog_8795b0970101hyn8.html

共有 人打赏支持
j
粉丝 0
博文 10
码字总数 970
作品 0
x264源代码简单分析:宏块编码(Encode)部分

===================================================== H.264源代码分析文章列表: 【编码 - x264】 x264源代码简单分析:概述 x264源代码简单分析:x264命令行工具(x264.exe) x264源代码...

leixiaohua1020
2015/05/24
0
0
x264源代码简单分析:x264_slice_write()

===================================================== H.264源代码分析文章列表: 【编码 - x264】 x264源代码简单分析:概述 x264源代码简单分析:x264命令行工具(x264.exe) x264源代码...

leixiaohua1020
2015/05/17
0
0
X264 codec参数相关讲解

X264 codec相关讲解: 可能有人注意到了我使用的是x264的tmod..何为mod版...就是民间菊苣在官方x264的基础上又自行进行了一些编译修改..提升强化了一部分功能..本帖提供的是taro大编译的x26...

llf_17
2017/08/08
0
0
x264源代码简单分析:编码器主干部分-1

===================================================== H.264源代码分析文章列表: 【编码 - x264】 x264源代码简单分析:概述 x264源代码简单分析:x264命令行工具(x264.exe) x264源代码...

leixiaohua1020
2015/05/11
0
0
x264参数介绍---帧类型和码率控制

x264参数介绍---帧类型和码率控制 输入 用1个绝对路径定义输入文件(或者2个,rawYUV文件)。如下例: x264.exe -o NUL C:input.avs x264 -o /dev/null ~/input.y4m 如果输入文件是rawYUV格式...

北极心
2013/04/07
0
2
阿里巴巴:基于交替方向法的循环神经网络多比特量化 | ICLR 2018

雷锋网(公众号:雷锋网) AI 科技评论按:4 月 30 日至 5 月 3 日,被学术界广泛认可为「深度学习的顶级会议」的 ICLR 2018 在加拿大温哥华举办。阿里巴巴与北大合作的一篇论文《Alternating...

camel
05/06
0
0
ICLR 2018 | 阿里巴巴论文:基于交替方向法的循环神经网络多比特量化

  机器之心发布   作者:徐晨等      ICLR 2018 将于4 月 30 日在加拿大温哥华开幕,之前机器之心对此届大会的三篇获奖论文分别进行了介绍。在这篇文章中,我们介绍了阿里巴巴的一篇...

机器之心
04/28
0
0
编码原理(七) --回顾

1 DCT变换 经过DCT变换,实现了频率的集中。 2量化 经过量化,我们对DCT变换后的系数进行以QP=28的量化,此时得到了一些左上角集中了非零值的系数矩阵。 3 ZigZag扫描 ZigZag扫描,将二维的系...

mmlf
02/07
0
0
一种H.264高清视频的无参考视频质量评价算法(基于QP和跳过宏块数)

本文记录一种无参考视频质量评价算法。这是我们自己实验室前两年一个师姐做的,算法还是比较准确的,在此记录一下。 注意本算法前提是高清视频。而且是H.264编码方式。 该方法主要使用两个码...

leixiaohua1020
2013/12/08
0
0
专访 | 基于LSTM与TensorFlow Lite,kika输入法是如何造就的

近日,机器之心采访了 kika 的高级技术总监黄康,他向我们讲述了 kika 开发输入法 AI 引擎(项目代号:Alps)所采用的深度学习模型以及在移动端轻量化部署遇到的各种挑战。本文从输入法与语言...

机器之心
04/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell及python脚本方式登录服务器

一、问题 在工作过程中,经常会遇见需要登录服务器,并且因为安全的原因,需要使用交互的方式登录,而且shell、python在工作中也经常用到,并且可以提供交互的功能。都是利用了expect、spawn...

yangjianzhou
6分钟前
0
0
upstream sent too big header while reading...

nginx 报错:1736 upstream sent too big header while reading response header from upstream 1. 一般处理 location ~ \.php$ { #增加下面两句 fastcgi_buffer_size 128k; ......

dubox
17分钟前
0
0
Python解析配置文件模块:ConfigPhaser

import configparser as pa# [SectionA]# a = aa# b = bb# c = cc# [SectionB]# optionint = 1# optionfloat = 1.1# optionstring = string#https://www.cnblogs.com/a......

易野
23分钟前
0
0
Java基础——面向对象

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 Object的方法: clone() Object 克隆 to Strin...

凯哥学堂
25分钟前
0
0
rabbitmq学习记录(八)消息发布确认机制

RabbitMQ服务器崩了导致的消息数据丢失,已经持久化的消息数据我们可以通过消息持久化来预防。但是,如果消息从生产者发送到vhosts过程中出现了问题,持久化消息数据的方案就无效了。 Rabbit...

人觉非常君
29分钟前
0
0
毕业5年,我是怎么成为年薪30W的运维工程师

#转载# 我在大学读的是计算机专业,但大学毕业之后,进入到一家私企进行工作,工作的内容类似于网管,会经常的去修电脑,去做水晶头等内容。刚开始工作,也没想太多,最想的是丰富自己的工作...

Py爱好
36分钟前
1
0
大数据基础知识,大数据学习,涉及的知识点

一、什么是大数据 一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流 转、多样的数据类型和价值密度低四大特征。...

董黎明
52分钟前
0
0
Linux CentOS 7上安装极点五笔

话说几天前在新买的惠普笔记本上成功地安装了Linux CentOS 7操作系统、Nvidia Quandro P600驱动程序及X Window,并在VMware下安装Red Hat教学环境,彻底跳出Windows的苦海,但仍然有一件事不...

大别阿郎
今天
17
0
2018年7月20日集群课程

一、集群介绍 集群,简单地说是指一组(若干个)相互独立的计算机,利用高速通信网络组成一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。 ...

人在艹木中
今天
0
0
spark开发机中调试snappy

目的 在Idea中的点击运行,使spark可以直接读取snappy 自己编译hadoop,以支持snappy的压缩。 自己编译的目的就是要得到支持snappy文件读写的动态链接库。如果可以在网上下载,可以跳过自行编...

benny周
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部