jpeg图像压缩matlab代码
时间: 2023-09-14 10:12:10 浏览: 111
以下是一个简单的 JPEG 图像压缩 Matlab 代码示例,该代码适用于灰度图像。
```matlab
% 读取图像
img = imread('image.jpg');
img = im2double(img);
% 设置量化矩阵
Q = [16 11 10 16 24 40 51 61;
12 12 14 19 26 58 60 55;
14 13 16 24 40 57 69 56;
14 17 22 29 51 87 80 62;
18 22 37 56 68 109 103 77;
24 35 55 64 81 104 113 92;
49 64 78 87 103 121 120 101;
72 92 95 98 112 100 103 99];
% 分块大小
N = 8;
% 计算 DCT 系数
dct_coef = zeros(size(img));
for i = 1:N:size(img,1)
for j = 1:N:size(img,2)
block = img(i:i+N-1,j:j+N-1);
dct_coef(i:i+N-1,j:j+N-1) = dct2(block);
end
end
% 量化 DCT 系数
quant_coef = round(dct_coef ./ (Q * N));
% 反量化 DCT 系数
dct_coef = quant_coef .* (Q * N);
% 重构图像
reconstructed_img = zeros(size(img));
for i = 1:N:size(reconstructed_img,1)
for j = 1:N:size(reconstructed_img,2)
block = idct2(dct_coef(i:i+N-1,j:j+N-1));
reconstructed_img(i:i+N-1,j:j+N-1) = block;
end
end
% 显示原图像和压缩后的图像
figure; imshow(img); title('Original Image');
figure; imshow(reconstructed_img); title('Compressed Image');
```
该代码将图像分成 $8 \times 8$ 的块,对每个块进行离散余弦变换 (DCT),然后使用 JPEG 标准中的量化矩阵进行量化。反量化后,使用逆离散余弦变换 (IDCT) 重构图像。最后,该代码显示原始图像和压缩后的图像。
阅读全文