首页 > 编程知识 正文

音频编解码算法有哪些,编码器及其应用实验报告

时间:2023-05-06 12:32:57 阅读:61922 作者:355

硕士毕业后,一直从事算法工程师,有丰富的深度学习、图像视频处理经验,因此录制了一些课程。 请看。 有问题的话请跟我说悄悄话。 QQ:81664352,谢谢

基于web端的人脸识别算法的视频教学

1 .学习深度学习图像处理(基于keras、tensorflow、opencv ) ) ) ) ) ) ) )。

2 .掌握网页前后端的设计(基于flask框架) )。

3 .开发基于web端的深度学习图像,将web端APP应用与人工智能相结合

视频教程

3359 edu.csdn.net/course/detail/28400/391614? pre_view=1

H.264与H.265的主要差异

H.265仍然采用混合编解码器,编解码器结构域H.264基本一致。

主要区别如下

1 .码块分割结构:采用Cu (编码单元)、pu (预编码单元)、tu (传输单元)递归结构。

2 .基本细节:每个功能块的内部细节有很多不同

3 .并行工具:添加了Tile和WPP等并行工具集,提高了编码速度

4 .在滤波器)去块滤波器之后添加示例自适应滤波器(Sao )滤波器模块

H.265的框架图

PSNR计算方式

各模块技术差异汇总

HEVC定义了33种预测角度的集合,其精度为1/32。 经验上,图像内容与水平方向和垂直方向一致的概率通常超过与其他方向一致的概率。 相邻方向之间的角度差越接近这两个方向越小,越接近对角线方向则越大。 其目的是在接近水平和垂直模式时提供更准确的预测结果,在出现机会少的对角方向上减小预测的运算负荷。

在DC模式中,所有预测像素值都是相同值,即参考数据的平均值也是DC模式命名的由来。

在Plane模式中,二维预测除了使用本行的邻接像素点进行预测之外,还使用上行的像素点进行预测。 通过给出与不同行的像素值对应的加权值,最终得到预测值。

首先从参照数据中获取的是上面的行和左边的列的数据,记录左下和右上两个像素值。 然后,从左下角的像素减去上一行对应位置的像素来计算下一行和右一列的数据,从右上角的像素减去左一列对应位置的像素来计算右一列。 预测块内各像素的数据是对应的4边的像素值的平均

从左上方开始,上面一行假设17个像素为a1b2c3 D4 e5F6 G7 h8 i9 j 8k7l6 m5n4O3 p2q 1,然后使用这17个像素计算一个h值。

我在上面画了1~9~1的数字。 有8组数字相同的像素。 以后计算时,都是成对计算。

i9; j8 - h8; k7 - g7; l6 - f6; m5 - e5; n4 - d4; o3 - c3; p2 - b2; q1 - a1,这9组分别乘以权重0~8。 也就是说,没有使用i9这个像素。 最左边和最右边两个像素的权重最大。

同样,v值也是同样的算法,像素从上到下表示为“加”。 (当然a1'=a1 )。

然后,计算a值,即计算右上角(q1 )和左下角(v值时对应的q1 ) )之和乘以16

计算b值。 这是(5*H 32 )/64,计算c值。 c=)5*H 32 )/64。 这后面加上32除以64,实际上是用于四舍五入。

然后可以计算出我们的预测值。

i00=A - 7*B -7*C 16

pix[0][0]=I00/32(0 (超出0到255范围的截断为0或255 ) ) ) ) ) ) ) ) )。

然后,计算第一行的16个像素分别为i00 B到i00 15*B,并将其除以32。 然后,从0到255舍去

第二行在第一行中添加了c,到第16行为止,添加了15个c,计算这256个像素。

块划分结构

在H.265中,为了便于压缩高分辨率视频,将宏块的大小从H.264的1616扩展到了6464。

同时,采用更加灵活的编码结构提高编码效率,

