灰度图实现压缩比为8:1的dct压缩MATLAB代码
时间: 2024-02-29 12:57:31 浏览: 16
以下是实现灰度图8:1 DCT压缩的MATLAB代码:
```matlab
% 读取灰度图像
img = imread('gray_image.jpg');
[m, n] = size(img);
% 将图像分成8*8的小块
blocks = mat2cell(img, 8*ones(1, m/8), 8*ones(1, n/8));
% 对每个小块进行DCT变换
dct_blocks = cellfun(@(block) dct2(block), blocks, 'UniformOutput', false);
% 对每个小块进行量化
quantization_table = [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];
quantization_blocks = cellfun(@(block) round(block./quantization_table), dct_blocks, 'UniformOutput', false);
% 将量化后的小块串联成一个向量
quantization_vector = cell2mat(reshape(quantization_blocks, 1, []));
% 从量化后的向量中取出8:1部分进行压缩
compressed_quantization_vector = quantization_vector(1:8:end);
% 将压缩后的向量还原成量化后的小块
compressed_quantization_blocks = mat2cell(compressed_quantization_vector, ones(1, numel(compressed_quantization_vector)/64)*64, 1);
% 对每个小块进行逆量化
dequantization_blocks = cellfun(@(block) block.*quantization_table, compressed_quantization_blocks, 'UniformOutput', false);
% 对每个小块进行逆DCT变换
decompressed_blocks = cellfun(@(block) idct2(block), dequantization_blocks, 'UniformOutput', false);
% 将小块拼接成原始图像
decompressed_img = cell2mat(decompressed_blocks);
% 将像素值限制在0-255范围内
decompressed_img(decompressed_img < 0) = 0;
decompressed_img(decompressed_img > 255) = 255;
decompressed_img = uint8(decompressed_img);
% 显示压缩前后的图像
subplot(1, 2, 1);
imshow(img);
title('原始图像');
subplot(1, 2, 2);
imshow(decompressed_img);
title('压缩后解压缩图像');
```
这段代码将原始灰度图像分成8x8大小的小块,对每个小块进行DCT变换,然后进行量化。接着将量化后的小块串联成一个向量,从中取出8:1部分进行压缩。然后将压缩后的向量还原成量化后的小块,对每个小块进行逆量化和逆DCT变换,最后将小块拼接成原始图像。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)