MATLAB编写基于离散正弦变换(DCT)的图像压缩程序

MATLAB编写基于离散正弦变换(DCT)的图像压缩程序,第1张

I=imread('cameraman.tif')

I=im2double(I) %转换图像矩阵为双精度型。

T=dctmtx(8) %产生二维DCT变换矩阵

%计算二维DCT,矩档锋键阵T及其转置是DCT函数P1*X*P2的参数

B=blkproc(I,[8,8],'P1*x*P2',T,T') %二值掩模,用来压缩DCT系数,只留下DCT系数中左上角的10个

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) %只保留DCT变换的10个系数

I2=blkproc(B2,[8 8],'P1*x*P2',T',T) %重构图像

subplot(1,2,1)

imshow(I)

title('原始图像')

subplot(1,2,2)

imshow(I2)

title('压缩图像')

我这个程序也是改了后的,不过我运行过了,图片压缩效果都能出来,就是压缩比没有变小,我也不知道基戚为什么,如果有人给决绝了麻烦通知一下行巧,我邮箱[email protected]

%IMG=imread('租岁c.jpg')

IMG=imread('lena.jpg')

figure

imshow(IMG,[0,255])%

title('原始图像')

I=rgb2gray(IMG)

J=dct2(I)

figure

subplot(1,2,1)

imshow(J,[0,255])

title('dct变亩拆换图像')

colormap(jet(256))

J(abs(J)<10)=0

subplot(1,2,2)

imshow(J,[0,255])

title('dct-10变换图像')

colormap(jet(256))

K=idct2(J)

figure

imshow(K,[0,255])

title('dct2逆变换弊耐睁图像')


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12445989.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存