包括译码单元、预测单元、变换单元。

如下图所示:

其中:

编码单元类似于编码过程中使用的H.264/AVC宏块的概念。

预测单元是进行预测的基本单元,

变换单元是进行变换和量化的基本单元。

这三个单元的隔离使得变换、预测和编码处理的一部分更加灵活。

也有利于各阶段划分更符合视频图像的纹理特征,

有助于各单元进一步优化各自的功能。

RQT是一种自适应变化

换技术,这种思想是对H.264/AVC中ABT(AdaptiveBlock-size Transform)技术的延伸和扩展。

对于帧间编码来说,它允许变换块的大小根据运动补偿块的大小进行自适应的调整;

对于帧内编码来说,它允许变换块的大小根据帧内预测残差的特性进行自适应的调整。

大块的变换相对于小块的变换,一方面能够提供更好的能量集中效果,并能在量化后保存更多的图像细节,但是另一方面在量化后却会带来更多的振铃效应。

因此,根据当前块信号的特性,自适应的选择变换块大小,如下图所示,可以得到能量集中、细节保留程度以及图像的振铃效应三者最优的折中。

 

帧内预测模式

本质上H.265是在H.264的预测方向基础上增加了更多的预测方向

H.265:所有尺寸的CU块,亮度有35种预测方向,色度有5种预测方向

H.264:亮度 4x4块9个方向,8x8块9个方向,16x16块4种方向,色度4种方向

H.264的帧内预测方向:

H.265的帧内预测方向:

6.    帧间预测

本质上H.265是在H.264基础上增加插值的抽头系数个数,改变抽头系数值以及增加运动矢量预测值的候选个数,以达到减少预测残差的目的。

H.265与H.264一样插值精度都是亮度到1/4,色度到1/8精度,但插值滤波器抽头长度和系数不同.

H.265的增加了运动矢量预测值候选的个数,而H.264预测值只有一个

 

H.265的空域候选项:

H.265时域共同位置候选项

去块滤波

本质上H.265的去块滤波与H.264的去块滤波及流程是一致的,做了如下最显著的改变:

Ø  滤波边界: H.264最小到4x4边界滤波;而H.265适应最新的CU、PU和TU划分结构的滤波边缘,最小滤波边界为8x8,

Ø  滤波顺序:H264先宏块内采用垂直边界,再当前宏块内水平边界;而H.265先整帧的垂直边界,再整帧的水平边界

ALF自适应环路滤波

ALF在编解码环路内,位于Deblock和SAO之后,

用于恢复重建图像以达到重建图像与原始图像之间的均方差(MSE)最小。

ALF的系数是在帧级计算和传输的,可以整帧应用ALF,

也可以对于基于块或基于量化树(quadtree)的部分区域进行ALF,

如果是基于部分区域的ALF,还必须传递指示区域信息的附加信息。

采样点自适应偏移(Sample AdaptiveOffset)滤波

SAO(sample adaptive offset)滤波其实就是对去块滤波后的重建像素按照不同的模板进行分类,并对每一种分类像素进行补偿, 分类模板分为BO(Band offset)和EO(Edge offset)。

 

BO分类:

 

EO分类模块:

SAO在编解码环路内,位于Deblock之后,通过对重建图像的分类,对每一类图像像素值加减一个偏移,达到减少失真的目的,从而提高压缩率,减少码流。

采用SAO后,平均可以减少2%~6%的码流,而编码器和解码器的性能消耗仅仅增加了约2%。

 

并行化设计

当前芯片架构已经从单核性能逐渐往多核并行方向发展,因此为了适应并行化程度非常高的芯片实现,HEVC/H265引入了很多并行运算的优化思路, 主要包括以下几个方面:

(1)Tile

如图3所示,用垂直和水平的边界将图像划分为一些行和列,划分出的矩形区域为一个Tile,每一个Tile包含整数个LCU(Largest Coding Unit),Tile之间可以互相独立,以此实现并行处理:

