(Matlabプログラム添付)(1)DCTコーディングに基づく画像圧縮:グレースケール画像の表示逆コサイン変換回復マップDCT変換マップコサイン変換係数マップ

質問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;%将小于10DCT余弦变换系数值置为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;%将小于10DCT余弦变换系数值置为0
	DCT500(abs(DCT500)<500)=0;%将小于500DCT余弦变换系数值置为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; ")グレースケール画像と比較すると、明らかな歪みが発生し、画像の復元効果が低くなります。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/Echoshit8/article/details/112535561