質問1:画像全体(「x.jpg」という名前)をランダムに選択し、グレースケール画像、逆コサイン変換回復マップ、DCT変換マップ、コサイン変換係数マップを表示するMatlabプログラムを作成し、元の画像と比較します。
clc
clear
close all;%清理Matlab窗口
A=imread('D:\x.jpg');%读取图像x.jpg(引号内是图像在计算机内的存储路径)
I=rgb2gray(A);%RGB图像转灰度图像
DCT=dct2(I);%DCT变换
DCT(abs(DCT)<10)=0;%将小于10的DCT余弦变换系数值置为0
reI=idct2(DCT);%逆DCT变换
subplot(2,2,1);%绘图
imshow(I,[0,255]);
title('灰度图像');
subplot(2,2,2);
imshow(reI,[0,255]);
title('IDCT灰度图像');
subplot(2,2,3);
imshow(DCT,[0,255]);
title('DCT变换图');
subplot(2,2,4);
imshow(log(abs(DCT)),[]);
title('余弦变换系数');
プログラミング結果は下図のようになります。プログラミング結果に応じて、DCT余弦変換係数の値を10未満から0に設定します(「DCT(abs(DCT)<10)= 0;」)。 IDCTグレースケール画像と元のグレースケール画像大きくないので、画像復元効果が優れています。
質問2:質問1に基づいて、変換行列係数を変更し、DCT処理の変化を観察します。
clc
clear
close all;%清理Matlab窗口
A=imread('D:\x.jpg');%读取图像x.jpg(引号内是图像在计算机内的存储路径)
I=rgb2gray(A);%RGB图像转灰度图像
DCT=dct2(I);%DCT变换
DCT500=dct2(I);%DCT变换
DCT(abs(DCT)<10)=0;%将小于10的DCT余弦变换系数值置为0
DCT500(abs(DCT500)<500)=0;%将小于500的DCT余弦变换系数值置为0
reI=idct2(DCT);%逆DCT变换
reI500=idct2(DCT500);%逆DCT变换
subplot(2,2,1);%绘图
imshow(I,[0,255]);
title('DCT<10 灰度图像');
subplot(2,2,2);
imshow(reI,[0,255]);
title('DCT<10 IDCT灰度图像');
subplot(2,2,3);
imshow(reI500,[0,255]);
title('DCT<500 IDCT灰度图像');
プログラミング結果を下図に示します。プログラミング結果の比較によると、500未満のDCTコサイン変換係数値を0( ")に設定した後、IDCTグレースケール画像が元の画像と比較されていることがはっきりとわかります。 DCT(abs(DCT)<500)= 0; ")グレースケール画像と比較すると、明らかな歪みが発生し、画像の復元効果が低くなります。