具体实施方式
本发明实施例根据待编码视频图像的前一个宏块对应的第一控制矩阵中确定的行向量与前一个DCT系数块对应的第一控制向量,确定当前DCT系数块对应的第一控制向量,并根据当前DCT系数块对应的第一控制向量的元素值,更新当前DCT系数块的元素值;以及根据当前宏块的每个更新后的DCT系数块的元素值,确定当前宏块对应的第一控制矩阵;根据更新后的各DCT系数块进行熵编码后得到该待编码视频图像的码流;能够在DCT域上来抵御对DCT系数块的元素的攻击,使得在解码过程中能够确定解码得到的视频图像是否已被篡改,提高了编码和解码过程的安全性。
视频图像的数据量是很大的,为了达到高效的压缩,必须充分利用各种冗余,一般来讲,视频序列里的冗余包括两类:统计冗余和视觉生理冗余,其中,统计冗余包含频谱冗余(色彩分量之间的相关性)、空间冗余和时间冗余;视觉生理冗余是由人类的视觉***特性造成的;针对这些冗余,在进行压缩编码处理时主要考虑空间冗余和时间冗余;对于空间冗余,H.264标准中通过变换及量化以消除冗余,这样编码的帧称作I帧;对于时间冗余,H.264标准中通过运动估计和补偿以消除冗余(即帧间预测),这样编码的帧称作P帧或B帧。
H.264标准在对I帧进行编码时,一般采用帧内预测,然后对预测误差进行编码,帧内预测的目的是生产对当前宏块的预测值。帧内预测是以16×16的宏块为基本单位,而一个宏块由一个16×16的亮度(luma)块和两个对应的8×8的色度块构成;其中,亮度块是用来表示和基本色相关的单色信号的单个像素或像素数组。
H.264标准中亮度块有两类帧内预测方式,分别为Intra_16×16和Intra_4×4,两个色度块采用相同的预测方式;其中,Intra_16×16是对整个16×16大小的亮度块进行预测,一般用于图像比较平坦的区域,共有4中预测方式;Intra_4×4方式将16×16的亮度块划分成16个4×4的亮度子块,然后对每个4×4的亮度子块进行预测,共有9种预测方式。对于色度块(包括Cr和Cb),预测是对整个8×8的块进行的,共有4中预测方式。
本发明实施例的视频图像编码和解码的方法及装置是基于H.264标准而提出的,在具体实施过程中,编码过程是以待编码视频图像的每个宏块为单位进行处理。
下面结合说明书附图对本发明实施例作进一步详细描述。
如图1所示,本发明实施例第一种视频图像的编码方法,针对视频图像中的每一帧图像,执行以下步骤:
步骤101、对待编码视频图像的各宏块进行DCT(Discrete CosineTransform,离散余弦变换)处理和量化处理,得到各宏块对应的DCT系数块;
其中,每个宏块包括一个亮度(luma)块和两个对应的色度(chroma)块;
在具体实施过程中,在步骤101之前还包括:对每个宏块采用帧内或帧间预测模式进行处理。
步骤102、更新各宏块对应的DCT系数块的元素值;具体为:针对当前DCT系数块的每个非零元素,根据前一个宏块对应的第一控制矩阵中确定的行向量与前一个非零元素对应的第一控制向量,确定该非零元素对应的第一控制向量,并根据该非零元素对应的第一控制向量的元素值,更新当前DCT系数块中该非零元素的值;以及根据当前宏块的每个更新后的DCT系数块的元素值,确定当前宏块对应的第一控制矩阵;其中初始的第一控制矩阵为仅包含0和1的矩阵,初始的第一控制向量为零向量;
其中,第一控制矩阵的维数根据宏块的亮度块及色度块的维数确定,第一控制向量的维数根据第一控制矩阵确定;例如,在H.264标准中,宏块对应的亮度块为16×16维矩阵,宏块对应的两个色度均为8×8维矩阵,则第一控制矩阵为24×16维矩阵,第一控制向量为1×16维向量。
编码过程中是以宏块为单位进行处理的,对宏块的处理顺序可以按照各宏块在待编码视频图像中位置的先后顺序进行处理,如以行为单位进行处理,即先处理待编码视频图像中第一行中依次排列的宏块,再处理第二行中依次排列的宏块,依次类推;又如以行为单位进行处理;对每个宏块对应的DCT系数块的处理顺序可以按照各DCT系数块在该宏块中位置的先后顺序进行处理,如以行为单位进行处理,即先处理该宏块中第一行中依次排列的DCT系数块,再处理第二行中依次排列的DCT系数块,依次类推;又如以行为单位进行处理;确定每个DCT系数块中的非零元素可以按照该DCT系数块中的每个元素所在的位置进行处理,如以行为单位进行处理,即先确定该DCT系数块中第一行中依次排列的各元素中的非零元素,再确定第二行中依次排列各元素中的非零元素,依次类推;又如以行为单位进行处理。
优选的,本发明实施例中对DCT系数块中的各元素的处理顺序可采用Zig-zag扫描或栅格扫描。
当前,编码过程中对宏块、宏块对应的DCT系数块、DCT系数块对应的各元素的处理顺序也可以采用其他的顺序,此处不再赘述;但需要说明的是,解码过程中的处理顺序必须与编码过程中的处理顺序相同。
在具体实施过程中,若非零元素为第一个宏块的第一个DCT系数块的第一个非零元素,则根据初始的第一控制矩阵中确定的行向量与初始的第一控制向量,确定该非零元素对应的第一控制向量;
初始的第一控制矩阵中0元素和1元素的排列方式可以通过哈希运算随机确定;
需要说明的是,编码过程中确定的初始的第一控制矩阵和必须与解码过程中的确定的初始的第二控制矩阵相同;
步骤103、将待编码视频图像的各宏块所有更新后的DCT系数块进行熵编码,以确定待编码视频图像的码流;
在具体实施过程中,将熵编码处理后的各DCT系数块的元素值与解码所需的一些边信息(如预测模式量化参数、运动矢量等)一起组成压缩后的码流,以进行存储或传输。
如图2A所示,步骤102中确定每个非零元素对应的第一控制向量进一步包括以下步骤:
步骤1021、根据该非零元素的值与该非零元素在当前DCT系数块的所有非零元素中的位置,确定前一个宏块对应的第一控制矩阵中的行向量;
具体的,在确定当前DCT系数块中的非零元素之后,先对该非零元素的值进行预设的运算,即d_haf=(d+1)/3,其中,d为当前DCT系数块中非零元素;再根据d_haf与该非零元素d在当前DCT系数块的所有非零元素中的位置,确定前一个宏块对应的第一控制矩阵中对应的行向量。
步骤1022、根据前一个宏块对应的第一控制矩阵中确定的行向量与前一个非零元素对应的第一控制向量,确定该非零元素对应的第一控制向量;
具体的,若确定的非零元素为当前DCT系数块的第一个非零元素,则根据前一个宏块对应的第一控制矩阵中确定的行向量与前一个DCT系数块的最后一个非零元素对应的第一控制向量,确定当前DCT系数块的第一个非零元素对应的第一控制向量;
按照每个非零元素在当前DCT系数块的所有非零元素中的位置的先后顺序,对当前DCT系数块的每个非零元素执行步骤1021~步骤1022的处理过程,直至确定当前DCT系数块中最后一个非零元素对应的第一控制向量。
在具体实施过程中,步骤1012中根据d_haf与该非零元素d在当前DCT系数块的所有非零元素中的位置,确定前一个宏块对应的第一控制矩阵中对应的行向量分为以下两种情况:
若当前DCT系数块中的非零元素的值大于0,则根据公式一确定该非零元素对应的第一控制向量:
B[j]=(B′[j]+A[(d_haf+dnum)%24][j])%3 公式一;
其中,B向量为该非零元素对应的第一控制向量,B向量为1×16维向量;B′向量为前一个非零元素对应的第一控制向量;A矩阵为前一个宏块对应的第一控制矩阵,A矩阵为24×16维矩阵,1≤j≤16;d_haf=(d+1)/3,d为当前DCT系数块中非零元素,dnum标识d在当前DCT系数块中的位置,即标记该非零元素为当前DCT系数块中的第几个元素;公式中的%为取余运算;
例如,若该非零元素为当前DCT系数块中的第1个元素,则dnum的值为1;若该非零元素为当前DCT系数块中的第2个元素,则dnum的值为2,依次类推。
若当前DCT系数块中的非零元素的值小于0,根据公式二确定该非零元素对应的第一控制向量:
B[j]=(B′[j]+A[(d_haf+dnum+1)%24][j])%3 公式二;
其中,B向量为该非零元素对应的第一控制向量,B向量为1×16维向量;B′向量为前一个非零元素对应的第一控制向量;A矩阵为前一个宏块对应的第一控制矩阵,A矩阵为24×16维矩阵,1≤j≤16;d_haf=(d+1)/3,d为当前DCT系数块中非零元素,dnum标识d在当前DCT系数块中的位置,即标记该非零元素为当前DCT系数块中的第几个元素;公式中的%为取余运算。
需要说明的是,本发明实施例编码方法的步骤102仅对DCT系数块中的非零元素进行处理,得到该非零元素对应的第一控制向量,对该DCT系数块中的零元素不进行任何处理。
在具体实施过程中,步骤102中在当前DCT系数块的非零元素的绝对值大于1时,根据公式三更新该非零元素的值:
d′=d+B[dnum] 公式三;
其中,d为当前DCT系数块中非零元素,d′为更新后的d,B向量为该非零元素对应的第一控制向量,dnum标识d在当前DCT系数块中的位置,即标记该非零元素为当前DCT系数块中的第几个元素。
需要说明的是,对于当前DCT系数块中绝对值不大于1的非零元素及当前DCT系数块中的零元素,则不需要进行更新处理,即当前DCT系数块中绝对值不大于1的非零元素及当前DCT系数块中的零元素的值保持不变。
对当前宏块中每个DCT系数块均进行上述处理,直至当前宏块中最后一个DCT系数块的更新处理完成。
如图2B所示,步骤102中确定当前宏块对应的第一控制矩阵进一步包括:
步骤1023、针对当前宏块,对更新后的DCT系数块进行反量化处理和反DCT处理,得到当前宏块对应的亮度块和色度块;
其中,当前宏块的DCT系数块进行反量化处理和反DCT处理后,得到一个16×16的亮度块和两个8×8的色度块;
步骤1024、根据当前宏块对应的亮度块和色度块的各元素值,确定当前宏块对应的第一控制矩阵;
其中,第一控制矩阵中前16行的各元素的值根据16×16的亮度块中的元素值确定;第一控制矩阵中后8行的各个元素的值根据两个8×8的色度块中的元素值确定。
具体的,第一控制矩阵的第i1行j列的元素值为当前宏块的亮度块中第(i1+j1)%8个像素的值,其中,第一控制矩阵为24×16维矩阵,亮度块为16×16维矩阵,1≤i1≤16,1≤j≤16,%为取余运算;
第一控制矩阵的第i2行j1列的元素值为当前宏块的第一个色度块中第(i2+j1)%8个像素的值,其中,色度块为8×8维矩阵,17≤i2≤24,1≤j1≤8;
第一控制矩阵的第i2行j2列的元素值为当前宏块的第二个色度块中第(i2+j2)%8个像素的值,其中,9≤j2≤16。
如图3所示,本发明实施例第一种视频图像的解码方法,包括以下步骤:
步骤301、对获取到的编码处理后的码流进行处理,得到视频图像中各宏块对应的离散余弦DCT系数块;
步骤302、更新各宏块对应的DCT系数块的元素值;具体为:针对当前DCT系数块的每个非零元素,根据前一个宏块对应的第二控制矩阵中确定的行向量与前一个非零元素对应的第二控制向量,确定该非零元素对应的第二控制向量,并根据该非零元素对应的第二控制向量的元素值,更新当前DCT系数块中该非零元素的元素值;其中初始的第二控制矩阵的元素值与编码处理中确定的初始的第一控制矩阵的元素值相同,初始的第二控制向量为零向量;
步骤303、在确定当前DCT系数块的非零元素的值与该非零元素对应的第二控制向量的元素值满足触发条件时,发出告警信息。
其中,步骤303中的触发条件为:(d+1)%3的值与D[dnum]的值不相等;其中,d为当前DCT系数块中绝对值大于1的非零元素,D为该非零元素对应的第二控制向量,dnum标识d在当前DCT系数块中的位置,即标记该非零元素为当前DCT系数块中的第几个元素,例如,若该非零元素为当前DCT系数块中的第1个元素,则dnum的值为1;若该非零元素为当前DCT系数块中的第2个元素,则dnum的值为2,依次类推。
如图3所示,本发明实施例第一种视频图像解码方法还包括:
步骤304、在确定当前DCT系数块的非零元素的值与该非零元素对应的第二控制向量的元素值不满足触发条件,且当前宏块对应的所有DCT系数块都更新完毕后,根据当前宏块的每个更新后的DCT系数块的元素值,确定当前宏块对应的第二控制矩阵。
在具体实施过程中,如图4所示,步骤302中确定每个非零元素对应的第二控制向量进一步包括以下步骤:
步骤3021、根据该非零元素的值与该非零元素在当前DCT系数块的位置标号,确定前一个宏块对应的第二控制矩阵中的行向量;
具体的,在确定当前DCT系数块中的非零元素之后,先对该非零元素的值进行预设的运算,即d_haf=(d+1)/3,其中,d为当前DCT系数块中非零元素;再根据d_haf与该非零元素d在当前DCT系数块的所有非零元素中的位置,确定前一个宏块对应的第二控制矩阵中对应的行向量。
步骤3022、根据前一个宏块对应的第二控制矩阵中确定的行向量与前一个非零元素对应的第二控制向量,确定该非零元素对应的第二控制向量;
具体的,若确定的非零元素为当前DCT系数块的第一个非零元素,则根据前一个宏块对应的第二控制矩阵中确定的行向量与前一个DCT系数块的最后一个非零元素对应的第二控制向量,确定当前DCT系数块的第一个非零元素对应的第二控制向量。
按照每个非零元素在当前DCT系数块的所有非零元素的所有非零元素中的位置的先后顺序,对当前DCT系数块的每个非零元素执行步骤3021~步骤3022的处理过程,直至确定当前DCT系数块中最后一个非零元素对应的第二控制向量;或
仅在当前DCT系数块的非零元素的值与该非零元素对应的第二控制向量的元素值不满足触发条件时,对下一个非零元素执行步骤3021~步骤3022的处理过程,直至确定当前DCT系数块中最后一个非零元素对应的第二控制向量。
在具体实施过程中,步骤3022中确定该非零元素对应的第二控制向量包括以下两种情况:
若确定的非零元素的值大于0,根据公式四确定该非零元素对应的第二控制向量:
D[j]=(D′[j]+C[(d_haf+dnum)%24][j])%3 公式四;
其中,D向量为该非零元素对应的第二控制向量,D向量为1×16维向量;D′向量为前一个非零元素对应的第二控制向量;C矩阵为前一个宏块对应的第二控制矩阵,C矩阵为24×16维矩阵,1≤j≤16;d_haf=(d+1)/3,d为当前DCT系数块中非零元素,dnum标识d在当前DCT系数块中的位置;公式中的%为取余运算。
若确定的非零元素的值小于0,根据公式五确定该非零元素对应的第二控制向量:
D[j]=(D′[j]+C[(d′+dnum+1)%24][j])%3 公式五;
其中,D向量为该非零元素对应的第二控制向量,D′向量为前一个非零元素对应的第二控制向量,D向量为1×16维向量;C矩阵为前一个宏块对应的第二控制矩阵,C矩阵为24×16维矩阵,1≤j≤16;d_haf=(d+1)/3,d为当前DCT系数块中非零元素,dnum标识d在当前DCT系数块中的位置,即标记该非零元素为当前DCT系数块中的第几个元素;公式中的%为取余运算。
需要说明的是,本发明实施例解码方法的步骤302仅对DCT系数块中的非零元素进行处理,得到该非零元素对应的第二控制向量,对该DCT系数块中的零元素不进行任何处理。
在具体实施过程中,步骤302中在当前DCT系数块的非零元素的绝对值大于1时,根据公式六更新当前DCT系数块的非零元素的值:
d′=d+D[dnum] 公式六;
其中,d为当前DCT系数块中非零元素,d′为修正后的d,D向量为该非零元素对应的第二控制向量,D为1×16维向量;dnum标识d在当前DCT系数块中的位置,即标记该非零元素为当前DCT系数块中的第几个元素。
需要说明的是,对于当前DCT系数块中绝对值不大于1的非零元素及当前DCT系数块中的零元素,则不需要进行更新处理,即当前DCT系数块中绝对值不大于1的非零元素及当前DCT系数块中的零元素的值保持不变。
步骤304中确定当前宏块对应的第二控制矩阵的元素值进一步包括:
针对当前宏块,对更新后的DCT系数块进行反量化处理和反DCT处理,得到当前宏块对应的亮度块和色度块;
根据当前宏块对应的亮度块和色度块的各元素值,确定当前宏块对应的第二控制矩阵。
具体的,确定当前宏块对应的第二控制矩阵的元素值进一步包括:
第二控制矩阵的第i1行j列的元素值为当前宏块的亮度块中第(i1+j)%8个像素值,其中,第二控制矩阵为24×16维矩阵,亮度块为16×16维矩阵,1≤i1≤16,1≤j≤16,%为取余运算;
第二控制矩阵的第i2行j1列的元素值为当前宏块的第一个色度块中第(i2+j1)%8个像素的值,其中,色度块为8×8维矩阵,17≤i2≤24,1≤j1≤8;
第二控制矩阵的第i2行j2列的元素值为当前宏块的第二个色度块中第(i2+j2)%8个像素的值,其中,9≤j2≤16。
下面以每帧视频图像的每个宏块包括一个16×16的亮度块和对应的两个8×8的色度块为例,对本发明实施例的视频图像的编码和解码方法进行详细说明。
如图5所示,本发明实施例第二种视频图像的编码方法,包括以下步骤:
步骤501、初始化第一控制矩阵A和第一控制向量B,其中,A矩阵为24×16维的(0,1)矩阵,B向量为1×16维的零向量;
在具体实施过程中,A矩阵可以通过哈希运算随机确定。
步骤502、针对每一帧视频图像,对于该视频图像的当前宏块的亮度(luma)块和色度(chroma)块分别对应的多个4×4的DCT系数块,针对一个4×4的DCT系数块,每解析出一个非零元素d,则计算出d_haf=(d+1)/3;
步骤503、根据前一个宏块对应的A矩阵中确定的行向量与前一个非零元素对应的B向量,确定该非零元素对应的B向量;
具体的,若解析出的d大于0,则根据公式一确定该非零元素对应的第一控制向量;
若解析出的d小于0,则根据公式二确定该非零元素对应的第一控制向量。
步骤504、当该非零元素d的绝对值大于1时,根据公式三更新当前DCT系数块中该非零元素的值;
步骤505、判断该宏块中是否还有未处理的DCT系数块;
若是,执行步骤502~步骤505;
若否,执行步骤506。
步骤506、对该宏块中更新后的所有DCT系数块进行反量化处理和反DCT处理,得到当前宏块对应的亮度块和色度块;
步骤507、根据当前宏块对应的亮度块和色度块的各像素值,确定当前宏块对应的A矩阵;
其中,A矩阵中前16×16个元素的值分别为更新的亮度块中第(i1+j)%8个像素的值,其中,i1和j分别为A矩阵的行和列,1≤i1≤16,1≤j≤16;
A矩阵中后8×16个元素的值分别为更新的两个色度块中第(i2+j)%8个像素的值;具体的,A矩阵中第i2行第j1列的元素值为第一个色度块中第(i2+j1)%8个像素的值,A矩阵中第i2行第j2列的元素值为第二个色度块中第(i2+j2)%8个像素的值,其中,i2为A矩阵的行,j1和j2为A矩阵的列,17≤i1≤24,1≤j1≤8,9≤j2≤16。
步骤508、判断是否还有未处理的宏块;
若是,则执行步骤502~步骤508;
若否,执行步骤509;
步骤509、将视频图像的各宏块的所有更新后的DCT系数块进行熵编码,以确定待编码视频图像的码流。
如图6所示,本发明实施例第二种视频图像的解码方法,包括以下步骤:
步骤601、初始化第二控制矩阵C和第二控制向量D,其中,C矩阵与第一控制矩阵A相同,D向量为1×16维的零向量;
在具体实施过程中,C矩阵可以通过哈希运算随机确定。
步骤602、对获取到的编码处理后的码流进行处理,得到该码流中各宏块对应的4×4的DCT系数块;
步骤603、针对每个DCT系数块,每解析出该DCT系数块中的一个非零元素d,则计算出d_haf=(d+1)/3;
步骤604、根据前一个宏块对应的C矩阵中确定的行向量与前一个非零元素对应的D向量,确定该非零元素对应的D向量;
具体的,若解析出的d的值大于0,则根据公式四确定该非零元素对应的D向量;
若解析出的d的值小于0,则根据公式五确定该非零元素对应的D向量。
步骤605、在该非零元素d的绝对值大于1时,判断(d+1)%3的值与D[dnum]的值是否相等,其中,D向量为该非零元素d对应的第二控制向量,dnum标记d在当前DCT系数块的所有非零元素中的位置;
若是,则发出告警信息,表示该视频图像已被篡改,并结束本流程;
若否,则执行步骤606;
步骤606、根据公式六更新该DCT系数块中的该非零元素d的值;
步骤607、判断该宏块中是否有未处理的DCT系数块;
若是,执行步骤602~步骤607;
若否,执行步骤608。
步骤608、对该宏块的所有更新后的DCT系数块进行反量化处理和反DCT处理,得到该宏块对应的亮度块和色度块;
步骤609、根据该宏块对应的亮度块和色度块的各元素值,确定该宏块对应的C矩阵;
其中,该宏块对应的C矩阵中前16×16个元素的值分别为更新的亮度块中第(i1+j)%8个像素的值,其中,i1和j分别为C矩阵的行和列,1≤i1≤16,1≤j≤16;
该宏块对应的C矩阵中后8×16个元素的值分别为更新的两个色度块中第(i2+j)%8个像素的值;具体的,C矩阵中第i2行第j1列的元素值为第一个色度块中第(i2+j1)%8个像素的值,C矩阵中第i2行第j2列的元素值为第二个色度块中第(i2+j2)%8个像素的值,其中,i2为C矩阵的行,j1和j2为C矩阵的列,17≤i1≤24,1≤j1≤8,9≤j2≤16。
步骤610、判断是否有未处理的宏块;
若是,则执行步骤602~步骤610;
若否,则输出解码后的视频图像。
基于同一发明构思,本发明实施例中还提供了一种视频图像的编码装置,由于该装置解决问题的原理与上述视频图像的编码方法相似,因此该设备的实施可以参见方法的实施,重复之处不再赘述。
如图7所示,本发明实施例视频图像的编码装置包括:
第一编码处理模块71,用于对待编码视频图像的各宏块进行离散余弦变换DCT处理和量化处理,得到各宏块对应的DCT系数块;
第二编码处理模块72,用于更新各宏块对应的DCT系数块的元素值;具体为:针对当前DCT系数块的每个非零元素,根据前一个宏块对应的第一控制矩阵中确定的行向量与前一个非零元素对应的第一控制向量,确定该非零元素对应的第一控制向量,并根据该非零元素对应的第一控制向量的元素值,更新当前DCT系数块中该非零元素的值;以及根据当前宏块的每个更新后的DCT系数块的元素值,确定当前宏块对应的第一控制矩阵;其中初始的第一控制矩阵为仅包含0和1的矩阵,初始的第一控制向量为零向量;
第三编码处理模块73,将待编码视频图像的各宏块的所有更新后的DCT系数块进行熵编码,以确定待编码视频图像的码流。
在具体实施过程中,第二编码处理模块72具体用于:
根据该非零元素的值与该非零元素在当前DCT系数块的位置标号,确定前一个宏块对应的第一控制矩阵中的行向量;以及根据前一个宏块对应的第一控制矩阵中确定的行向量与前一个非零元素对应的第一控制向量,确定该非零元素对应的第一控制向量。
在具体实施过程中,第第二编码处理模块72具体用于:
若确定的非零元素的值大于0,根据下列公式确定该非零元素对应的第一控制向量:
B=(B′+A[(d_haf+dnum)%24][j])%3;
其中,B向量为该非零元素对应的第一控制向量,B向量为1×16维向量;B′向量为前一个非零元素对应的第一控制向量;A矩阵为前一个宏块对应的第一控制矩阵,A矩阵为24×16维矩阵,1≤j≤16;d_haf=(d+1)/3,d为当前DCT系数块中非零元素,dnum标识d在当前DCT系数块中的位置;公式中的%为取余运算。
若确定的非零元素的值小于0,根据下列公式确定该非零元素对应的第一控制向量:
B=(B′+A[(d_haf+dnum+1)%24][j])%3;
其中,B向量为该非零元素对应的第一控制向量,B向量为1×16维向量;B′向量为前一个非零元素对应的第一控制向量;A矩阵为前一个宏块对应的第一控制矩阵,A矩阵为24×16维矩阵,1≤j≤16;d_haf=(d+1)/3,d为当前DCT系数块中非零元素,dnum标识d在当前DCT系数块中的位置;公式中的%为取余运算。
在具体实施过程中,第二编码处理模块72具体用于:
在确定的非零元素的绝对值大于1时,根据下列公式更新当前DCT系数块的该非零元素的值:
d′=d+B[dnum];
其中,d为当前DCT系数块中非零元素,d′为更新后的d;B向量为该非零元素对应的第一控制向量,B为1×16维向量;dnum标识d在当前DCT系数块中的位置。
在具体实施过程中,第二编码处理模块73具体用于:
针对当前宏块,对更新后的DCT系数块进行反量化处理和反DCT处理,得到当前宏块对应的亮度块和色度块;以及根据当前宏块对应的亮度块和色度块的各像素值,确定当前宏块对应的第一控制矩阵。
其中,第一控制矩阵的第i1行j列的元素值为当前宏块的亮度块中第(i1+j)%8个像素的值,其中,所述第一控制矩阵为24×16维矩阵,所述亮度块为16×16维矩阵,1≤i1≤16,1≤j≤16,%为取余运算;
第一控制矩阵的第i2行j1列的元素值为当前宏块的第一个色度块中第(i2+j1)%8个像素的值,其中,色度块为8×8维矩阵,17≤i2≤24,1≤j1≤8;
第一控制矩阵的第i2行j2列的元素值为当前宏块的第二个色度块中第(i2+j2)%8个像素的值,其中,9≤j2≤16。
基于同一发明构思,本发明实施例中还提供了一种视频图像的解码装置,由于该装置解决问题的原理与上述视频图像的解码方法相似,因此该设备的实施可以参见方法的实施,重复之处不再赘述。
如图8所示,本发明实施例视频图像的解码装置包括:
第一解码处理模块81,用于对获取到的编码处理后的码流进行处理,得到该码流中各宏块对应的离散余弦DCT系数块;
第二解码处理模块82,用于更新各宏块对应的DCT系数块的元素值;具体为:针对当前DCT系数块的每个非零元素,根据前一个宏块对应的第二控制矩阵中确定的行向量与前一个非零元素对应的第二控制向量,确定该非零元素对应的第二控制向量,并根据该非零元素对应的第二控制向量的元素值,更新当前DCT系数块中该非零元素的元素值;其中初始的第二控制矩阵的元素值与编码处理中确定的初始的第一控制矩阵的元素值相同,初始的第二控制向量为零向量;
告警模块83,用于在确定当前DCT系数块的非零元素的值与该非零元素对应的第二控制向量的元素值满足触发条件时,发出告警信息。
其中,触发条件为:(d+1)%3的值与D[dnum]的值不相等;其中,d为当前DCT系数块中绝对值大于1的非零元素的值,D向量为当前DCT系数块对应的第二控制向量,dnum标识d在当前DCT系数块中的位置;%为取余运算。
在具体实施过程中,该装置还包括:
第三解码处理模块84,用于在确定当前DCT系数块的非零元素的值与该非零元素对应的第二控制向量的元素值不满足触发条件,且当前宏块对应的所有DCT系数块都更新完毕后,根据当前宏块的每个更新后的DCT系数块的元素值,确定当前宏块对应的第一控制矩阵。
在具体实施过程中,第二解码处理模块82具体用于:
根据该非零元素的值与该非零元素在当前DCT系数块的位置标号,确定前一个宏块对应的第二控制矩阵中的行向量;以及根据前一个宏块对应的第二控制矩阵中确定的行向量与前一个非零元素对应的第二控制向量,确定该非零元素对应的第二控制向量。
在具体实施过程中,第二解码处理模块82具体用于:
若确定的非零元素的值大于0,根据下列公式确定该非零元素对应的第二控制向量:
D=(D′+C[(d_haf+dnum)%24][j])%3;
其中,D向量为该非零元素对应的第二控制向量,D向量为1×16维向量;D′向量为前一个非零元素对应的第二控制向量;C矩阵为前一个宏块对应的第二控制矩阵,C矩阵为24×16维矩阵,1≤j≤16;d_haf=(d+1)/3,d为当前DCT系数块中非零元素,dnum标识d在当前DCT系数块中的位置;公式中的%为取余运算。
在具体实施过程中,第二解码处理模块82具体用于:
若确定的非零元素的值大于0,根据下列公式确定该非零元素对应的第二控制向量:
D=(D′+C[(d′+dnum+1)%24][j])%3;
其中,D向量为该非零元素对应的第二控制向量,D′向量为前一个非零元素对应的第二控制向量,D向量为1×16维向量;C矩阵为前一个宏块对应的第二控制矩阵,C矩阵为24×16维矩阵,1≤j≤16;d_haf=(d+1)/3,d为当前DCT系数块中非零元素,dnum标识d在当前DCT系数块中的位置;公式中的%为取余运算。
在具体实施过程中,第二解码处理模块82具体用于:在确定的非零元素的绝对值大于1时,根据下列公式更新当前DCT系数块中该非零元素的值:
d′=d+D[dnum];
其中,d为当前DCT系数块中非零元素,d′为修正后的d,D向量为该非零元素对应的第二控制向量,D为1×16维向量;dnum标识d在当前DCT系数块中的位置。
其中,第二控制矩阵的第i1行j列的元素值为当前宏块的亮度块中第(i1+j)%8个像素的值,其中,所述第二控制矩阵为24×16维矩阵,所述亮度块为16×16维矩阵,1≤i1≤16,1≤j≤16,%为取余运算;
第二控制矩阵的第i2行j1列的元素值为当前宏块的第一个色度块中第(i2+j1)%8个像素的值,其中,色度块为8×8维矩阵,17≤i2≤24,1≤j1≤8;
第二控制矩阵的第i2行j2列的元素值为当前宏块的第二个色度块中第(i2+j2)%8个像素的值,其中,9≤j2≤16。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
本发明实施例中针对当前DCT系数块的每个非零元素,根据前一个宏块对应的第一控制矩阵中确定的行向量与前一个非零元素对应的第一控制向量,确定该非零元素对应的第一控制向量,并根据该非零元素对应的第一控制向量的元素值,更新当前DCT系数块中该非零元素的值;以及根据当前宏块的每个更新后的DCT系数块的元素值,确定当前宏块对应的第一控制矩阵;对更新后的各DCT系数块进行熵编码后得到该待编码视频图像的码流;从而能够在DCT域上来抵御对DCT系数块的元素的攻击,使得在解码过程中能够确定解码得到的视频图像是否已被篡改,提高了编码和解码过程的安全性。
实验结果证明,采用本发明实施例的编、解码方法,在复杂度没有明显提高的基础下,同样的PSNR(Peak Signal to Noise Ratio,峰值信噪比)条件下可以控制比特率(BitRate)变化在10%以内;并且在视频图像被篡改的情况下,正确检测率达到95%以上,漏检率能够控制在5%以内,不会发生错检情况,可见,采用本发明实施例的编、解码方法能够有效提高视频图像的安全性。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。