(附Matlab程序)(一)基于DCT编码的图像压缩:显示灰度图像 反余弦变换恢复图 DCT变换图 余弦变换系数图

问题一:随机选取一整幅图像(命名“x.jpg”),编写Matlab程序显示灰度图像、反余弦变换恢复图、DCT变换图、余弦变换系数图,并与原始图像对比。

    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('余弦变换系数');

编程结果如下图,根据编程结果,将小于10的DCT余弦变换系数值置为0(“DCT(abs(DCT)<10)=0;”)后IDCT灰度图像与原始灰度图像相比差别不大,图像恢复效果较好。
在这里插入图片描述

问题二:在问题一的基础上,改变变换矩阵系数,观察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(“DCT(abs(DCT)<500)=0;”)后IDCT灰度图像与原始灰度图像相比发生了明显的失真,图像恢复效果较差。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Echoshit8/article/details/112535561