一种基于矩阵分解的视频编码方法转让专利

申请号 : CN202010408636.5

文献号 : CN111556319B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 朱策刘翼鹏丁可可邓玲玲

申请人 : 电子科技大学

摘要 :

本发明属于视频编码技术领域,具体涉及一种基于矩阵分解的视频编码方法。本发明的方法,主要是对视频编码过程中变换量化的步骤进行改进,基于矩阵分解的方法,将变换矩阵分解成4*4矩阵,并将预测过程中得到的残差矩阵也进行同样的分解,从而简化残差矩阵的变换过程,实现快捷地,无损失地进行残差矩阵的变换,进而提高编码的速度。

权利要求 :

1.一种基于矩阵分解的视频编码方法,其特征在于,包括以下步骤:S1、输入视频后,获取每一帧的像素矩阵,定义为大小为M*N的矩阵,然后进行逐帧处理,将当前正在处理的帧记为F;

S2、将帧F划分为不同大小的块,对每一块进行预测,获得编码块内每一个点的预测像素值Prx,y,再根据原始像素值Orx,y,得到残差矩阵R:R=Orx,y‑Prx,y

S3、对残差矩阵R进行变换量化:对变换矩阵T进行分解,设变换矩阵T为DCT‑4矩阵:或DST‑4矩阵:

Ti(j)表示矩阵第i行第j列的元素;

N N

将2*2大小的变换矩阵T,分解为4*4大小的小型矩阵,每个矩阵包含原矩阵的16个元N‑1 N‑1 N

素,分别位于第i行,第j列;第2 +1‑i行,第j列;第2 +i行,第j列;第2+1‑i行,第j列;第iN‑1 N‑1 N‑1 N‑1 N‑1 N N‑1行,第2 +1‑j列;第2 +1‑i行,第2 +1‑j列;第2 +i行,第2 +1‑j列;第2+1‑i行,第2N‑1 N‑1 N‑1 N‑1 N‑1 N+1‑j列;第i行,第2 +j列;第2 +1‑i行,第2 +j列;第2 +i行,第2 +j列;第2 +1‑i行,N‑1 N N‑1 N N‑1 N N第2 +j列;第i行,第2+1‑j列;第2 +1‑i行,第2+1‑j列;第2 +i行,第2+1‑j列;第2+1‑N N N N‑2 N‑2

i行,第2+1‑j列;共将2*2大小的变换矩阵分解为2 *2 个4*4矩阵;

N‑2 N‑2

将残差矩阵R按照相同的方式分解为4*4大小的矩阵,得到2 *2 个4*4矩阵;

tr

计算T·R得到变换之后的残差矩阵R ,其中上标tr表示残差矩阵已经过变换;

将变换之后的残差矩阵进行量化:其中Quantx,y是量化结果,Round表示进行四舍五入,step表示量化步长;

S4、对量化结果进行熵编码:将变换块分解成4*4大小,然后扫描系数,从最后一个系数开始扫描,每一个4*4块扫描过程变成一个一维数组,然后对一维数组进行编码,首先编码一维数组的最后一个非零系数的位置,然后编码其它非零系数的位置,最后再对非零系数的幅值进行编码,全部完成之后输出码流。

说明书 :

一种基于矩阵分解的视频编码方法

技术领域

[0001] 本发明属于视频编码技术领域,具体涉及一种基于矩阵分解的视频编码方法。

背景技术

[0002] 视频编码包括:预测、变换量化和熵编码过程。如图1所示,输入的原始视频序列经过预测后得到残差信号,目的是去除图片间的空间冗余,它利用已编码的重建信息作为参
考信息进行预测,然后残差信号经过变换使残差信号的能量更一步集中,接下来进行量化,
对高频信号采用更大的量化步长,而对于低频信号使用更小的量化步长,保证图像基本信
息没有损失。最后是熵编码过程,它将非二进制编码信息编码为二进制信息。
[0003] 虽然最新的编码器能够获得很好的压缩比,视频质量的损失也很小,但是因为复杂度太高,实时性不足,大部分企业仍旧倾向于使用更早版本的编码器,而不使用复杂度高
的编码器。

