二维dct变换matlab代码
时间: 2023-07-29 08:08:16 浏览: 114
以下是二维DCT变换的MATLAB代码:
```matlab
function Y = dct2d(X)
% 二维 DCT 变换
% 输入:X 为需要变换的图像矩阵
% 输出:Y 为变换后的图像矩阵
[m, n] = size(X);
Y = zeros(m, n);
for i = 0:m-1
for j = 0:n-1
if i == 0
c_i = sqrt(1/m);
else
c_i = sqrt(2/m);
end
if j == 0
c_j = sqrt(1/n);
else
c_j = sqrt(2/n);
end
Y(i+1, j+1) = c_i * c_j * sum(sum(X .* cos(pi*(2*(0:m-1)+1)*i/(2*m)).' .* cos(pi*(2*(0:n-1)+1)*j/(2*n))));
end
end
```
注意,此代码只适用于输入为灰度图像的情况。如果需要处理彩色图像,则需要先将其转换为灰度图像。
相关问题
二维dct压缩matlab代码
二维DCT压缩是一种将图像数据压缩的方法,通过对图像进行离散余弦变换(DCT),可以将冗余信息减少,达到压缩的目的。在Matlab中,可以使用dct2函数实现二维DCT压缩。下面是一份示例代码:
```matlab
%% 读入图像
img = imread('lena.png');
imwrite(img, 'original.png');
%% 转为灰度图像
img_gray = rgb2gray(img);
%% 对图像进行二维DCT变换
img_dct = dct2(img_gray);
%% 提取低频系数
n = 32; % 设置低频系数个数
img_dct_compress = img_dct;
img_dct_compress(n+1:end, :) = 0;
img_dct_compress(:, n+1:end) = 0;
%% 对图像进行逆DCT变换
img_dct_recover = idct2(img_dct_compress);
%% 显示原图和压缩后图像
figure;
subplot(1,2,1);
imshow(img_gray);
title('Original Image');
subplot(1,2,2);
imshow(uint8(img_dct_recover));
title(['Compressed Image ', num2str(n), ' Coefficients']);
%% 保存压缩后图像
imwrite(uint8(img_dct_recover), ['compress_', num2str(n), '_coefficients.png']);
```
首先,代码读入了一个彩色图像,并将其转为灰度图像。然后,通过dct2函数对灰度图像进行二维DCT变换,得到一个系数矩阵。接着,代码提取系数矩阵中的低频系数,抹去高频系数,并对压缩后的系数矩阵进行逆DCT变换,得到压缩后的图像。最后,通过imshow函数展示原图和压缩后图像,并将压缩后的图像保存至本地文件。在代码中,变量n可控制一共提取多少低频系数,n越大,压缩后的图像质量越高,但压缩比也会越低。
阅读全文