Tile划分示意图

(2 Entropy slice

Entropy Slice允许在一个slice内部再切分成多个Entropy Slices,每个Entropy Slice可以独立的编码和解码,从而提高了编解码器的并行处理能力:

Entropy Slice的概念是Sharp公司提出的,现在改名为lightweighted slice(轻量级slice?),这个提案主要解决的问题是针对H.264 Slice切分的一些缺点:

1. H.264的熵编码以slice为单位,这可能会造成各个slice之间的编码负担不均衡,有的slice负担重,有的则负担轻。理论上多切分一些slice有助于在多核计算机上提高负载均衡能力。

2.但是过多的Slice切分会造成压缩效率降低。

在测试中,一个1080p的图像被分为一个slice和32个entropyslice,编码效率损失极小。

在提案中sharp还提出了一个CPU+GPU混合编码的方案,熵编码由多核CPU进行而重建则由GPU进行,可以大幅提高编码速度,如下图所示。

 

 

2) Slice

Slice是一帧中按光栅扫描顺序排列的CTU序列,一帧可以由多个slice组成,每个Slice可以独立解码,因为slice内像素的预测不能跨越slice的边界。每个slice可按照编码类型的不同分成I/P/B slice。该结构的主要目的是实现在传输中遭遇数据丢失后的重新同步。每个slice可携带的最大比特数通常受限,因此根据视频场景的运动程度,slice所包含的CTU数量可能有很大不同。

3) Dependent Slice

Dependent slice,其解码或编码的起始熵编码CABAC上下文状态是以上一个slice为基础,因此它不能完成数据丢失后的重新同步,该技术可以理解为对原先NALU数据的进一步拆分,可以适合更加灵活的打包方式。

(4)一幅图像可以被划分为若干个Slice,也可以划分为若干个Tile,两者划分的目的都是为了进行独立编码。某些Slice中可以包含多个Tile,同样某些Tile中也可以包含多个Slice。Tile包含的CTU个数和Slice中的CTU个数互不影响。

 

不同点:

划分方式:Tile为矩形,Slice为条带形。

组成结构:Slice由一系列的SS组成,一个SS由一系列的CTU组成。而Tile直接由一系列CTU组成。

 

 

WPP(Wavefront Parallel Processing)

上一行的第二个LCU处理完毕,即对当前行的第一个LCU的熵编码(CABAC)概率状态参数进行初始化,如图所示。因此,只需要上一行的第二个LCU编解码完毕,即可以开始当前行的编解码,以此提高编解码器的并行处理能力:

以一行LCU块为基本的并行单元,每一行LCU为一个子码流

 

Entropy Slice允许在一个slice内部再切分成多个EntropySlices,这样熵编解码器可以并行编码或解码,从而提高了并行处理能力。

需要注意的是一个entropy slice不能跨越slice边界,也就是一个slice可以含有多个entropy slice,但是一个entropy slice只能属于一个slice,如下图所示:

 

码率控制方法

CBR(Constant Bit Rate)是以恒定比特率方式进行编码,有Motion发生时,由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳定。这种算法优先考虑码率(带宽)。

这个算法也算是码率控制最难的算法了,因为无法确定何时有motion发生,假设在码率统计窗口的最后一帧发生motion,就会导致该帧size变大,从而导致统计的码率大于预设的码率,也就是说每秒统计一次码率是不合理的,应该是统计一段时间内的平均码率,这样会更合理一些。

  

VBR(Variable Bit Rate)动态比特率,其码率可以随着图像的复杂程度的不同而变化,因此其编码效率比较高,Motion发生时,马赛克很少。码率控制算法根据图像内容确定使用的比特率,图像内容比较简单则分配较少的码率(似乎码字更合适),图像内容复杂则分配较多的码字,这样既保证了质量,又兼顾带宽限制。这种算法优先考虑图像质量。

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。