用matlab写一个图像压缩代码 要求1.图像格式是jpeg 2.原图像显示,压缩后的图像显示 3.压缩图像的压缩比例显示
时间: 2024-03-10 09:45:46 浏览: 58
基于Matlab的jpeg压缩代码
5星 · 资源好评率100%
好的,我理解了您的要求。下面是一个简单的 MATLAB 图像压缩代码,它可以将 JPEG 格式的图像进行压缩,并显示原图像和压缩后的图像,同时展示压缩比例。
```matlab
% 读入 JPEG 图像
im = imread('image.jpg');
% 显示原图像
figure(1);
imshow(im);
title('原图像');
% 将图像转换为 YCbCr 颜色空间,只对 Y 分量进行压缩
im_ycbcr = rgb2ycbcr(im);
im_y = im_ycbcr(:,:,1);
% 对 Y 分量进行离散余弦变换(DCT)
im_dct = dct2(im_y);
% 设定压缩比例
compression_ratio = 0.5;
% 计算需要保留的 DCT 系数数量
dct_coeffs = numel(im_dct);
num_coeffs = round(dct_coeffs * compression_ratio);
% 保留最大的 DCT 系数
dct_flat = reshape(im_dct, [], 1);
[~, idx] = sort(abs(dct_flat), 'descend');
dct_thresh = dct_flat(idx(num_coeffs));
im_dct(abs(im_dct) < dct_thresh) = 0;
% 对 Y 分量进行反离散余弦变换(IDCT)
im_y_compress = idct2(im_dct);
% 将压缩后的 Y 分量与原图像的 CbCr 分量组合成压缩后的图像
im_compress_ycbcr = im_ycbcr;
im_compress_ycbcr(:,:,1) = im_y_compress;
im_compress = ycbcr2rgb(im_compress_ycbcr);
% 显示压缩后的图像
figure(2);
imshow(im_compress);
title('压缩后的图像');
% 计算压缩比例并显示
num_pixels = size(im, 1) * size(im, 2);
num_coeffs_compress = sum(abs(im_dct(:)) > 0);
compression_ratio_actual = num_coeffs_compress / dct_coeffs;
fprintf('压缩比例:%f\n', compression_ratio_actual);
```
请将代码保存为 `compress_image.m` 并将 `image.jpg` 替换为您要压缩的 JPEG 图像。压缩比例可以通过修改 `compression_ratio` 变量来实现。
阅读全文