Blkproc 函数的用法为:I = blkproc(A,[size1 , size2] , fun , arg1 ,agr2…)。
其中A是待分块矩阵,size为分块的规模,fun为自己实现的函数,arg1,agr2…
为fun的参数。在指定了size后,此函数会自动将原来的A矩阵按[size1,size2]
规模进行划分,然后对每个分出来的子矩阵,将其传入 fun 函数,执行相应的功
能。最后,会将所有子矩阵执行 fun 函数后得到的结果矩阵拼到一起,存入 I 中。
本次实验中,我用到I2=blkproc(A,[8 8],“P1*x*P2”,T,T’),其中T=dctmtx(8)。
这样就相当于将 A 矩阵中的每一个不重复的 8*8 矩阵进行一个 2 维 DCT 变换,
然后将结果拼到 I2 中,这样就实现了对整个矩阵分块进行二维 DCT 变换。再将
T 和 T’置换位置,实现一个逆变换,即可得到重构的图片。
在进行 DCT 系数压缩时,通过观察可以看出,无论是 1 维 DCT 变换还是 2
维 DCT 变换,DCT 矩阵的非零值主要位于左上角,右下角几乎都是 0。所以,
可以按压缩系数保留左上角的数据,把其余的数据清 0,达到压缩的目的。举个
例子,如果要进行 1/4 的系数压缩,那就把 DFT 矩阵的左上角 1/4 的部分,即
[1,256]*[1,256]的范围留下,其余的部分都清 0,这样就实现了只保留 1/4 的内
容,即实现了我设想的 1/4 压缩。对于 1/16、1/64 的压缩系数类似。而对于 8*8
分块的矩阵,我直接使用了 MATLAB 自带的 blkproc 函数进行压缩。
上述 8*8 分块 DCT、压缩的内容,主要参考了:
http://www.doc88.com/p-2129986101481.html
四、实验结果
1、lena 图片的灰度图:(左边为原图,右边为灰度图)
评论0