这个用法肯定是没有错的,是书上的例程。只要理解以下几点,就容易了:
(1)Mask矩阵是用来压缩dct系数的
(2)有些指令是可以等效替换的,那个程序并不是最简洁的,只是告诉dct和逆dct的计算步骤
blkproc是分块处理函数,用法得等效形式如下:
fun = @dct2;
J = blkproc(I,[8 8],fun);
这2条语句可以等效为J = blkproc(I,[8 8],‘dct2’);
B=blkproc(I,[8,8],'P1*x*P2',T,T');%进行二维dct变换,可以换为B=blkproc(I,[8,8],'dct2');
B2=blkproc(B,[8 8],'P1.*x',Mask); %系数压缩
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);%进行二维dct逆变换,可以换为I2=blkproc(B2,[8,8],'idct2');
对于不分块的情形,可以进行简单验证:
>> a=magic(3);b=blkproc(a,[3,3],'P1*x*P2',t,t');c=blkproc(a,[3,3],'dct2');d=dct2(a);
>> b,c,d
b =
15.0000 0 0.0000
0.0000 -0.0000 6.9282
0.0000 3.4641 0.0000
c =
15.0000 0 0
0 0 6.9282
0 3.4641 0
d =
15.0000 0 0
0 0 6.9282
0 3.4641 0
结果基本一致 |