matlab实现:1. 对图像进行DCT变换 首先对图像autumn.tif进行DCT变换,然后对DCT变换后的矩阵中小于10的系数设为0,然后重构图像。要求显示原始图像、DCT变换结果和重构后的图像。 2. 使用Matlab对图像作DCT压缩 把输入图像cameraman.tif划分成8×8的图像块,计算它们的DCT系数,并且只保留64个DCT系数中的10个。然后对每个图像块利用这10个系数进行逆DCT变换来重构图像。
时间: 2024-02-13 11:02:54 浏览: 129
1. 对图像进行DCT变换
首先,读取图像并显示:
```matlab
img = imread('autumn.tif');
imshow(img);
title('Original Image');
```
接下来,进行DCT变换:
```matlab
dct_img = dct2(img);
```
然后,将小于10的系数设为0:
```matlab
dct_img(abs(dct_img) < 10) = 0;
```
最后,进行反DCT变换并显示重构后的图像:
```matlab
idct_img = idct2(dct_img);
imshow(idct_img);
title('Reconstructed Image');
```
完整代码如下:
```matlab
img = imread('autumn.tif');
imshow(img);
title('Original Image');
dct_img = dct2(img);
dct_img(abs(dct_img) < 10) = 0;
idct_img = idct2(dct_img);
imshow(idct_img);
title('Reconstructed Image');
```
2. 使用Matlab对图像作DCT压缩
首先,读取图像并显示:
```matlab
img = imread('cameraman.tif');
imshow(img);
title('Original Image');
```
然后,将图像划分成8x8的块,并计算DCT系数:
```matlab
dct_img = blkproc(double(img), [8 8], @dct2);
% 将DCT系数矩阵展成一维向量
dct_vec = reshape(dct_img, [], 1);
```
接着,只保留64个DCT系数中的10个:
```matlab
sorted_dct = sort(abs(dct_vec), 'descend');
threshold = sorted_dct(10*64);
dct_vec(abs(dct_vec) < threshold) = 0;
```
最后,对每个图像块利用这10个系数进行逆DCT变换来重构图像:
```matlab
dct_img_compressed = reshape(dct_vec, 8, 8, []);
idct_img = blkproc(dct_img_compressed, [8 8], @idct2);
imshow(idct_img);
title('Compressed Image');
```
完整代码如下:
```matlab
img = imread('cameraman.tif');
imshow(img);
title('Original Image');
dct_img = blkproc(double(img), [8 8], @dct2);
dct_vec = reshape(dct_img, [], 1);
sorted_dct = sort(abs(dct_vec), 'descend');
threshold = sorted_dct(10*64);
dct_vec(abs(dct_vec) < threshold) = 0;
dct_img_compressed = reshape(dct_vec, 8, 8, []);
idct_img = blkproc(dct_img_compressed, [8 8], @idct2);
imshow(idct_img);
title('Compressed Image');
```
阅读全文