| 这个用法肯定是没有错的,是书上的例程。只要理解以下几点,就容易了: (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
 结果基本一致
 |