4.5.2 变换编码压缩
变换编码,这是最常用的方法。变换编码是指将给定的图像变换到另一个数据域(如频域)上,使得大量的信息能用较少的数据来表示,从而达到压缩的目的。变换编码有很多,如离散傅里叶变换(Discrete Fourier Transform,简称DFT)、离散余弦变换(Discrete Cosine Transform,简称DCT)、离散哈达玛变换(Discrete Hadamard Transform,简称DHT)。这些编码方法,首先使用如离散余弦变换(DCT)或者小波变换这样的傅里叶相关变换,然后进行量化和用熵编码法压缩。
MATLAB图像处理工具箱中提供实现图像块操作函数blkproc(),以及离散余弦变换函数dctmtx()。图4-4是一幅原始图像,图4-5是经DCT编码压缩过的图像。程序代码如下:
f=imread('teapot.jpg');
f=double(f)/255;
imshow(f),colormap(gray);
g=im2double(f);
t=dctmtx(8);
b=blkproc(g,[8 8],'P1*x*P2',t,t');
mask=[1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
b2=blkproc(b,[8 8],'P1.*x',mask);
f2=blkproc(b2,[8 8],'P1*x*P2',t',t);
figure,imshow(f2)。
图4-4
图4-5
图4-6是一幅原始图像,图4-7是经离散哈达玛变换编码压缩过的图像。程序代码如下:
f=imread('camera.jpg');
imshow(f),colormap(gray);
mask=[1 1 1 1
1-1 1-1
1 1-1-1
1-1-1 1];
g1=double(f);
g2=conv2(g1,mask);
g3=uint8(g2);
figure,imshow(g3)。
图4-6
图4-7
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。