实验截图:
自带函数实现的离散余弦变换:利用公式求出的DCT和IDCT
实验代码:
代码(1):
img=imread('erciyuan.jpg');img=rgb2gray(img);figure(1)%显示原图像subplot(1,3,1);imshow(img);title('原图')%计算二维dct变换img_cos=dct2(img)subplot(1,3,2);imshow(log(abs(img_cos)));title('DCT离散余弦变换')%把变换后的矩阵中小于10的值置换为0,再用idc2重构图像img_cos(abs(img_cos)<10)=0;img_acos=idct2(img_cos)/255subplot(1,3,3),imshow(img_acos);title('IDCT反离散余弦变换(恢复原样)')
代码(2):
img = imread('erciyuan.jpg');img = rgb2gray(img);[m,n] = size(img);M = zeros(m,m);N = zeros(n,n);for i = 0 : m - 1for j = 0 : m - 1if i == 0 M(i + 1,j + 1) = sqrt(1 / m) * cos(((2 * j + 1) * i * pi) / (2 * m)); elseM(i + 1,j + 1) = sqrt(2 / m) * cos(((2 * j + 1) * i * pi) / (2 * m));end endendfor i = 0 : n - 1 for j = 0 : n - 1 if i == 0 N(i + 1,j + 1) = sqrt(1 / n) * cos(((2 * j + 1) * i * pi) / (2 * n)); elseN(i + 1,j + 1) = sqrt(2 / n) * cos(((2 * j + 1) * i * pi) / (2 * n));endendendDCT = M * double(img) * N';IDCT = M' * DCT * N;subplot(1,3,1);imshow(img);title('原图');subplot(1,3,2);imshow(DCT);title('DCT');subplot(1,3,3);imshow(uint8(IDCT));title('IDCT');