发明内容

[0004] 本发明的目的,就是针对上述问题,提出一种可以提高编码速度的基于矩阵分解的视频编码方法。
[0005] 本发明的技术方案为:一种基于矩阵分解的视频编码方法,包括以下步骤:
[0006] S1、输入视频后,获取每一帧的像素矩阵,定义为大小为M*N的矩阵,然后进行逐帧处理,将当前正在处理的帧记为F;
[0007] S2、将帧F划分为不同大小的块,对每一块进行预测,获得预测像素值Prx,y,再根据原始像素值Orx,y,得到残差矩阵R:
[0008] R=Orx,y‑Prx,y
[0009] S3、对残差矩阵R进行变换量化:
[0010] 对变换矩阵T进行分解,设变换矩阵T为DCT‑4矩阵:
[0011]
[0012] 或DST‑4矩阵:
[0013]
[0014] Ti(j)表示矩阵第i行第j列的元素;
[0015] 将2N*2N大小的变换矩阵T,分解为4*4大小的小型矩阵,每个矩阵包含原矩阵的16N‑1 N‑1 N
个元素,分别位于第i行,第j列;第2 +1‑i行,第j列;第2 +i行,第j列;第2+1‑i行,第j
N‑1 N‑1 N‑1 N‑1 N‑1 N
列;第i行,第2 +1‑j列;第2 +1‑i行,第2 +1‑j列;第2 +i行,第2 +1‑j列;第2 +1‑i
N‑1 N‑1 N‑1 N‑1 N‑1 N‑1 N
行,第2 +1‑j列;第i行,第2 +j列;第2 +1‑i行,第2 +j列;第2 +i行,第2 +j列;第2
N‑1 N N‑1 N N‑1 N
+1‑i行,第2 +j列;第i行,第2+1‑j列;第2 +1‑i行,第2+1‑j列;第2 +i行,第2+1‑j列;
N N N N N‑2 N‑2
第2+1‑i行,第2+1‑j列;共将2*2大小的变换矩阵分解为2 *2 个4*4矩阵;
[0016] 将残差矩阵R按照相同的方式分解为4*4大小的矩阵,得到2N‑2*2N‑2个4*4矩阵;
[0017] 计算T·R得到变换之后的残差矩阵Rtr,其中上标tr表示矩阵R经过变换。
[0018] 将变换之后的残差矩阵进行量化:
[0019]
[0020] 其中Quantx,y是量化结果,Round表示进行四舍五入,step表示量化步长;
[0021] S4、对量化结果进行熵编码:
[0022] 将变换块分解成4*4大小,然后扫描系数,从最后一个系数开始扫描,每一个4*4块扫描过程变成一个一维数组,然后对一维数组进行编码,首先编码一维数组的最后一个非
零系数的位置,然后编码其它非零系数的位置,最后再对非零系数的幅值进行编码,全部完
成之后输出码流。
[0023] 本发明的有益效果为,相对现有技术,本发明能够更快捷地,无损失地进行残差矩阵的变换,从而有效提高了编码速度。

附图说明

[0024] 图1为视频编码过程示意图。

具体实施方式

