2、利用MATLAB编程,打开一幅lotus图像,对其进行DCT变换,并置其低频和高频区域内的系数为零,进行IDCT,显示其输出效果。
时间: 2024-01-08 13:02:29 浏览: 36
好的,以下是MATLAB代码实现:
```matlab
% 读入图像
I = imread('lotus.jpg');
% 转成灰度图像
I_gray = rgb2gray(I);
% 进行DCT变换
I_dct = dct2(I_gray);
% 置低频和高频区域内的系数为零
I_dct_low = I_dct;
I_dct_high = I_dct;
% 只保留低频系数
I_dct_low(31:end, :) = 0;
I_dct_low(:, 31:end) = 0;
% 只保留高频系数
I_dct_high(1:30, :) = 0;
I_dct_high(:, 1:30) = 0;
% 进行IDCT
I_idct_low = idct2(I_dct_low);
I_idct_high = idct2(I_dct_high);
% 显示输出效果
figure;
subplot(1,3,1);imshow(I_gray);title('原图');
subplot(1,3,2);imshow(I_idct_low, []);title('只保留低频系数');
subplot(1,3,3);imshow(I_idct_high, []);title('只保留高频系数');
```
运行以上代码后,会显示出三幅图像,分别为原图、只保留低频系数的图像和只保留高频系数的图像。
相关问题
用matlab,将一幅图片采用4*4和16*16 DCT变换矩阵,并通过DCT逆变换矩阵相关系数置零实现对图像的压缩。给出代码
以下是用MATLAB对一幅图像进行4x4和16x16 DCT压缩的示例代码:
```matlab
% 读取图像
img = imread('lena.png');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 显示原始图像
subplot(2,2,1);
imshow(gray_img);
title('Original Image');
% 使用4x4 DCT变换矩阵进行变换
dct4 = dctmtx(4);
dct_img4 = blkproc(gray_img, [4 4], @(block) dct2(block.data .* dct4));
% 对变换系数进行压缩
dct_img4(abs(dct_img4) < 20) = 0;
% 使用逆DCT变换矩阵进行逆变换
idct4 = idctmtx(4);
img_dct4 = blkproc(dct_img4, [4 4], @(block) idct2(block.data .* idct4));
% 显示4x4 DCT压缩后的图像
subplot(2,2,2);
imshow(uint8(img_dct4));
title('4x4 DCT Compressed Image');
% 使用16x16 DCT变换矩阵进行变换
dct16 = dctmtx(16);
dct_img16 = blkproc(gray_img, [16 16], @(block) dct2(block.data .* dct16));
% 对变换系数进行压缩
dct_img16(abs(dct_img16) < 20) = 0;
% 使用逆DCT变换矩阵进行逆变换
idct16 = idctmtx(16);
img_dct16 = blkproc(dct_img16, [16 16], @(block) idct2(block.data .* idct16));
% 显示16x16 DCT压缩后的图像
subplot(2,2,3);
imshow(uint8(img_dct16));
title('16x16 DCT Compressed Image');
% 计算压缩比
ori_size = numel(gray_img);
dct4_size = sum(abs(dct_img4(:)) >= 20);
dct16_size = sum(abs(dct_img16(:)) >= 20);
fprintf('Original Image Size: %d\n4x4 DCT Compressed Image Size: %d\n16x16 DCT Compressed Image Size: %d\n', ori_size, dct4_size, dct16_size);
fprintf('4x4 DCT Compressed Image Compression Ratio: %f\n', ori_size / dct4_size);
fprintf('16x16 DCT Compressed Image Compression Ratio: %f\n', ori_size / dct16_size);
```
在上面的代码中,我们首先读取一幅图像,并将其转换为灰度图像。然后,我们使用`dctmtx()`函数分别生成4x4和16x16 DCT变换矩阵,并使用`blkproc()`函数对灰度图像进行DCT变换。对于变换后的系数,我们将绝对值小于20的系数置零,从而达到压缩的目的。最后,我们使用逆DCT变换矩阵将压缩后的系数转换回图像,并计算压缩比。
用matlab,将一幅图片采用4×4和16×16 DCT变换矩阵,并通过DCT逆变换矩阵相关系数置零实现对图像的压缩,给出代码
以下是使用MATLAB实现4x4和16x16 DCT变换矩阵的图像压缩的代码示例:
```matlab
% 读取图像
img = imread('example.jpg');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 显示原始图像
subplot(1,3,1);
imshow(gray_img);
title('Original Image');
% 使用4x4 DCT变换矩阵进行变换
dct4 = dctmtx(4);
dct_img4 = blkproc(gray_img, [4 4], @(block) dct2(block.data .* dct4));
% 对变换系数进行压缩
dct_img4(abs(dct_img4) < 20) = 0;
% 使用逆DCT变换矩阵进行逆变换
idct4 = idctmtx(4);
img_dct4 = blkproc(dct_img4, [4 4], @(block) idct2(block.data .* idct4));
% 显示4x4 DCT压缩后的图像
subplot(1,3,2);
imshow(uint8(img_dct4));
title('4x4 DCT Compressed Image');
% 使用16x16 DCT变换矩阵进行变换
dct16 = dctmtx(16);
dct_img16 = blkproc(gray_img, [16 16], @(block) dct2(block.data .* dct16));
% 对变换系数进行压缩
dct_img16(abs(dct_img16) < 20) = 0;
% 使用逆DCT变换矩阵进行逆变换
idct16 = idctmtx(16);
img_dct16 = blkproc(dct_img16, [16 16], @(block) idct2(block.data .* idct16));
% 显示16x16 DCT压缩后的图像
subplot(1,3,3);
imshow(uint8(img_dct16));
title('16x16 DCT Compressed Image');
```
在上述代码中,我们首先读取了一张彩色图像,并将其转换为灰度图像。然后,我们使用`dctmtx()`函数获取4x4和16x16 DCT变换矩阵,并将灰度图像分块进行DCT变换。接着,我们将变换系数小于20的项置零,以实现压缩。最后,我们再次使用`idctmtx()`函数获取逆DCT变换矩阵,并将变换后的系数块进行逆变换。最终,我们得到了使用4x4和16x16 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)