二维dct压缩matlab代码
时间: 2023-05-16 09:03:54 浏览: 159
二维DCT压缩是一种将图像数据压缩的方法,通过对图像进行离散余弦变换(DCT),可以将冗余信息减少,达到压缩的目的。在Matlab中,可以使用dct2函数实现二维DCT压缩。下面是一份示例代码:
```matlab
%% 读入图像
img = imread('lena.png');
imwrite(img, 'original.png');
%% 转为灰度图像
img_gray = rgb2gray(img);
%% 对图像进行二维DCT变换
img_dct = dct2(img_gray);
%% 提取低频系数
n = 32; % 设置低频系数个数
img_dct_compress = img_dct;
img_dct_compress(n+1:end, :) = 0;
img_dct_compress(:, n+1:end) = 0;
%% 对图像进行逆DCT变换
img_dct_recover = idct2(img_dct_compress);
%% 显示原图和压缩后图像
figure;
subplot(1,2,1);
imshow(img_gray);
title('Original Image');
subplot(1,2,2);
imshow(uint8(img_dct_recover));
title(['Compressed Image ', num2str(n), ' Coefficients']);
%% 保存压缩后图像
imwrite(uint8(img_dct_recover), ['compress_', num2str(n), '_coefficients.png']);
```
首先,代码读入了一个彩色图像,并将其转为灰度图像。然后,通过dct2函数对灰度图像进行二维DCT变换,得到一个系数矩阵。接着,代码提取系数矩阵中的低频系数,抹去高频系数,并对压缩后的系数矩阵进行逆DCT变换,得到压缩后的图像。最后,通过imshow函数展示原图和压缩后图像,并将压缩后的图像保存至本地文件。在代码中,变量n可控制一共提取多少低频系数,n越大,压缩后的图像质量越高,但压缩比也会越低。
阅读全文