[0025] 下面对本发明的技术方案进行详细说明,以便于本领域内技术人员的理解。
[0026] 本发明的方法包括以下步骤:
[0027] S1、输入视频
[0028] 输入视频包含f0帧,每帧都是一个大小为M*N的矩阵,记录着每一个位置的像素值。在视频编码过程中,会一帧一帧一次进行处理,正在处理的帧记为F,是一个记录当前帧
所有像素值的大小为M*N的矩阵。
[0029] S2、预测
[0030] 当前帧会划分成不同大小的块,每一块都会根据周围像素或者参考帧的参考块来进行预测,预测方法分为帧内预测和帧间预测:
[0031] 对于帧内预测,假定编码块大小为m*n,对编码块内的每一个像素点的预测值可以通过编码块上方一行和左侧一列的像素值得到,假设上方一行像素值为refx,0,左侧一列像
素值为ref0,y,则编码块内每一个点的预测像素值Prx,y大小为:
[0032] Prx,y=((n*((m‑y)·refx,0+y·ref0,m+1)+m*((n‑x)·ref0,y+x·refn+1,0)+m*n)>>(log2m+log2n+1) (公式1)
[0033] 对于帧间预测,在参考帧中找到参考块referencex,y,参考块的像素值大小就作为编码块的预测像素值:
[0034] Prx,y=referencex,y (公式2)
[0035] 帧间预测如果采用双向预测,则有两个参考块reference1x,y和reference2x,y,编码块的预测像素值可以由下式表达:
[0036]
[0037] 其中d1是编码块与参考块reference1的距离(相隔的帧数),d2是编码块与参考块reference2的距离。
[0038] 根据预测像素值和原始像素值可以得到残差矩阵R(残差系数):
[0039] R=Orx,y‑Prx,y (公式4)
[0040] S3、变换量化
[0041] 1.分解变换矩阵T
[0042] 变换矩阵T是视频编码领域里已经设定好的固定的矩阵,本方法针对其中的两种变换核进行分解,DCT‑4矩阵表示如下:
[0043]
[0044] DST‑4矩阵表示如下:
[0045]
[0046] Ti(j)表示矩阵第i行第j列的元素。
[0047] 对于2N*2N大小的变换矩阵T,分解为4*4大小的小型矩阵,每个矩阵包含原矩阵的N‑1 N‑1 N
16个元素,分别位于第i行,第j列;第2 +1‑i行,第j列;第2 +i行,第j列;第2+1‑i行,第j
N‑1 N‑1 N‑1 N‑1 N‑1 N
列;第i行,第2 +1‑j列;第2 +1‑i行,第2 +1‑j列;第2 +i行,第2 +1‑j列;第2 +1‑i
N‑1 N‑1 N‑1 N‑1 N‑1 N‑1 N
行,第2 +1‑j列;第i行,第2 +j列;第2 +1‑i行,第2 +j列;第2 +i行,第2 +j列;第2
N‑1 N N‑1 N N‑1 N
+1‑i行,第2 +j列;第i行,第2+1‑j列;第2 +1‑i行,第2+1‑j列;第2 +i行,第2+1‑j列;
N N N N N‑2 N‑2
第2+1‑i行,第2+1‑j列;共将2*2大小的变换矩阵分解为2 *2 个4*4矩阵。
[0048] 2.分解残差矩阵R
[0049] 残差矩阵R是和变换矩阵T一样大小的矩阵,将其按照与变换矩阵同样的分解方法N‑2 N‑2
分解为4*4大小的矩阵,得到2 *2 个4*4矩阵。
[0050] 3.计算T·R过程中的中间变量
[0051] 视频编码通过变换技术来将残差矩阵投射到变换域,以减少码率。
[0052] 在对残差矩阵进行变换的过程中,可以采用以下方法,利用分块矩阵的计算方法计算T·R,其中每一步都是计算两个4*4矩阵的乘积,得到中间变量计算方法如下:
[0053]
[0054] k0i=b*(r1i+r2i+r3i+r4i) (公式8)
[0055] k1i=(‑a‑b)*(r2i+r3i) (公式9)
[0056] k2i=(d‑b)*(r1i+r4i) (公式10)
[0057] k3i=(c‑b)*(r1i+r3i) (公式11)
[0058] k4i=(‑c‑b)*(r3i+r4i) (公式12)
[0059] m0i=k0i+k2i+k3i+(a+b‑c‑d)*r1i (公式13)
[0060] m1i=k0i+k1i+k4i+(a+b+c‑d)*r2i (公式14)
[0061] m2i=k0i+k1i+k3i+(a+b‑c+d)*r3i (公式15)
[0062] m3i=k0i+k2i+k4i+(‑a+b+c‑d)*r4i (公式16)
[0063] 其中k0i,k1i,k2i,k3i,k4i都是中间变量,先保存下来,(i=1,2,3,4)。
[0064] 4.利用得到的中间变量,累加得到残差矩阵经过变换后的结果,如果是对进行4*4矩阵进行变换,则前文中的m0i,m1i,m2i,m3i是4*4大小的残差矩阵最终的变换结果,不需要再
进行累加。对于其它大小的残差矩阵,计算方式如下:
[0065] 8*8残差矩阵的变换结果如下:
[0066] 第一行第i列的值为:temp0+k1,3i+k2,4i+(t11+t14‑t15‑t18)r1i+(‑t16+t12‑t17+t13)r3i; (公式17)
[0067] 第四行第i列的值为:temp1+k1,4i+k2,3i+(t11+t14+t15‑t18)r4i+(‑t16‑t12‑t17+t13)r2i; (公式18)
[0068] 第五行第i列的值为:temp1+k1,3i+k2,4i+(t11+t14‑t15+t18)r5i+(t16‑t12+t17+t13)r7i; (公式19)
[0069] 第八行第i列的值为:temp0+k1,4i‑k2,3i+(‑t11+t14+t15‑t18)r1i+(‑t16+t12+t17‑t13)r6i; (公式20)
[0070] 其中
[0071] temp0=k1,0i+k1,1i‑k2,0i‑k2,2i (公式21)
[0072] temp1=k1,0i+k1,2i+k2,0i+k2,1i (公式22)
[0073] 同理,对其余四行计算方法如下:
[0074] temp2=‑k3,0i‑k3,2i+k4,0i+k4,1i (公式23)
[0075] temp3=k3,0i+k3,1i+k4,0i+k4,2i; (公式24)
[0076] 第二行第i列的值为:temp2+k4,3i‑k3,4i+(t13+t12‑t17‑t16)r1i+(t15+t18+t11+t14)r3i; (公式25)
[0077] 第三行第i列的值为:temp3+k4,4i+k3,3i+(t13‑t12+t17‑t16)r4i+(‑t15+t18‑t11‑t14)r2i; (公式26)
[0078] 第六行第i列的值为:temp3+k4,3i+k3,4i+(‑t13‑t12‑t17‑t16)r5i+(‑t1s+t18+t11+t14)r7i; (公式27)
[0079] 第七行第i列的值为:temp2+k4,4i‑k3,3i+(t13+t12‑t17+t16)r8i+(‑t15+t18‑t11+t14)r6i; (公式28)
[0080] k是在四次4*4矩阵乘法中计算得到的中间变量,k的下标中左侧数字代表其是第几次矩阵乘法,右侧数字代表其是第i列的第几个中间变量,t为变换矩阵T中的元素,t的下
标表示其在变换矩阵T中的位置,r为残差矩阵中的残差值,r的下标表示其在残差矩阵R中
tr
的位置,八行结果组合起来就是变换之后的残差矩阵R 。16*16和32*32残差矩阵的计算方
法与8*8残差矩阵计算方式一致。
[0081] 残差矩阵变换完成后进行量化,量化过程如下:
[0082]
[0083] 其中Quantx,y是量化结果,Round表示进行四舍五入,step表示量化步长。
[0084] S4、熵编码
[0085] 对量化结果(量化系数)的熵编码如下:
[0086] 将变换块分解成4*4大小,然后扫描系数,(4*4块内部的扫描方式和4*4块的扫描方式一致),扫描的方式有对角扫描,水平扫描和垂直扫描。从最后一个系数开始扫描,每一
个4*4块扫描过程变成一个一维数组,然后对一维数组进行编码。首先编码一维数组的最后
一个非零系数的位置,然后编码其它非零系数的位置,最后再对非零系数的幅值进行编码。
全部完成之后输出码流。
[0087] 为了证明本发明的有效性,通过如下表1对本发明的编码耗时与VTM3.0(VVC新提出的一个编码器)进行对比:
[0088] 表1实施例得到的编码耗时对比
[0089]
[0090] 可以看出对所有序列,采用本发明的方法后,复杂度均得到减少。