MATLAB分析图像的离散余弦变换(DCT)

原创 2016年08月20日 10:37:33

1. MATLAB的介绍以及所需函数的说明:

 1.1 MATLAB 

MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks

公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 

3.2 使用的MATLAB函数介绍 

函数 描述
Imread() 用于读取图片文件中的数据
figure() 控制画图的窗口
imshow() 显示图像
rgb2gray() 把真彩图像转变为灰度图像
dct2() DCT变换

Colormap()       
可以拖动上面的颜色块控制调改变位图颜色(双击)。一般是函数Image()画出的连续的灰度图使用。
Colorbar:colormap实际上是一个mx3的矩阵,每一行的3个值都为0-1之间数,分别代表颜色组成的rgb值 
idct2() DCT逆变换
Subplot()                  
将当前窗口分割成多个子窗口,第一个参数表示分割窗口的行数,第二参数表示 分割后窗口的列数,第三个参数表示第几个子窗口

2.MATLAB程序以及结果分析 

2.1 MATLAB程序

2.1.1  打开图片:

    %读入测试图像 
    mypicture=imread('d:\lena.tif');
    %显示读入的图像 %为了防止后一个显示的图像覆盖前一个显示结果,每次显示时调用figure生成一个新窗口 	
    figure(),imshow(mypicture),title('原输入图像');


2.1.2 转为灰度图:

    grayImage=rgb2gray(mypicture);%如果读入的是彩色图像则转化为灰度图像(灰度图像省略这一步) 
    figure(),imshow(grayImage),title('原输入彩色图像转化为灰度图像'); 

图1

2.1.3对图像DCT转换:

    %对图像DCT变换  
    dctgrayImage=dct2(grayImage);
    figure(), imshow(log(abs(dctgrayImage)),[]),title('DCT变换灰度图像'), colormap(gray(4)), colorbar;

图2

2.1.4 对灰度矩阵进行量化:

    %对灰度矩阵进行量化
    dctgrayImage(abs(dctgrayImage)<0.1)=0; 


2.1.5 DCT逆变换:

    %DCT逆变换  
    I=idct2(dctgrayImage)/255;  
    figure(), imshow(I), title('经过DCT变换,然后逆变换的灰度图像'); 

图3

2.1.6 对比变换傅里叶变换前后的图像 :

	%对比变换傅里叶变换前后的图像  
	figure(), subplot(121), imshow(grayImage), title('原灰度图像'), 
 subplot(122), imshow(I), title('DCT逆变换图像');

图4

2.2 结果分析:

结果分析:对原始图像进行离散余弦变换,如图3所示,由结果可知,变换后DCT系数能量主要集中在左上角,其余大部分系数接近于零,这说明DCT具有适用于图像压缩的特性。将变换后的DCT系数进行门限操作,将小于一定值得系数归零,这就是图像压缩中的量化过程,然后进行逆DCT运算,得到压缩后的图像,如图4。由图5比较变换前后的图像,肉眼很难分辨出有什么区别,可见压缩的效果比较理想。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Matlab DCT详解

DCT变换DCT又称离散余弦变换,是一种块变换方式,只使用余弦函数来表达信号,与傅里叶变换紧密相关。常用于图像数据的压缩,通过将图像分成大小相等(一般为8*8)的块,利用DCT对其进行变换,得到更加简...
  • ahafg
  • ahafg
  • 2015年09月29日 16:43
  • 11704

DCT变换及matlab实现

1.一维DCT变换 一维的DCT变换共有8种,其中最实用的是第二种形式,公式如下: 其中c(u)是加上去一个系数,为了能使DCT变换矩阵成为正交矩阵,在后面二维变换将看到他的作用。N是f(x...
  • Whose_Utopia
  • Whose_Utopia
  • 2014年02月20日 20:33
  • 5340

matlab实现图像DCT变换

实验三 图像的DCT变化及量化 一、问题描述 利用matlab,将road.tif彩色图像的分辨率转换为256*256,将图片转化为double数据类型,再利用T=dctmtx(8)建立一个8*8...
  • RachelKong
  • RachelKong
  • 2017年01月12日 13:08
  • 3234

二维图像的DCT变换

二维DCT变换就是将二维图像从空间域转换到频率域。形象的说,就是计算出图像由哪些二维余弦波构成,计算出的结果为c(u ,v), 其中u为二维波的水平方向频率,v为二维波的垂直方向频率; 最终会计算出很...
  • ws_20100
  • ws_20100
  • 2015年10月13日 18:37
  • 7591

基于DCT变换的JPEG图像压缩原理

众所周知,当今人类社会具有三大支柱,即物质、能量、信息。当下已由物质过渡到信息,从农业现代化到工业现代化,再到当今的信息化时代。信息具有通用性、抽象性、无限性。其通用性表现在信息的无所不在和无时不在特...
  • lxj_bsplee
  • lxj_bsplee
  • 2016年11月18日 14:39
  • 5955

DCT变换的基函数与基图像

利用MATLAB产生DCT基图像,使用了矩阵相乘的方法,没有通过for循环实现。
  • dugudaibo
  • dugudaibo
  • 2017年12月03日 19:45
  • 377

DCT变换

      DCT变换的基本思路是将图像分解为8×8的子块或16×16的子块,并对每一个子块进行单独的DCT变换,然后对变换结果进行量化、编码。随着子块尺寸的增加,算法的复杂度急剧上升,因此,实用中通...
  • timebomb
  • timebomb
  • 2010年10月23日 13:06
  • 34193

图像去噪 使用dct变换进行去噪

因为噪声往往是高频部分,可以将图像转换到频域,进行高频处理: 把高频部分虑掉. %读取图像 X=imread('wangshi.jpg'); X=rgb2gray(X); %读取图像尺寸 [m,...
  • qq_18343569
  • qq_18343569
  • 2015年07月27日 15:02
  • 996

JPEG压缩原理与DCT离散余弦变换

入门介绍----JPEG压缩原理与DCT离散余弦变换,能让你有个大致的理解。
  • newchenxf
  • newchenxf
  • 2016年06月20日 15:58
  • 13461

matlab实现离散余弦变换(DCT)

一般如果处理的是图像的话,就需要下列二维离散余弦变换 矩阵形式: 其中变换矩阵由下式给出...
  • u010545732
  • u010545732
  • 2014年02月10日 19:20
  • 2405
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MATLAB分析图像的离散余弦变换(DCT)
举报原因:
原因补充:

(最多只允许输入30个字)