% 读取图像
img = imread('your_image.jpg');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 将灰度图像转换为double类型
img_dbl = double(gray_img);
% 对图像应用DCT
dct_img = dct2(img_dbl);
% 设置要保留的系数的百分比
retain_percentage = 0.1;
% 计算要保留的系数数量
[rows, cols] = size(dct_img);
num_coeffs = round(retain_percentage * rows * cols);
% 将DCT系数排序
dct_sorted = sort(abs(dct_img(:)), 'descend');
threshold = dct_sorted(num_coeffs);
% 创建一个掩码,保留大于阈值的系数
mask = abs(dct_img) >= threshold;
% 应用掩码
compressed_dct_img = dct_img .* mask;
% 应用逆DCT变换
reconstructed_img = idct2(compressed_dct_img);
% 将图像转换为uint8类型
reconstructed_img = uint8(reconstructed_img);
% 显示原始图像和重建图像
figure;
subplot(1, 2, 1);
imshow(gray_img);
title('原始图像');
subplot(1, 2, 2);
imshow(reconstructed_img);
title('重建图像');
代码说明
- 步骤1:读取图像并转换为灰度图像,因为DCT在灰度图像上处理更简单。
- 步骤2:将灰度图像转换为双精度类型,然后应用二维DCT。
- 步骤3:通过设置保留的系数的百分比来压缩图像。选择重要的DCT系数,其他系数设为零。
- 步骤4:应用逆DCT变换将压缩的DCT系数转换回图像。
- 步骤5:显示原始图像和重建后的图像,比较压缩效果。
通过这种方法,你可以实现图像的压缩和解压缩。你可以调整retain_percentage
参数来控制压缩率,保留更多的系数会提高重建图像的质量,但会减少压缩效果。