MATLAB中的DCT实现

版权声明:此篇博文为博主心血o(╥﹏╥)o,如要转载请注明来源,勿忘心安! https://blog.csdn.net/dyq1995/article/details/86149368

下面来介绍一下DCT的基本原理和其在MATLAB中的实现方法,具体如下:

离散余弦变换(DCT )是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFT for Discrete Fourier Transform),但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的)。离散余弦变换的第二种类型,经常被信号处理和图像处理使用,用于对信号和图像(包括静止图像和运动图像)进行有损数据压缩。这是由于离散余弦变换具有很强的"能量集中"特性:大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分,而且当信号具有接近马尔科夫过程(Markov processes)的统计特性时,离散余弦变换的去相关性接近于K-L变换(Karhunen-Loève 变换--它具有最优的去相关性)的性能。

1、打开MATLAB,在其主界面的编辑器中写入下列代码:

clear                             %清除工作区间
RGB=imread('G:\MATLAB\bm.bmp');   %加载图片
GRAY=rgb2gray(RGB);               %彩色转灰度图
figure,imshow(GRAY);               %显示灰度图
D=dct2(GRAY);                     %进行dct变换
figure,imshow(log(abs(D)),[ ]);   %显示变换过程
colormap(gray(4));colorbar;
D(abs(D)<0.1)=0;
I=idct2(D)/255;                   %设置限值
figure,imshow(I)                %显示变换后的图

2、保存代码至自定义路径下,点击运行,结果如下:

 

 

可以看出,经过离散余弦变换后,相比于原图来说,有了一定程度上的滤波效果,也说明了DCT有一定的能量压缩特性,对于图片来说就是像素值的压缩,至此基本介绍完毕,请大家继续关注!!

猜你喜欢

转载自blog.csdn.net/dyq1995/article/details/86149368
DCT