具体实施方式
图像数据和视频数据可以被划分为8×8大小的块进行整数变换。对于8×8数据块,可以使用大小为8×8的水平正向整数变换矩阵和垂直正向整数变换矩阵进行变换。变换的方法如下:
选取8×8正向整数变换矩阵系数。
1)一个8×8的垂直正向整数变换矩阵T8v中包含了8个相同或不同的整数系数,这8个整数系数的取值是2的非负整数次幂,或该矩阵的每一行系数由2的非负整数次幂组成的每一行系数乘以相同的整数得到,T8v中的第k行第0列的系数tk0表示为nk,0≤k≤7,T8v表示如下:
并且,
其中,ti,tj分别代表了T8v中第i,j行的行向量,tT j是tj的转置列向量;
2)一个8×8的水平正向整数变换矩阵T8h中包含了8个相同或不同的整数系数,这8个整数系数的取值是2的非负整数次幂,或该矩阵的每一列系数由2的非负整数次幂组成的每一列系数乘以相同的整数得到,T8h中的第0行第k列的系数t0k表示为nk,0≤k≤7,T8h表示如下:
并且,
其中,tT i,tT j分别代表了T8h中第i,j列的列向量,tj是tT j的转置行向量。
根据所设置的8×8正向整数变换矩阵系数,选取相应的8×8正向缩放矩阵系数。
1)对于一个8×8的垂直正向整数变换矩阵T8v,设置相对应的8×1垂直正向缩放系数矩阵S8v的矩阵系数si,si代表了S8v中第i行的正向缩放系数,
其中,tij是T8v中的第i行第j列系数,并且,至少存在一组i和j,当i≠j且0≤i,j≤7时,si≠sj;
2)对于一个8×8的水平正向整数变换矩阵T8h,设置相对应的1×8水平正向缩放系数矩阵S8h的矩阵系数sj,sj代表了S8h中第j列的正向缩放系数,
其中,tij是T8h中的第i行第j列系数,并且,至少存在一组i和j,当i≠j且0≤i,j≤7时,si≠sj;
3)根据以上的8×1垂直正向缩放系数矩阵S8v和1×8水平正向缩放系数矩阵S8h,设置8×8正向缩放系数矩阵S8×8,
S8×8=S8v×S8h。
根据所设置的8×8正向整数变换矩阵对8×8输入数据块进行8×8正向变换处理。
C8×8=T8v×B8×8×T8h,
其中,B8×8表示8行8列的8×8正向整数变换输入数据块,T8v和T8h分别代表了8×8垂直正向整数变换矩阵和8×8水平正向整数变换矩阵,C8×8代表了8×8正向整数变换的中间结果。
根据所设置的8×8正向缩放系数矩阵对8×8正向变换处理后的数据进行正向缩放处理。
D8×8=C8×8S8×8
其中,算符表示C8×8中的每一个系数分别与S8×8中相同位置的正向缩放系数相乘,D8×8代表了8×8正向整数变换后的8×8输出数据块。
一个8×8垂直正向整数变换矩阵可以是:
它满足于上述的8×8垂直正向整数变换矩阵所必需的条件。
一个8×8水平正向整数变换矩阵可以是:
它满足于上述的8×8水平正向整数变换矩阵所必需的条件。
对于该8×8的垂直正向整数变换矩阵T8v,相对应的8×1垂直正向缩放系数矩阵S8v就是:
对于该8×8的水平正向整数变换矩阵T8h,相对应的1×8水平正向缩放系数矩阵S8h就是:
根据以上的8×1垂直正向缩放系数矩阵S8v和1×8水平正向缩放系数矩阵S8h,设置8×8正向缩放系数矩阵S8×8:
由于该8×8垂直正向整数变换矩阵和8×8水平正向整数变换矩阵中的系数都是2的次幂,用该8×8垂直正向整数变换矩阵和8×8水平正向整数变换矩阵对输入数据进行8×8正向变换处理只需要进行移位运算即可,计算复杂度非常低。
一个8×8垂直正向整数变换矩阵可以是:
它满足于上述的8×8垂直正向整数变换矩阵所必需的条件。
一个8×8水平正向整数变换矩阵可以是:
它满足于上述的8×8水平正向整数变换矩阵所必需的条件。
对于该8×8的垂直正向整数变换矩阵T8v,相对应的8×1垂直正向缩放系数矩阵S8v就是:
对于该8×8的水平正向整数变换矩阵T8h,相对应的1×8水平正向缩放系数矩阵S8h就是:
根据以上的8×1垂直正向缩放系数矩阵S8v和1×8水平正向缩放系数矩阵S8h,设置8×8正向缩放系数矩阵S8×8:
由于该8×8垂直正向整数变换矩阵和8×8水平正向整数变换矩阵中的系数都是2的次幂,用该8×8垂直正向整数变换矩阵和8×8水平正向整数变换矩阵对输入数据进行8×8正向变换处理只需要进行移位运算即可,计算复杂度非常低。同时,又由于8×8正向缩放系数矩阵S8×8中的正向缩放系数非常接近,可以使得解码器的8×8量化系数都一样,便于解码器量化处理。
一个8×8垂直正向整数变换矩阵可以是:
它满足于上述的8×8垂直正向整数变换矩阵所必需的条件。
一个8×8水平正向整数变换矩阵可以是:
它满足于上述的8×8水平正向整数变换矩阵所必需的条件。
对于该8×8的垂直正向整数变换矩阵T8v,相对应的8×1垂直正向缩放系数矩阵S8v就是:
对于该8×8的水平正向整数变换矩阵T8h,相对应的1×8水平正向缩放系数矩阵S8h就是:
根据以上的8×1垂直正向缩放系数矩阵S8v和1×8水平正向缩放系数矩阵S8h,设置8×8正向缩放系数矩阵S8×8:
一个8×8垂直正向整数变换矩阵可以是:
它满足于上述的8×8垂直正向整数变换矩阵所必需的条件。
一个8×8水平正向整数变换矩阵可以是:
它满足于上述的8×8水平正向整数变换矩阵所必需的条件。
对于该8×8的垂直正向整数变换矩阵T8v,相对应的8×1垂直正向缩放系数矩阵S8v就是:
对于该8×8的水平正向整数变换矩阵T8h,相对应的1×8水平正向缩放系数矩阵S8h就是:
根据以上的8×1垂直正向缩放系数矩阵S8v和1×8水平正向缩放系数矩阵S8h,设置8×8正向缩放系数矩阵S8×8:
S8×8=S8v×S8h。
12
图像数据和视频数据进行8×8正向整数变换处理后,可以进行8×8逆向整数变换而得到恢复,数据可以被划分为8×8大小的块进行8×8逆向整数变换。对于8×8大小的块,可以使用大小为8×8的水平逆向整数变换矩阵和垂直逆向整数变换矩阵进行变换。变换的方法如下:
选取8×8逆向整数变换矩阵系数。
1)一个8×8的垂直逆向整数变换矩阵T8v中包含了8个相同或不同的整数系数,这8个整数系数的取值是2的非负整数次幂,或该矩阵的每一列系数由2的非负整数次幂组成的每一列系数乘以相同的整数得到,T8v中的第0行第k列的系数t0k表示为nk,0≤k≤7,T8v表示如下:
并且,
其中,tT i,tT j分别代表了T8v中第i,j列的列向量,tj是tT j的转置行向量;
2)一个8×8的水平逆向整数变换矩阵T8h中包含了8个相同或不同的整数系数,这8个整数系数的取值是2的非负整数次幂,或该矩阵的每一行系数由2的非负整数次幂组成的每一行系数乘以相同的整数得到,T8h中的第k行第0列的系数tk0表示为nk,0≤k≤7,T8h表示如下:
并且,
13
其中,ti,tj分别代表了T8h中第i,j行的行向量,tT j是tj的转置列向量。
根据所设置的8×8逆向整数变换矩阵系数,选取相应的8×8逆向缩放矩阵系数。
1)对于一个8×8的垂直逆向整数变换矩阵T8v,设置相对应的8×1垂直逆向缩放系数矩阵S8v的矩阵系数si,si代表了S8v中第i行的逆向缩放系数,
其中,tji是T8v中的第j行第i列系数,并且,至少存在一组i和j,当i≠j且0≤i,j≤7时,si≠sj;
2)对于一个8×8的水平逆向整数变换矩阵T8h,设置相对应的1×8水平正向缩放系数矩阵S8h的矩阵系数sj,sj代表了S8h中第j列的正向缩放系数,
其中,tji是T8h中的第j行第i列系数,并且,至少存在一组i和j,当i≠j且0≤i,j≤7时,si≠sj;
3)根据以上的8×1垂直逆向缩放系数矩阵S8v和1×8水平逆向缩放系数矩阵S8h,设置8×8正向缩放系数矩阵S8×8,
S8×8=S8v×S8h。
根据所设置的8×8逆向缩放系数矩阵对输入数据块进行8×8逆向缩放处理。
C8×8=D8×8S8×8
其中,D8×8表示8行8列的8×8逆向整数变换输入数据块,C8×8代表了8×8逆向整数变换的中间结果,算符表示D8×8中的每一个系数分别与S8×8中相同位置的逆向缩放系数相乘。
根据所设置的8×8逆向整数变换矩阵对8×8逆向缩放处理过的数据进行8×8逆向变换处理。
B8×8=T8v×C8×8×T8h
其中,C8×8代表了8×8逆向整数变换的中间结果,B8×8表示8行8列的8×8逆向整数变换输出数据块,T8v和T8h分别代表了8×8垂直逆向整数变换矩阵和8×8水平逆向整数变换矩阵。
一个8×8垂直逆向整数变换矩阵可以是:
它满足于上述的8×8垂直逆向整数变换矩阵所必需的条件。
一个8×8水平逆向整数变换矩阵可以是:
它满足于上述的8×8水平逆向整数变换矩阵所必需的条件。
对于该8×8的垂直逆向整数变换矩阵T8v,相对应的8×1垂直逆向缩放系数矩阵S8v就是:
对于该8×8的水平逆向整数变换矩阵T8h,相对应的1×8水平逆向缩放系数矩阵S8h就是:
根据以上的8×1垂直逆向缩放系数矩阵S8v和1×8水平逆向缩放系数矩阵S8h,设置8×8逆向缩放系数矩阵S8×8:
由于该8×8垂直逆向整数变换矩阵和8×8水平逆向整数变换矩阵中的系数都是2的次幂,用该8×8垂直逆向整数变换矩阵和8×8水平逆向整数变换矩阵对输入数据进行8×8逆向变换处理只需要进行移位运算即可,计算复杂度非常低。
一个8×8垂直逆向整数变换矩阵可以是:
它满足于上述的8×8垂直逆向整数变换矩阵所必需的条件。
一个8×8水平逆向整数变换矩阵可以是:
它满足于上述的8×8水平逆向整数变换矩阵所必需的条件。
对于该8×8的垂直逆向整数变换矩阵T8v,相对应的8×1垂直逆向缩放系数矩阵S8v就是:
对于该8×8的水平逆向整数变换矩阵T8h,相对应的1×8水平逆向缩放系数矩阵S8h就是:
根据以上的8×1垂直逆向缩放系数矩阵S8v和1×8水平逆向缩放系数矩阵S8h,设置8×8逆向缩放系数矩阵S8×8:
由于该8×8垂直逆向整数变换矩阵和8×8水平逆向整数变换矩阵中的系数都是2的次幂,用该8×8垂直逆向整数变换矩阵和8×8水平逆向整数变换矩阵对输入数据进行8×8逆向变换处理只需要进行移位运算即可,计算复杂度非常低。同时,又由于8×8逆向缩放系数矩阵S8×8中的逆向缩放系数非常接近,可以使得解码器的8×8量化系数都一样,便于解码器量化处理。
一个8×8垂直逆向整数变换矩阵可以是:
它满足于上述的8×8垂直逆向整数变换矩阵所必需的条件。
一个8×8水平逆向整数变换矩阵可以是:
它满足于上述的8×8水平逆向整数变换矩阵所必需的条件。
对于该8×8的垂直逆向整数变换矩阵T8v,相对应的8×1垂直逆向缩放系数矩阵S8v就是:
对于该8×8的水平逆向整数变换矩阵T8h,相对应的1×8水平逆向缩放系数矩阵S8h就是:
根据以上的8×1垂直逆向缩放系数矩阵S8v和1×8水平逆向缩放系数矩阵S8h,设置8×8逆向缩放系数矩阵S8×8:
一个8×8垂直逆向整数变换矩阵可以是:
它满足于上述的8×8垂直逆向整数变换矩阵所必需的条件。
一个8×8水平逆向整数变换矩阵可以是:
它满足于上述的8×8水平逆向整数变换矩阵所必需的条件。
对于该8×8的垂直逆向整数变换矩阵T8v,相对应的8×1垂直逆向缩放系数矩阵S8v就是:
对于该8×8的水平逆向整数变换矩阵T8h,相对应的1×8水平逆向缩放系数矩阵S8h就是:
根据以上的8×1垂直逆向缩放系数矩阵S8v和1×8水平逆向缩放系数矩阵S8h,设置8×8逆向缩放系数矩阵S8×8:
S8×8=S8v×S8h。
8×8整数变换可以运用于各种基于块变换的图像处理和视频处理技术。例如,8×8整数变换可以与基于频率或基于人类视觉系统(HVS)的视频编码相结合,如扫描,量化和滤波。可以根据不同的运用场合选取8×8正向整数变换矩阵和8×8逆向整数变换矩阵的系数,具有一定的灵活性。
8×8正向整数变换的装置主要包括输入装置,8×8正向变换装置,8×8正向整数变换系数存储装置,8×8正向缩放装置,8×8正向缩放系数存储装置和输出装置,如图1所示。输入装置110用于接受存储8×8正向整数变换的输入数据。8×8正向变换系数存储装置150用于存储8×8正向整数变换矩阵系数,但是在一些应用中,也可以将8×8正向变换系数存储装置150与8×8正向变换装置120相合并。8×8正向变换装置120根据8×8正向整数变换系数存储装置150所存储的8×8正向整数变换系数对输入数据块进行8×8正向变换处理,其中包括的算术逻辑单元125可以用乘法运算,加法运算和移位运算实现该处理。8×8正向缩放系数存储装置160用于存储8×8正向缩放矩阵系数,但是在一些应用中,也可以将8×8正向缩放系数存储装置160与8×8正向缩放装置130相合并。8×8正向缩放装置130根据8×8正向缩放系数存储装置160所存储的8×8正向缩放系数对8×8正向变换处理后的数据进行8×8正向缩放处理,其中包括的算术逻辑单元可以用乘法运算,加法运算和移位运算实现该处理。输出装置140用于存储8×8正向整数变换后的数据,并提供输出。
8×8逆向整数变换的装置主要包括输入装置,8×8逆向缩放装置,8×8逆向缩放系数存储装置,8×8逆向变换装置,8×8逆向整数变换系数存储装置和输出装置,如图2所示。输入装置210用于接受存储8×8逆向整数变换的输入数据。8×8逆向缩放系数存储装置250用于存储8×8逆向缩放矩阵系数,但是在一些应用中,也可以将8×8逆向缩放系数存储装置250与8×8逆向缩放装置220相合并。根据8×8逆向缩放系数存储装置250所存储的8×8逆向缩放系数对输入数据块进行8×8逆向缩放处理,其中包括的算术逻辑单元可以用乘法运算,加法运算和移位运算实现该处理。8×8逆向变换系数存储装置260用于存储8×8逆向整数变换矩阵系数,但是在一些应用中,也可以将8×8逆向变换系数存储装置260与8×8逆向变换装置230相合并。8×8逆向变换装置根据8×8逆向整数变换系数存储装置260所存储的8×8逆向整数变换系数对8×8逆向缩放处理过的数据进行8×8逆向变换处理,其中包括的算术逻辑单元可以用乘法运算,加法运算和移位运算实现该处理。输出装置240用于存储8×8逆向整数变换后的数据,并提供输出。
上述的8×8正向整数变换的装置和8×8逆向整数变换的装置可以用处理器系统,微控制器,可编程逻辑器件或微处理器实现部分或全部的操作。上述的一些操作可以用软件实现,同时另一些操作可以用硬件实现。
为了方便起见,这些操作被描述为不同的互连的功能单元或不同的软件模块。但是,这不是必要的。在一些应用中,这些功能单元或模块可以被集成到单一的逻辑器件,程序或操作中,而没有明显的界限。在任何情况中,功能单元和软件模块或描述的特征可以独立实现,或与其他操作一起用硬件或软件实现。
图3表示了利用上述8×8整数变换方法或8×8整数变换装置进行编码和解码的系统。这个系统可以是计算机,视频设备,照相机,网络处理器等等任何能处理数据的设备。模块310中的数据可以是任何需要变换处理的数据。例如,系统可以用来处理视频信息。
模块320中的8×8正向整数变换可以使用上述的任何一种8×8正向整数变换矩阵和相应的8×8正向缩放系数矩阵来处理模块310中的数据。8×8正向整数变换后的数据在模块330中被量化,在模块340中进行熵编码。编码后的数据在模块350中,可以存储在存储器中或通过信道传输。
数据的解码首先在模块360中进行反熵编码,再在模块370中进行反量化。模块380使用与编码过程中所采用的8×8正向整数变换矩阵相对应的8×8逆向整数变换矩阵和相应的8×8逆向缩放系数矩阵进行逆向整数变换。8×8逆向整数变换后的数据在模块390中作为8×8逆向整数变换数据输出。
上述的系统可以用处理器系统,微控制器,可编程逻辑器件或微处理器实现部分或全部的操作。上述的一些操作可以用软件实现,同时另一些操作可以用硬件实现。
为了方便起见,这些操作被描述为不同的互连的功能单元或不同的软件模块。但是,这不是必要的。在一些应用中,这些功能单元或模块可以被集成到单一的逻辑器件,程序或操作中,而没有明显的界限。在任何情况中,功能单元和软件模块或描述的特征可以独立实现,或与其他操作一起用硬件或软件实现。