背景技术:
在部分视频编码标准中,如ITU制定的H.261,H.263,以及ISO的MPEG组织制定的MPEG-1、MPEG-2、MPEG-4标准,都是采用离散余弦变换(DCT)去除空间域的信息冗余度来达到压缩的目的。理想的8×8离散余弦变换和反离散余弦变换分别如下:
由于在理想的8×8离散余弦变换中,变换矩阵乘法系数是无理数,而在实际的实现上这些乘法系数位宽不可能达到无限长,因此都是利用定点的实现方法拟合这些无理数来实现离散余弦变换变换。同样的,在解码部分,由于理想的8×8反离散余弦变换(IDCT)采用的是理想的8×8离散余弦变换矩阵的转置矩阵,所以其变换矩阵系数也是无理数,同样需要定点的实现来拟合这些无理数。
此外,在软件硬件的具体实现中,为了进一步降低资源的开销和提升处理速度,通常采用加法器和移位器来取代乘法器的功能;而对于不同的定点数,所需要的加法器和移位次数都是不一样的,这就要求如何用最优或者接近最优的方法来获得理想的8×8 DCT/IDCT中这些无理数的定点表示,使之既能达到足够高的精度,又能使得所需要的加法器和移位次数最少。
目前对于用定点反离散余弦变换的精度有一系列的要求,这些要求体现在标准ISO/IEC 23002-1-2006中。整个测试分为随机数生成、随机数输入测试、全零输入测试和临近DC倒置测试以及相应的指标。
以下是ISO/IEC 23002-1-2006标准定义的精度测试规范:
一、随机数生成
设变量i,j,k和s为采用二进制补码表示的32比特整数。采用下面指定的方法产生一维随机数组r[i],其中i=0..(64*Q-1),Q=10000或Q=1000000。
1、令s=1。
2、对于i=0到64*Q-1,进行以下操作
A、令s=(s*1103515245)+12345
B、令j=s&0x7ffffffe
C、令 floor(x)表示取不大于x的最大整数
D、令r[i]=k-L
二、随机数输入测试
1、对于下面的每一对L和H,
-L=2B和H=2B-1
-L=5*2B-8和H=5*2B-8
-L=300*2B-8和H=300*2B-8
进行以下步骤:
采用一中的方法生成64*Q个随机数,组成数组r[i],i=0..(64*Q-1).
2、对于z在0..(Q-1)中的每一个值,进行以下操作
对于x=0..7和y=0..7,置fz[y][x]=r[64*z+8*y+x].
对8×8矩阵fz进行一次式(1)定义的理想的DCT操作,然后四舍五入得到整数的8×8变换系数矩阵F′z必须采用至少64比特的浮点精度。对于u=0..7和v=0..7,置F″z[v][u]=clip3(-2B+3,2B+3-1,F′z[v][u]),clip3(a,b,x)定义如下:
对8×8变换系数矩阵F″z进行一次式(2)定义的IDCT操作,然后四舍五入得到8×8矩阵g′z。必须采用至少64比特的浮点精度。对于x=0..7和y=0..7,置g″z[y][x]=clip3(-2B,2B-1,g′z[y][x]).对8×8变换系数矩阵F″z进行一次被测的IDCT操作,然后四舍五入得到8×8矩阵h′z。
对于x=0..7和y=0..7,置h″z[y][x]=clip3(-2B,2B-1,h′z[y][x]).
4、对x=0..7和y=0..7,按下面式子计算8×8矩阵d和e
其中d[y][x]表示矩阵(x,y)位置上像素的平均误差(pme),e[y][x]表示矩阵(x,y)位置上像素的均方误差(pmse)
5、计算m和n的值
其中m表示所有像素的平均误差(ome),|n|表示所有像素的均方误差(omse)。
6、判定是否满足以下精度要求:
●p<=1.
●对于x=0..7和y=0..7,|d[y][x]|<=0.015.
●对于x=0..7和y=0..7,e[v][x]<=0.06.
●|n|<=0.02.
●m<=0.0015.
7、置r[i]=-r[i]对于i=0..(64*Q-1),重复上述步骤2到6。
三、全零输入测试(All Zero Test)
置F′[v][u]=0,u=0..7和v=0..7。
对8×8变换系数矩阵F′[v][u]进行一次被测的IDCT,然后四舍五入得到对应的8×8矩阵h′。
对于x=0..7和y=0..7,h′[v][x]的值应该为0。
四、临近DC倒置测试(Near-DC Inversion Test)
对于变量z=0..(2B+4-1),进行以下步骤
对于u=0..7和v=0..7,置Fz″[v][u]=0.
置Fz″[0][0]=z-2B+3.
如果z是偶数,置Fz″[7][7]=1;否则置Fz″[7][7]=0.
对8×8变换系数矩阵Fz″进行一次理论的IDCT,然后四舍五入得到对应的8×8矩阵g′z.必须采用至少64比特的浮点精度。
对于x=0..7和y=0..7,置g″z[y][x]=clip3(-2B,2B-1,g′z[y][x]).对8×8变换系数矩阵Fz″进行一次需要测试的IDCT,然后四舍五入得到对应的8×8矩阵h′z
对于x=0..7和y=0..7,h″z[y][x]=clip3(-2B,2B-1,h′z[y][x]). p的值必须小于等于1。
对于一个定点反离散余弦变换,如果满足上述所有的精度测试规范要求,则该定点反离散余弦变换符合ISO/IEC 23002-1-2006。
具体实施方式:
实施实例一
一种应用于视频和图像处理的变换方法,其包括的8×8反离散余弦变换中的反变换预处理步骤中的8×8矩阵M是:
取联系参数S=10,k=12,ψ=1.3522468075656300,
φ=0.9596162302465070可以得到:
A=1024.0000000000000000,B=757.2582122367510000,
C=1067.0932480341200000,,D=1070.9248339636200000,
E=560.0000000000000000,F=789.1260989220920000,G=791.9595949289330000.
H=1112.0000000000000000,I=1115.9928315182000000,
J=1120.0000000000000000;
a×212=5432.3763787064400000,b×212=1080.5668459858300000,
c×212=4605.3463196628800000,d×212=3077.1940310190000000,
h×212=2127.2189396844700000,t×212=5135.5608143231700000.
取A=1024,B=757,C=1067,D=1071,E=560,F=789,G=792,H= 1112,J=1116,J=1120,a=5432/4096,b=1080/4096,c=4605/4096,d=3078/4096,h=2128/4096,t=5136/4096。
所述的应用于视频和图像处理的反离散余弦变换方法,其详细步骤如下:
1、将输入数据8×8数据块X’做操作I得到反变换预处理的输出数据:所述操作I为
其中M[i][j]表示矩阵M中第(i,j)个元素;
2、进行第一次一维反变换,步骤如下:
将X按行排成8组向量,将第一行向量(X[0][0],X[0][1],L,X[0][7])作为输入,进行如下运算:
p10=X[0][0],p14=X[0][4],p12=X[0][2],p16=X[0][6],p17=X[0][1]-X[0][7],p13=X[0][3],p15=X[0][5],p11=X[0][1]+X[0][7];
p20=p10+p14,p24=p10-p14,p22=p12*h-p16*t,p26=p16*h+p12*t,p27=p15+p17,p23=p11-p13,p25=p17-p15,p21=p11+p13;
p30=p20+p26,p34=p24+p22,p32=p24-p22,p36=p20-p26,p37=p27*c-p21*d,p33=p23*a-p25*b,p35=p23*b+p25*a,p31=p21*c+p27*d;
x’[0][0]=p30+p31,x’[1][0]=p34+p35,x’[2][0]=p32+p33,x’[3][0]=p36+p37,x’[4][0]=p36-p37,x’[5][0]=p32-p33,x’[6][0]=p34-p35,x’[7][0]=p30-p31;
其中*表示乘法操作;
3、重复步骤2,将(X[1][0],X[1][1],L,X[1][7]),(X[2][0],X[2][1],L,X[2][7]),(X[3][0],X[3][1],L,X[3][7]),(X[4][0],X[4][1],L,X[4][7]),(X[5][0],X[5][1],L,X[5][7]),(X[6][0],X[6][1],L,X[6][7]),(X[7][0],X[7][1],L,X[7][7])依次进行相同的一维反变换,得到第一次一维反变换输出x’;
4、进行第二次一维反变换,步骤如下:
将x’按行排成8组向量,将第一行向量(x′[0][0],x′[0][1],L,x′[0][7])作为输入,进行如下运算:
p10=x’[0][0],p14=x’[0][4],p12=x’[0][2],p16=x’[0][6],p17=x’[0][1]-x’[0][7],p13=x’[0][3],p15=x’[0][5],p11=x’[0][1]+x’[0][7];
p20=p10+p14,p24=p10-p14,p22=p12*h-p16*t,p26=p16*h+p12*t,p27=p15+p17,p23=p11-p13,p25=p17-p15,p21=p11+p13;
p30=p20+p26,p34=p24+p22,p32=p24-p22,p36=p20-p26,p37=p27*c-p21*d,p33=p23*a-p25*b,p35=p23*b+p25*a,p31=p21*c+p27*d;
x”[0][0]=p30+p31,x”[1][0]=p34+p35,x”[2][0]=p32+p33,x”[3][0]=p36+p37,x”[4][0]=p36-p37,x”[5][0]=p32-p33,x”[6][0]=p34-p35,x”[7][0]=p30-p31;
5、重复步骤4,将(x′[1][0],x′[1][1],L,x′[1][7]),(x′[2][0],x′[2][1],L,x′[2][7]),(x′[3][0],x′[3][1],L,x′[3][7]),(x′[4][0],x′[4][1],L,x′[4][7]),(x′[5][0],x′[5][1],L,x′[5][7]),(x′[6][0],x′[6][1],L,x′[6][7]),(x′[7][0],x′[7][1],L,x′[7][7])进行相同的一维反变换,得到第二次一维反变换输出x”;
6、将所得的第二次一维反变换后的输出x”进行后处理右移w位得到8×8反离散余弦变换的输出x,其中w=13,操作如下:x[v][u]=x″[v][u]>>13 v,u∈[0,63],>>表示右移位操作,反之,<<表示左移位操作;
实施实例二
一种应用于视频和图像处理的变换方法,其包括的8×8反离散余弦变换中的反变换预处理步骤中的8×8矩阵M是:
取联系参数S=10,k=12,ψ=0.9000703207408190,
φ=0.5918825969335950可以得到:
A=1024.0000000000000000,B=1137.6888854164000000,
C=1730.0728308369000000,D=1608.9350515170000000,
E=1264.0000000000000000,F=1922.1529595742400000,
G=1787.5659428395900000,H=2923.0000000000000000,
I=2718.3347843854700000,J=2528.0000000000000000;
a×212=3615.8493569450400000,b×212=719.2371556781520000,
c×212=3065.3690701062000000,d×212=2048.2141299835100000,
h×212=1312.0493699271300000,t×212=3167.5673833811500000,
取A=1024,B=1138,C=1730,D=1609,E=1264,F=1922,G=1788,H=2923,I=2718,J=2528,a=3616/4096,b=719/4096,c=3066/4096,d=2048/4096,h=1312/4096,t=3168/4096
所述的应用于视频和图像处理的反离散余弦变换方法,其详细步骤如下:
1、将待变换的8×8数据X’做反变换预处理得到反变换预处理的输出:
2、进行第一次一维反变换,步骤如下:
将X按行排成8组向量,将第一行向量(X[0][0],X[0][1],L,X[0][7])作为输入,进行如下运算:
p10=X[0][0],p14=X[0][4],p12=X[0][2],p16=X[0][6],p17=X[0][1]-X[0][7],p13=X[0][3],p15=X[0][5],p11=X[0][1]+X[0][7];
p20=p10+p14,p24=p10-p14,p22=p12⊙h-p16⊙t,p26=p16⊙h+p12⊙t,p27=p15+p17,p23=p11-p13,p25=p17-p15,p21=p11+p13;
p30=p20+p26,p34=p24+p22,p32=p24-p22,p36=p20-p26,p37=p27⊙c-p21⊙d,p33=p23⊙a-p25⊙b,p35=p23⊙b+p25⊙a,p31=p21⊙c+p27⊙d;
x’[0][0]=p30+p31,x’[1][0]=p34+p35,x’[2][0]=p32+p33,x’[3][0]=p36+p37,x’[4][0]=p36-p37,x’[5][0]=p32-p33,x’[6][0]=p34-p35,x’[7][0]=p30-p31
其中的⊙表示用加(减)法、移位实现乘法操作,定义如下:
x⊙a=1-(x>>3)+(x>>7);
x⊙b=(x>>3)-(x>>7)+(((x>>3)-(x>>7)-(x>>11))>>1)
x⊙h=((x+(x>>5))>>2)+(x>>4)
x⊙t=x+(x>>5)-((x+(x>>5))>>2)
x⊙d=x>>2
x⊙ c=(((x>>9)-x)>>2)-((x>>9)-x)
3、重复步骤2,将(X[1][0],X[1][1],L,X[1][7]),(X[2][0],X[2][1],L,X[2][7]),(X[3][0],X[3][1],L,X[3][7]),(X[4][0],X[4][1],L,X[4][7]),(X[5][0],X[5][1],L,X[5][7]),(X[6][0],X[6][1],L,X[6][7]),(X[7][0],X[7][1],L,X[7][7])进行相同的一维反变换,得到第一次一维反变换输出x’;
4、进行第二次一维反变换,步骤如下:
将x’按行排成8组向量,将第一行向量(x′[0][0],x′[0][1],L,x′[0][7])作为输入,进行如下运算:
p10=x’[0][0],p14=x’[0][4],p12=x’[0][2],p16=x’[0][6],p17=x’[0][1]-x’[0][7],p13=x’[0][3],p15=x’[0][5],p11=x’[0][1]+x’[0][7];
p20=p10+p14,p24=p10-p14,p22=p12⊙h-p16 ⊙t,p26=p16⊙h+p12⊙t,p27=p15+p17,p23=p11-p13,p25=p17-p15,p21=p11+p13;
p30=p20+p26,p34=p24+p22,p32=p24-p22,p36=p20-p26,p37=p27⊙c-p21⊙d,p33=p23⊙a-p25⊙b,p35=p23⊙b+p25⊙a,p31=p21⊙c+p27⊙d;
x”[0][0]=p30+p3 1,x”[1][0]=p34+p35,x”[2][0]=p32+p33,x”[3][0]=p36+p37,x”[4][0]=p36-p37,x”[5][0]=p32-p33,x”[6][0]=p34-p35,x”[7][0]=p30-p31
其中的⊙操作定义与步骤2中的定义相同;
5、重复步骤4,将(x′[1][0],x′[1][1],L,x′[1][7]),(x ′[2][0],x′[2][1],L,x′[2][7]),(x′[3][0],x′[3][1],L,x′[3][7]),(x′[4][0],x′[4][1],L,x′[4][7]),(x′[5][0],x′[5][1],L,x′[5][7]),(x′[6][0],x′[6][1],L,x′[6][7]),(x′[7][0],x′[7][1],L,x′[7][7])进行相同的一维反变换,得到第二次一维反变换输出x”;
6、将所得的第二次一维变换后的输出x”进行后处理右移w位得到8×8反离散余弦变换的输出x,其中w=13,步骤如下:x[v][u]=x″[v][u]>>13 v,u∈[0,63]。
实施实例三
一种应用于视频和图像处理的变换方法,其包括的8×8反离散余弦变换中的反变换预处理步骤中的8×8矩阵M是:
取联系参数S=10,k=12,
ψ=0.9000703207408190,φ=0.5918825969335950可以得到:
A=1024.0000000000000000,B=1137.6888854164000000,
C=1730.0728308369000000,D=1608.9350515170000000,
E=1264.0000000000000000,F=1922.1529595742400000,
G=1787.5659428395900000,H=2923.0000000000000000,
I=2718.3347843854700000,J=2528.0000000000000000;
a×212=3615.8493569450400000,b×212=719.2371556781520000,
c×212=3065.3690701062000000,d×212=2048.2141299835100000,
h×212=1312.0493699271300000,t×212=3167.5673833811500000.
取A=1024,B=1138,C=1730,D=1609,E=1264,F=1922,G=1788,H=2923,
I=2718,J=2528,a=3616/4096,b=719/4096,c=3066/4096,d=2048/4096,
h=1312/4096,t=3168/4096
可以验证,由以上{A、B、C、D、E、F、G、H、I、J、a、b、c、d、h、t}所构成的对应的8×8反离散余弦变换方法符合ISO/IEC 23002-1-2006和以下2条定义的精度要求:
(a)对于i∈[0,63],j∈[1,255],产生64个输入数据
令8×8输入数据矩阵N′
i,j=-N
i,j;将N
i,j和N′
i,j分别进行由{A、B、C、D、E、F、G、H、I、J、a、b、c、d、h、t}所构成的8×8反离散余弦变换,得到两个输出块,将其相加得到N″
i,j;对i,j取值范围内所有的组合,所得到的N″
i,j为全零;(b)根据ISO/IEC 23002-1-2006标准定义的随机数生成方法,对1000000组[-1,+1]范围内的随机数,将这些随机数作为输入,对由{A、B、C、D、E、F、G、H、I、J、a、b、c、d、h、t}所构成的8×8反离散余弦变换进行测试得到omse=0.000204,小于0.01。
所述的应用于视频和图像处理的反离散余弦变换方法,其详细步骤如下:
1、将待变换的8×8数据X’做反变换预处理得到反变换预处理的输出:
2、进行第一次一维反变换,步骤如下:将X按行排成8组向量,将第一行向量(X[0][0],X[0][1],L,X[0][7])作为输入,进行如下运算:
p10=X[0][0],p14=X[0][4],p12=X[0][2],p16=X[0][6],p17=X[0][1]-X[0][7],p13=X[0][3],p15=X[0][5],p11=X[0][1]+X[0][7];
p20=p10+p14,p24=p10-p14,p22=p12⊙h-p16⊙t,p26=p16⊙h+p12⊙t,p27=p15+p17,p23=p11-p13,p25=p17-p15,p21=p11+p13;
p30=p20+p26,p34=p24+p22,p32=p24-p22,p36=p20-p26,p37=p27⊙c-p21⊙d,p33=p23⊙a-p25⊙b,p35=p23⊙b+p25⊙a,p31=p21⊙c+p27⊙d;
x’[0][0]=p30+p31,x’[1][0]=p34+p35,x’[2][0]=p32+p33,x’[3][0]=p36+p37,x’[4][0]=p36-p37,x’[5][0]=p32-p33,x’[6][0]=p34-p35,x’[7][0]=p30-p31
其中的⊙操作定义如下:
x⊙a=1-(x>>3)+(x>>7);
x⊙b=(x>>3)-(x>>7)+(((x>>3)-(x>>7)-(x>>11))>>1)
x⊙h=((x+(x>>5))>>2)+(x>>4)
x⊙t=x+(x>>5)-((x+(x>>5))>>2)
x⊙d=x>>2
x⊙c=(((x>>9)-x)>>2)-((x>>9)-x);
3、重复步骤2,将(X[1][0],X[1][1],L,X[1][7]),(X[2][0],X[2][1],L,X[2][7]),(X[3][0],X[3][1],L,X[3][7]),(X[4][0],X[4][1],L,X[4][7]),(X[5][0],X[5][1],L,X[5][7]),(X[6][0],X[6][1],L,X[6][7]),(X[7][0],X[7][1],L,X[7][7])进行相同的一维反变换,得到第一次一维反变换输出x’;
4、进行第二次一维反变换,步骤如下:
将x’按行排成8组向量,将第一行向量(x′[0][0],x′[0][1],L,x′[0][7])作为输入,进行如下运算:
p10=x’[0][0],p14=x ’[0][4],p12=x’[0][2],p16=x’[0][6],p17=x’[0][1]-x’[0][7],p13=x’[0][3],p15=x’[0][5],p11=x’[0][1]+x’[0][7];
p20=p10+p14,p24=p10-p14,p22=p12⊙h-p16⊙t,p26=p16⊙h+p12⊙t,p27=p15+p17,p23=p11-p13,p25=p17-p15,p21=p11+p13;
p30=p20+p26,p34=p24+p22,p32=p24-p22,p36=p20-p26,p37=p27⊙c-p21⊙d,p33=p23⊙a-p25⊙b,p35=p23⊙b+p25⊙a,p31=p21⊙c+p27⊙d;
x”[0][0]=p30+p31,x”[1][0]=p34+p35,x”[2][0]=p32+p33,x”[3][0]=p36+p37,x”[4][0]=p36-p37,x”[5][0]=p32-p33,x”[6][0]=p34-p35,x”[7][0]=p30-p31
其中的⊙操作与2中的相同;
5、重复步骤4,将(x′[1][0],x′[1][1],L,x′[1][7]),(x′[2][0],x′[2][1],L,x′[2][7]),(x[3][0],x′[3][1],L,x′[3][7]),(x′[4][0],x′[4][1],L,x′[4][7]),(x′[5][0],x′[5]][1],L,x′[5][7]),(x[6][0],x′[6][1],L,x′[6][7],(x′[7][0],x′[7][7])进行相同的一维反变换,得到第二次一维反变换输出x”;
6、将所得的第二次一维变换后的输出x”进行后处理右移w位得到8×8反离散余弦变换的输出x,其中w=13,步骤如下:x[v][u]=x″[v][u]>>13 v,u∈[0,63]。
实施实例四
一种应用于视频和图像处理的变换方法,其包括的8×8离散余弦变换中的变换后处理步骤中的8×8矩阵M是:
取联系参数S=10,k=14,
ψ=1.1812048201875100、φ=0.8012529373378150,可以得到:
A=1024.0000000000000000,B=866.9114640401220000,
C=1277.9984350538200000,D=1225.9979498222600000,
E=733.9213735197150000,F=1081.9448187241100000,
G=1037.9215601470700000,H=1595.0000000000000000,
J=1530.1010363789400000,J=1467.8427470394300000;
a×214=18981.0000000000000000,b×214=3775.5556452332900000,
c×214=16091.3148131935000000,d×214=10751.8728142102000000,
h×214=7104.6752652150500000,t×214=17152.2033815388000000.
取A=1024,B=867,C=1278,D=1226,E=734,F=1082,G=1038,H=1595,I=1530,J=1468,a=18981/16384,b=3776/16384,c=16091/16384,d=10752/16384,h=7104/16384,t=17152/16384
所述的应用于视频和图像处理的离散余弦变换方法,其详细步骤如下:
1、将待变换的8×8数据y做正变换预处理得到正变换预处理的输出:y′[v][u]=y[u][v]<<7, v,u∈[0,7];
2、进行第一次一维正变换,步骤如下:
将y’按列排成8组向量,将第一列向量(y′[0][0],y′[1][0],L y′[7][0])T作为输入,进行如下运算:
q10=y’[0][0]+y’[1][0],q14=y’[1][0]+y’[6][0],q12=y’[2][0]+y’[5][0],
q16=y’[3][0]+y’[4][0],q17=y’[3][0]-y’[4][0],q13=y’[2][0]-y’[5][0],
q15=y’[1][0]-y’[6][0],q11=y’[0][0]-y’[7][0];
q20=q10+q16,q24=q14+q12,q22=q14-q12,q26=q10-q16,q27=q17*c+q11*d,q23=q13*a+q15*b,q25=q15*a-q13*b,q21=q11*c-q17*d;
q30=q20+q24,q34=q20-q24,q32=q22*h+q26*t,q36=q26*h-q22*t,q37=q27+q25,q33=q21-q23,q35=q27-q25,q31=q21+q23;
y”[0][0]=q30,y”[0][1]=q31+q31,y”[0][2]=q32,y”[0][3 ]=q33,y”[0][4]=q34,y”[0][5]=q35,y”[0][6]=q36,y”[0][7]=q31-q37;
3、重复步骤2,将(y′[0][1]、y′[1][1],Ly′[7][1])T、(y′[0][2],y′[1][2],L y′[7][2])T、(y′[0][3],y′[1][3],L y′[7][3])T、(y′[0][4],y′[1][4],L y′[7][4])T、(y′[0][5],y′[1][5],L y′[7][5])T、(y′[0][6]、y′[1][6],L y′[7][6])T、(y′[0][7],y′[1][7],L y′[7][7])T、进行相同的一维正变换,得到第一次一维正变换输出y”;
4、进行第二次一维正变换,步骤如下:
将y”按列排成8组向量,将第一列向量(y″[0][0],y″[1][0],L y″[7][0])T作为输入,进行如下运算:
q10=y”[0][0]+y”[1][0],q1=y”[1][0]+y”[6][0],q12=y”[2][0]+y”[5][0],
q16=y”[3][0]+y”[4][0],q17=y”[3][0]-y”[4][0],q13=y”[2][0]-y”[5][0],
c15=y”[1][0]-y”[6][0],q11=y” [0][0]-y”[7][0];
q20=q10+q16,q24=q14+q12,q22=q14-q12,q26=q10-q16,q27=q17*c+q11*d,q23=q13*a+q15*b,q25=q15*a-q13*b,q21=q11*c-q17*d;
q30=q20+q24,q34=q20-q24,q32=q22*h+q26*t,q36=q26*h-q22*t,q37=q27+q25,q33=q21-q23,q35=q27-q25,q31=q21+q23;
y
[0][0]=q30,y
[0][1]=q31+q31,y
[0][2]=q32,y
[0][3]=q33,y
[0][4]=q34,y
[0][5]=q35,y
[0][6]=q36,y
[0][7]=q31-q37;
5、重复步骤4,将(y″[0][1],y″[1][1],L y″[7][1]
T、(y″[0][2],y″[1][2],L y″[7][2])
T、(y″[0][3],y″[1][3],L y″[7][3])
T、(y″[0][4],y″[1][4],y″[7][4])
T、(y″[0][5],y″[1][5],L y″[7 ][5])
T、(y″[0][6],y″[1][6],L y″[7][6])
T、(y″[0][7],y″[1][7],L y″[7][7])
T进行相同的一维正变换,得到第二次一维正变换输出y
;
6、将所得的第二次一维正变换后的输出y
进行后处理右移z位得到8×8离散余弦变换的输出Y,取z=20,步骤如下:
Y[v][u]=[y
[v][u]×M[v][u]+(1<<19)-f(y
[v][u])]>>20。
实施实例五
一种应用于视频和图像处理的变换方法,其包括的8×8离散余弦变换中的变换后处理步骤中的8×8矩阵M是:
取联系参数S=10,k=12,
ψ=0.9000703207408190,φ=0.5918825969335950可以得到:
A=1024.0000000000000000,B=1137.6888854164000000,
C=1730.0728308369000000,D=1608.9350515170000000,
E=1264.0000000000000000,F=1922.1529595742400000,
G=1787.5659428395900000,H=2923.0000000000000000,
I=2718.3347843854700000,J=2528.0000000000000000;
a×212=3615.8493569450400000,b×212=719.2371556781520000,
c×212=3065.3690701062000000,d×212=2048.2141299835100000,
h×212=1312.0493699271300000,t×212=3167.5673833811500000.
取A=1024,B=1138,C=1730,D=1609,E=1264,F=1922,G=1788,H=2923,I=2718,J=2528,a=3616/4096,b=719/4096,c=3066/4096,d=2048/4096,h=1312/4096,t=3168/4096
所述的应用于视频和图像处理的离散余弦变换方法,其详细步骤如下:
1、将待变换的8×8数据y做正变换预处理得到正变换预处理的输出:y′[v][u]=y[u][v]<<7,v,u∈[0,7];
2、将y’按列排成8组向量,将第一列向量(y′[0][0],y′[1][0],L y′[7][0])T作为输入,进行如下运算:
c10=y’[0][0]+y’[1][0],q14=y’[1][0]+y’[6][0],q12=y’[2][0]+y’[5][0],
c16=y’[3][0]+y’[4][0],q17=y’[3][0]-y’[4][0],q13=y’[2][0]-y’[5][0],
c15=y’[1][0]-y’[6][0],q11=y’[0][0]-y’[7][0];
q20=q10+q16,q24=q14+q12,q22=q14-q12,q26=q10-q16,q27=q17⊙c+q11⊙d,q23=q13⊙a+q15⊙b,q25=q15⊙a-q13⊙b,q21=q11⊙c-q17⊙d;
q30=q20+q24,q34=q20-q24,q32=q22⊙h+q26⊙t,q36=q26⊙h-q22⊙t,q37=q27+q25,q33=q21-q23,q35=q27-q25,q31=q21+q23;
y”[0][0]=q30,y”[0][1]=q31+q31,y”[0][2]=q32,y”[0][3]=q33,y”[0][4]=q34,y”[0][5]=q35,y”[0][6]=q36,y”[0][7]=q31-q37;
其中的⊙操作定义如下:
x⊙a=1-(x>>3)+(x>>7);
x⊙b=(x>>3)-(x>>7)+(((x>>3)-(x>>7)-(x>>11))>>1)
x⊙j=((x+(x>>5))>>2)+(x>>4)
x⊙t=x++(x>>5)-((x+(x>>5))>>2)
x⊙d=x>>2
x⊙c=(((x>>9)-x)>>2)-((x>>9)-x);
3、重复步骤2,将(y′[0][1],y′[1][1],L y′[7][1])T、(y′[0][2],y′[1][2],L y′[7][2])T、(y′[0][3],y′[1][3],Ly′[7][3])T、(y′[0][4],y′[1][4],L y′(y′[7][4])T、(y′[0][5],y′[1][5],L y′[7][5])T、(y′[0][6],y′[1][6],L y′[7][6])T、(y′[0][7],y′[1][7],L y′[7][7])T进行相同的一维正变换,得到第一次一维正变换输出y”;
4、进行第二次一维正变换,步骤如下:
将y”按列排成8组向量,将第一列向量(y″[0][0],y″[1][0],Ly″[7][0])T作为输入,进行如下运算:
q10=y”[0][0]+y”[1][0],q14=y”[1][0]+y”[6][0],q12=y”[2][0]+y”[5][0],
q16=y”[3][0]+y”[4][0],q17=y”[3][0]-y”[4][0],q13=y”[2][0]-y”[5][0],
q15=y”[1][0]-y”[6][0],q11=y”[0][0]-y”[7][0];
q20=q10+q16,q24=q14+q12,q22=q14-q12,q26=q10-q16,q27=q17⊙c+q11⊙d,q23=q13⊙a+q15⊙b,q25=q15⊙a-q13⊙b,q21=q11⊙c-q17⊙d;
q30=q20+q24,q34=q20-q24,q32=q22⊙h+q26⊙t,q36=q26⊙h-q22⊙t,q37=q27+q25,q33=q21-q23,q35=q27-q25,q31=q21+q23;
y
[0][0]=q30,y
[0][1]=q31+q31,y
[0][2]=q32,y
[0][3]=q33,y
[0][4]=q34,y
[0][5]=q35,y
[0][6]=q36,y
[0][7]=q31-q37
其中的⊙和步骤2中的相同;
5、重复步骤4,将(y″[0][1],y″[1][1],L y″[7][1])T、(y″[0][2,y″[1][2],y″[1][2],L y″[7][2])T(y″[0][3),y″[1][3],L y″[7][3])T、(y″[0][4],y″[1][4],L y″[7][4])T、(y″[0][5],y″[1][5],L y″[7][5])T、(y″[0][6],y″[1][6],L y″[7][6])T、(y″[0][7],y″[1][7],L y″[7][7])T进行相同的一维正变换,得到第二次一维正变换输出y;
6、将所得的第二次一维正变换后的输出 y
进行后处理右移z位得到8×8反离散余弦变换的输出Y,取z=20,步骤如下:
y[v][u]=[y
[v][u]×M[v][u]+(1<<19)-f(y
[v][u])]>>20。
实施实例六
一种应用于视频和图像处理的变换方法,其包括的8×8反离散余弦变换中的反变换预处理步骤中的8×8矩阵M是:
取联系参数S=10,k=12,
ψ=0.9000703207408190,φ=0.5918825969335950可以得到:
A=1024.0000000000000000,B=1137.6888854164000000,
C=730.0728308369000000,D=1608.9350515170000000,
E=1264.0000000000000000,F=1922.1529595742400000,
G=1787.5659428395900000,H=2923.0000000000000000,
I=2718.3347843854700000,J=2528.0000000000000000;
a×212=3615.8493569450400000,b×212=719.2371556781520000,
c×212=3065.3690701062000000,d×212=2048.2141299835100000,
h×212=1312.0493699271300000,t×212=3167.5673 833811500000.
取A=1024,B=1138,C=1730,D=1609,E=1264,F=1922,G=1788,H=2923,I=2718,J=2528,a=3616/4096,b=719/4096,c=3066/4096,d=2048/4096,h=1312/4096,t=3168/4096
参见图1所示,所述的应用于视频和图像处理的反离散余弦变换方法的详细步骤如下:
1、输入数据8×8数据块X’动态范围为[-28+3,28+3-1],即12位位宽,将X’输入,进行反变换预处理:得到反变换预处理的输出数据X;
2、将X按行排成8组向量:
(X[0][0],X[0][1],L,X[0][7]),(X[1][0],X[1][1],L,X[1][7]),(X[2][0],X[2][1],L,X[2][7]),
(X[3][0],X[3][1],L,X[3][7]),(X[4][0],X[4][1],L,X[4][7]),(X[5][0],X[5][1],L,X[5][7],
(X[6][0],X[6][1],L,X[6][7]),(X[7][0],X[7][1],L,X[7][7]);每组向量分别进行一维反变换,其中每组向量均作为图3中的X0~X7进行一维反变换,图3中的x0~x7即为每组一维反变换的结果xi’:
x′0=(x′[0][0],x′[0][1],L,x′[0][7]),x′1=(x′[1][0],x′[1][1],L,x′[1][7]),
x′2=(x′[2][0],x′[2][1],L,x′[2][7]),x′3=(x′[3][0],x′[3][1],L,x′[3][7]),
x′4=(x′[4][0],x′[4][1],L,x′[4][7]),x′5=(x′[5][0],x′[5][1],L,x′[5][7]),
x′6=(x′[6][0],x′[6][1],L,x′[6][7]),x′7=(x′[7][0],x′[7][1],L,x′[7][7])。
图3中的
操作分别用如下的加法、减法、移位操作的组合实现:
x
b=(x>>3)-(x>>7)+(((x>>3)-(x>>7)-(x>>11))>>1)
x
h=((x+(x>>5))>>2)+(x>>4)
x
t=x+(x>>5)-((x+(x>>5))>>2)
xc=(((x>>9)-x)>>2)-((x>>9)-x)
一维反变换的输出x’,
3、将存储的x’按列排成8组向量,每组向量分别作为图3中的X0~X7进行第二次一维反变换,图3中的x0~x7即为每组向量第二次一维反变换的结果,得到第二次一维反变换输出x”;
4、将x”进行反变换后处理,即右移w位,其中w=13:
x[v][u]=x″[v][u]>>13v,u∈[0.63];
得到8×8反离散余弦变换的输出x。
实施实例七
一种应用于视频和图像处理的变换方法,其包括的8×8离散余弦变换中的正变换后处理步骤中的8×8矩阵M的排列方式是:
取联系参数S=10,k=12,
ψ=0.9000703207408190,φ=0.5918825969335950可以得到:
A=1024.0000000000000000,B=1137.6888854164000000,
C=1730.0728308369000000,D=1608.9350515170000000,
E=1264.0000000000000000,F=1922.1529595742400000,
G=1787.5659428395900000,H=2923.0000000000000000,
I=2718.3347843854700000,J=2528.0000000000000000;
a×212=3615.8493569450400000,b×212=719.2371556781520000,
c×212=3065.3690701062000000,d×212=2048.2141299835100000,
h×212=1312.0493699271300000,t×212=3167.5673833811500000.
取A=1024,B=1138,C=1730,D=1609,E=1264,F=1922,G=1788,H=2923,I=2718,J=2528,a=3616/4096,b=719/4096,c=3066/4096,d=2048/4096,h=1312/4096,t=3168/4096;
参见图2所示,所述的应用于视频和图像处理的离散余弦变换方法的详细步骤如下:
1、输入数据8×8数据块y动态范围为[-28,28-1],将y输入,进行正变换预处理:y′[v][u]=y[u][v]<<7,v,u∈[0,7],得到正变换预处理的输出y’;
2、将y’按列排成8组向量,(y′[0][0],y′[1][0],L y′[7][0])T,(y′[0][1],y′[1][1],L y′[7][1])T,(y′[0][2],y′[1][2],L y′[7][2])T,(y′[0][3],y′[1][3],L y′[7][3])T,(y′[0][4],y′[1][4],L y′[7][4])T,(y′[0][5],y′[1][5],L y′[7][5])T,(y′[0][6],y′[1][6],L y′[7][6])T,(y′[0][7],y′[1][7],L y′[7][7])T,每组向量分别作为图4中的x0~x7输入一维正变换装置进行一维正变换,每组一维正变换的结果均为图4中的X0~X7:(y″[0][0],y″[1][0],L y″[7][0])T,(y″[0][1],y″[1][1],L y″[7][1])T、(y″[0][2],y″[1][2],L y″[7][2])T、(y″[0][3],y″[1][3],L y″[7][3])T、(y″[0][4],y″[1][4],L y″[7][4])T、(y″[0][5],y″[1][5],L y″[7][5])T、(y″[0][6],y″[1][6],L y″[7][6])T、(y″[0][7],y″[1][7],L y″[7][7])T;
图4中的操作分别用如下的加法、减法、移位操作的组合实现:
x
b=(x>>3)-(x>>7)+(((x>>3)-(x>>7)-(x>>11))>>1);
x
h=((x+(x>>5))>>2)+(x>>4);
x
t=x+(x>>5)-((x+(x>>5))>>2);
x
c=(((x>>9)-x)>>2)-((x>>9)-x);
3、将存储的y”按行排成8组向量,每组向量分别作为图4中的x
0~x
7再次进行第二次一维正变换,图4中的X
0~X
7即为每组向量第二次一维正变换的结果,得到第二次一维正变换的输出y
;
4、将所得的第二次一维正变换后的输出 y
进行正变换后处理,即右移z位,得到8×8反离散余弦变换的输出数据Y,取z=20:即y[v][u]=[y
[v][u]×M[v][u]+(1<<19)-f(y
[v][u])]>>20。