用VC++实现图像的离散余弦变换毕业设计(论文)_第1页
用VC++实现图像的离散余弦变换毕业设计(论文)_第2页
用VC++实现图像的离散余弦变换毕业设计(论文)_第3页
用VC++实现图像的离散余弦变换毕业设计(论文)_第4页
用VC++实现图像的离散余弦变换毕业设计(论文)_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、毕业设计(论文)题题 目目用用 vc+vc+实现图像的离散余弦变换实现图像的离散余弦变换 目录目录.i摘要 .iiiabstract.iv文献综述 .v前言 .vi1 引言 .11.1背景 .11.2意义 .11.3现状与发展 .22 系统总体设计 .42.1系统的开发环境 .42.2系统开发的内容 .52.3系统需要实现的功能 .62.4gdi 与 gdi+基本介绍 .62.5系统总流程图 .83 正交变换知识概述 .93.1图像处理中的正交变换 .93.2傅立叶变换的基本概念 .93.3离散余弦变换基本概念 .134 图像文件格式 .164.1图像的基本类型 .164.2位图的格式 .18

2、4.3位图数据的读取与显示 .195 图像离散余弦变换实现 .225.1aan 方法介绍 .225.2实现步骤 .235.3结果分析 .236 图像离散余弦 逆变换实现 .256.1正变换的相关参数存储 .256.2根据图像数据逆变换 .257 系统测试及效果 .277.1打开图片测试 .277.2分块 dct 变换测试 .277.3逆变换测试 .287.4系统性能分析 .288 全文总结 .29致谢 .30参考文献 .31摘要本文研究图像的 正交变换之一离散余弦变换, 使用 vc+编码具体实现 了aan 快速算法,大 大提高了处理速度 。本系统还实现了图 像文件的读、写及显示,先将 正变换后

3、的 位图图像 信息存储在文件中,然后从文件中读取位图数据,把这些数据经过离散余弦逆变换 ,最后再将变换后的数据以位图显示出来 。本文重点介绍了 离散余弦变换的原理及其实现的方法 。本文对离散余弦变换的基本原理、数学依据及程序的实现过程做了细致的研究,并对 dct 的变换图像和反变换的还原图像进行了测试。关关键键词词: 图像正交变换,离散余弦变换 (dct),aan快速算法abstractthis article works on discrete cosine transformation which is one of orthogonal transformation of image.

4、aan algorithm of dct programmed in visual c+ platform, experimental results show that it is effection.this system also fulfill the reading、writing and displaying operations of bitmap file. firstly, we save the positive transforming information of image file as text file. then, we read the image data

5、 from text file to do dct. at last, we display the transformed data in a way of bitmap format. this article emphasizes on the theory of discrete cosine transformation and the way how to achieve it.this article carefully researches on fundamental principle、mathematic basis and the arithmetic of discr

6、ete cosine transformation. besides, we test the images of positive and negative transformation.key words: orthogonal transformation of image, discrete cosine transformation (dct), aan speed method文献综述图图像像格格式式、图图像像正正交交变变换换相相关关文文献献概概述述图像是现代信息社会中最基本的信息。数字图像处理的研究对象是图像处理技术,这是计算机技术的重要分支和发展方向。文献1介绍了 visual

7、 c+的开发环境及静止、视频图像压缩编码中用道的主要编码算法,如:傅立叶变换、离散余弦变换、小波变换、熵编码、运动估计等,并对多个国际标准进行了深入的研究和分析,如jpeg、jpeg2000、h.261、h.263 和 h.26l 等,同时给出了其中主要算法的visual c+源程序。文献2对傅立叶变换的特性进行了分析,包括产生背景、数学理论、算法,并对傅立叶变换和快速傅立叶变换作了比较。文献3则介绍了图像变换在信息隐藏中的应用。文献4介绍了离散余弦变换编码的现状与发展趋势。文献67主要介绍数字图像处理的理论与方法, 介绍了各种数字图像处理的算法及编程实现技术。主要内容包括:位图基础、图像的显

8、示、图像的几何变换、图像灰度变换、图像的平滑处理、图像锐化处理及边缘检测等。在图像的变换域处理及应用中,对本文研究的图像正交变换做了详细的说明。文献8-9是有关离散余弦变换的编程的相关计算机实现。很有帮助。文献10-13对图像格式、图像读取显示的原理,算法给出了细致的说明。mfc 相相关关文文献献介介绍绍文献5围绕面向对象思想及其在 visual c+语言中的应用而展开,着重介绍 visual c+的语言基础,力求使读者在学习visual c+的过程中逐步掌握面向对象的思想和方法。文献14从剖析实例入手,详细介绍了使用visual c+进行可视化windows 应用程序开发所需的基本原理和概念

9、,并设计了丰富的范例和实验。前言本文提取出了用 visual c+实现图像离散余弦正交变换的实现过程,并结合有关基本概念对正交变换的特征进行了分析和研究,有助于图像变换、信息隐藏等方向的工作者对图像的研究。本文主要分为八章。第一章主要介绍了进行图像正交变换分析和研究的背景、意义及发展前景方向。第二章对整个正交变换系统做了简要介绍。第三章给出了正交变换数学原理公式及其分析方法。第四章介绍了图像的基本格式、读取方法,并对图像格式之一bmp 做了详细的说明。第五章给出了图像离散余弦变换的算法分析、程序实现方法及结果分析。第六章特别对离散余弦变换的逆过程做了研究。第七章对系统的结果做了测试。第八章全文

10、所使用的方法、结果以及目的和意义做了全面的总结,是全文的概括。本文的完成得到了戴祖旭博士的帮助和指导,在此向他表示衷心的感谢。王艾树2008-06-09 于武汉工程大学理学院1 引言1.1 背景1974 年由 ahmed 和 rao 提出的离散余弦变换,至今已有30 年历史。此间,dct 编码已发展成为 jpeg , mpeg , h.26x 等图像/视频编码标准中的核心。离散余弦变换( dct for discrete cosine transform)1是与傅立叶变换2相关的一种变换,它类似于离散傅立叶变换(dft for discrete fourier transform),但是只使用

11、实数。离散余弦变换相当于一个长度大概是它两倍的离散傅立叶变换,这个离散傅立叶变换是对一个实偶函数进行的(因为一个实偶函数的傅立叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位 (dct 有 8 种标准类型,其中 4 种是常见的 )。离散余弦变换 (dct)已经成为数字信号处理和图像处理的一种重要手段,但是其直接算法的计算量太大,速度太慢。在1988 年,y.arai , t.agui, and m.nakajima 提出的一种快速算法 aan 算法后,极大地提高了离散余弦变换的速度。正是 aan 算法的出现,才使离散余弦变换得以广泛应用。离散余弦变换是数字图像处理

12、研究中的常用变换,它将图像数据由时域变换为频率域, 然后再进行处理,在许多情况下能提高图像处理的速度。这是信息隐藏与数字水印研究工作的数学基础。用vc+开发图像的离散余弦正交变换程序,可以为进一步的信息隐藏3研究工作提供一个实验平台,为进一步开发信息隐藏工具软件提供必要的组件。1.2 意义此外,图像的正交变换被广泛地运用于图像特征提取、图像增强、图像复原、图像压缩和图像识别等领域。正交变换是信号分析学科中的一个重要部分,它是计算机图像处理的前续课程。多年来,变换理论在图像处理 (频域法处理)中起着关键作用。本文将介绍对图像使用正交变换的离散余弦变换的过程。 正交变换是数字图像信息处理中的重要技

13、术。目前,人们应用在图像信息隐藏、图像置乱中的技术主要基于时域(空间域),即根据图像像素点的坐标和颜色值的变化,达到隐藏或置乱的目的。这样的结果将使人们得到一幅杂乱无章的图像,使得破译者很容易发现这是经过加密的图像而去破译它。这使得正交变换尤为重要。图像变换在数字图像处理与分析中起着很重要的作用,是一种常用的、有效有分析手段。图像变换的目的在于:使图像处理问题简化;有利于图像特征提取;有助于从概念上加强对图像信息的理解。离散余弦变换,经常被信号处理和图像处理使用,用于对信号和图像(包括静止图像和运动图像)进行有损数据压缩。这是由于离散余弦变换具有很强的“能量集中 “特性:大多数的自然信号(包括

14、声音和图像)的能量都集中在离散余弦变换后的低频部分,而且当信号具有接近马尔科夫过程(markov processes)的统计特性时,离散余弦变换的去相关性接近于k-l 变换karhunen-love 变换-它具有最优的去相关性 )的性能。 傅立叶变换是数字图像处理技术的基础,其通过在时空域和频率域来回切换图像,对图像的信息特征进行分析和提取,简化了计算工作量,被喻为描述图像信息的第二种语言,广泛应用于图像变换,图像编码与压缩,图像分割,图像重建中 ,因此,深入研究和掌握傅立叶变换及其扩展形式的特性 ,是很有价值的 。而从傅立叶变换的性质可知,当一函数为偶函数时,其傅立叶变换的虚部为零,因而不需

15、计算,只计算余弦项变换,这就是余弦变换。因此余弦变换是傅立叶变换的特例,余弦变换是简化傅立叶变换的重要主法。近年来,余弦变换在压缩编码中得到广泛的应用。1.3 现状与发展在文献4中,离散余弦变换 (dct)用于图像编码是 1974 年由 ahmed 和rao 提出的。对于离散余弦变换,尽管shapiro 的 ezw 以及 said 等人的spiht 小波编码的成功应用,对传统的dct 编码提出了挑战,但 xiong 等人利川嵌入式 dct 块变换之间的直流相关性,以及对dct 后的系数进行策略性重组或层式 dct 同样具有小波多分辨率图像的分解特性。此外,基于层次嵌入式 dct、形状自适应 d

16、ct,截短 dct,感兴趣 ix:域支撑 dct 以及形态 dct 等改进形式的编码,都是将基于dct 变换编码推向更高层次。就dct 改进的变换,以及 dct 系数的应用,如利用 dct 系数实现信息隐藏等,也使得基于常规的 dct 变换编码有了更广阔的应 )用与发展空间,是未来的发展方向。它的应用也挺广范的,例如,在静止图像编码标准jpeg 中,在运动图像编码标准 mjpeg 和 mpeg 的各个标准中都使用了离散余弦变换。在这些标准制中都使用了二维的第二种类型离散余弦变换,并将结果进行量化之后进行熵编码。这时对应第二种类型离散余弦变换中的n 通常是 8,并用该公式对每个 8x8 块的每行

17、进行变换,然后每列进行变换。得到的是一个8x8 的变换系数矩阵。其中(0,0)位置的元素就是直流分量,矩阵中的其他元素根据其位置表示不同频率的交流分类。离散余弦变换也经常被用来使用谱方法来接偏微分方程,这时候离散余弦变换的不同的变量对应着数组两端不同的奇 /偶边界条件。离散余弦变换也经常被用来使用谱方法来接偏微分方程,这时候离散余弦变换的不同的变量对应着数组两端不同的奇 /偶边界条件。2 系统总体设计对图像的正交变换的研究是一个具有很大意义的研究课题,它在许多方面都有重要的应用。本文研究的离散余弦正交变换是其中的一个子部分,它们是最基本最重要的。本章对正交变换的介绍,不仅会让读者了解到图像变换

18、的基础知识,还会让读者明白研究图像变换的实际意义。2.1 系统的开发环境面向对象程序设计( objectoriented programming,oop)5方法已出现近30 年,在 20 世纪 90 年代已经成为程序设计的主流方向。面向对象程序设计语言是现代程序开发的工具,任何一个优秀的应用程序开发人员都必须至少熟悉一种面向对象的编程语言。采用 c+来进行图象编程的主要原因是,与java 和 c#等现代编程语言相比,c+在程序运行的效率、内存使用的可控性和编程的灵活性上具有优势。visual c+6.0 为用户提供了一套良好的可视化开发环境,主要包括文本编辑器、资源编辑器、工程创造工具和deb

19、ugger 调试器等。用户可以在集成环境中创建工程、打开工程,建立、打开和编辑文件,编译、链结、运行和调试应用程序。程序包含两类基本元素,即数据和操作数据的指令集(称为代码)。传统的程序设计语言以设计代码为核心,程序设计实际上是指定程序指令的先后顺序,数据表示必须适应代码的设计。模块化程序设计方法将完成某一功能的指令集组成一个相对独立的程序模块(即函数或过程),使得程序的结构清晰,便于有效的维护,对程序设计技术有很大的促进,随着程序规模的增大,各模块之间的相互影响导致一些难于测试,难以定位发现问题,增加程序开发和维护的困难。面向对象程序设计方法就是在这种背景下出现和发展起来的。面向对象程序设计

20、方法主要以数据为中心,代码是围绕着需要处理的数据而设计的。面向对象程序设计语言具有如下的特征:1.对象的类描述面向对象程序设计语言将程序描述的事情看成一个整体,称为对象,对象是包含数据和代码的完全独立的实体。同一类对象具有相同的性质和方法,每一个具体的对象都是类的一个实体,创建对象就是把类实例化。2.封装性封装性是 oop 的核心技术,是面向对象程序语言将数据和处理数据的方法组合在类中,并具有模块化和信息隐藏的特征。类是一个独立的模块,类的内部状态描述数据对程序的其他部分是不可见的,类只向外界公布其具有public属性的数据和代码,并构成类和外界的接口。外界不能直接对类进行修改,而只能通过这个

21、接口把信息传给类,并由类定义对内部数据进行修改,外界不能决定这种修改的结果,只能得到类进行操作所得出的反应。封装性能防止类与外界的非法交互和访问,避免外界对对象内部状态的错误修改,确保类这一模块的真正的独立性,以保证程序的安全运行。3.多态性不同的类或对象对外界传入的相同信息能够根据自身的性质作出不同的反应,这就是多态性。不同的类或对象可以通过设计自己专有的处理外界传入信息的方法来实现多态性。4.继承性继承性是指一个类可以派生出的新的类。新类可以继承原类的定义的性质和方法,还能在原类定义的性质和方法之外加入自身定义的性质和方法。通过继承性,能形成类之间的层次结构。2.2 系统开发的内容关于用

22、vc+方法,实现图像的正交变换,包括离散余弦正交变换及其逆变换。由于采用了 gdiplus 方法对图像进行读取 ,所以图像格式可为 jpg,bmp, gif,彩色和灰度图像均可 ,但是图像经读取之后,其数据全部转换成rgb 色,灰度图像的 r,g 和 b 数据相同。通过本程序可以进行图像的正逆变换,变换矩阵的大小可选择,但均为2 的 n 次方阶,在正变换同时保存图像频率域 ,及逆变换时所需的信息。逆变换也可以单独完成,即通过读文件得到相关参数,便可以直接进行图像逆变换,得到逆变换后的图像。得到的图像也可以和原来图像进行比较。2.3 系统需要实现的功能本文所介绍的图像正交变换实现以下过程 (图像

23、格式为 jpg,bmp, gif):a)图像文件读写操作实现 ;b)图像文件的显示实现 ; c)离散余弦变换 正逆变换;d)保存正变换过程得到频率域参数 (写入文本文件 );e)读文件,逆变换 (读取文本文件 )。2.4 gdi 与 gdi+基本介绍gdi 在 windows 中定义为 graphics device interface,即图形设备接口,是windows api(application programming interface)的一个重要组成部分。它是windows 图形显示程序与实际物理设备之间的桥梁,gdi 使得用户无需关心具体设备的细节,而只需在一个虚拟的环境(即逻辑设

24、备)中进行操作。它的桥梁作用体现在:(1)用户通过调用 gdi 函数将逻辑空间的操作转化为具体针对设备驱动程序的调用。 为实现图形设备无关性, windows 的绘图操作在一个设备描述表上进行。用户拥有自己的 “逻辑坐标 ”系统,它独立于实际的物理设备,与“设备坐标 ”相对应。开发 windows 应用程序时,程序员关心的是逻辑坐标,我们在逻辑坐标系上绘图,利用gdi 将逻辑窗口映射到物理设备上。 (2)gdi 能检测具体设备的能力,并依据具体的设备以最优方式驱动这些设备,完成真实的显示。 gdi 函数大致可分类为:设备上下文函数(如getdc、createdc、deletedc)、 画线函数

25、(如 lineto、polyline、arc)、填充画图函数(如 ellipse、fillrect、pie)、画图属性函数(如setbkcolor、setbkmode、settextcolor)、文本、字体函数(如textout、getfontdata)、位图函数(如 setpixel、bitblt、stretchblt)、坐标函数(如 dptolp、lptodp、screentoclient、clienttoscreen)、映射函数(如 setmapmode、setwindowextex、setviewportextex)、元文件函数(如playmetafile、setwinmetafile

26、bits)、区域函数(如fillrgn、framergn、invertrgn)、路径函数(如beginpath、endpath、strokeandfillpath)、裁剪函数(如selectcliprgn、selectclippath)等。gdi 虽然使程序员得到了一定程度的解脱,但是其编程方式仍很麻烦。譬如,显示一张位图,程序员需要进行 “装入位图 读取位图文件头信息 启用设备场景调色板变换 ”等一连串操作。而有了 gdi+,这些问题便迎刃而解了。 顾名思义, gdi+是 gdi 的增强版。它是微软在 windows 2000 以后操作系统中提供的新接口,其通过一套部署为托管代码的类来展现,

27、这套类被称为gdi+的“托管类接口 ”。gdi+主要提供了以下三类服务: (1)二维矢量图形: gdi+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类。(2)图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。因此, gdi+为我们提供了 bitmap、image 等类,它们可用于显示、操作和保存bmp、jpg、gif 等图像格式。 (3)文字显示: gdi+支持使用各种字体、字号和样式来显示文本。gdi接口是基于函数的,而 gdi+是基于 c+类的对象化的应用程序编程接口,因此使用起来比 gdi 要方便。 在本论文

28、的程序中,是在 gdi+平台上进行程序的编写。2.5 系统总流程图图像文件读取正变换图像显示频域信息保存原始图像显示dct 变换从文本读取信息idct 变换逆变换图像显示图 2-1 系统总流程图3 正交变换知识概述3.1 图像处理中的正交变换数字图象处理6的方法主要分为两大类:一类是空域的处理方法(或称空域法)。把图象变换到频道域可以从另外一个角度来分析图象的特性,其基本线性运算式是严格可逆的,并且每一个变换都存在自己的正交函数集,满足一定的正交条件,因此,也可以将其称作酉变换。正如表示空间的一个矢量可以用不同的坐标系一样,变换的途径虽然不同,但是它们都是空域图象的变换域表示式。目前,在图象处

29、理技术中,正交变换正被广泛的运用于图象的特征提取、图象增强、图象复原、图象识别以及图象的变换编码等领域中,下面将简要介绍傅立叶变换和离散余弦变换。3.2 傅立叶变换的基本概念傅立叶变换7是一种常见的正交变换,在数字图像处理中应用离散傅立叶变换的概念。它的数学定义如下:如果为一个 m*n 的数字图像,则其傅),(yxf立叶变换为: (3-1)1010)(2),(),(mxnynyvmxjeyxff (3-2)1010)(2),(1),(mnvnyvmxjevufmnyxf其中: 1, 2 , 1 , 0;1, 2 , 1 , 0nymx当图像为方阵时,即 m=n,则二维离散傅立叶变换公式为: (

30、3-3)1010)(2),(),(nxnynyxjeyxff (3-4)1010)(22),(1),(nnvnyxjevufnyxf为降低傅立叶变换的计算量,节省运算时间,在1965 年,cooley 和tukey 提出了一种快速傅立叶变换( fft)算法。 fft 算法采用蝶形运算方法,可以大大提高算法效率。例如, 8 点 fft 算法一共需要 12 次复数乘法运算和24 次复数加法运算,而 8 点 dft 的直接定义计算方法一共需要64 次复数乘法运算和 56 次复数加法运算。3.2.1 傅立叶变换的性质傅立叶变换具有很多方便运算处理的性质。下面列出二维傅立叶变换的一些重要性质。(1) 线

31、性傅立叶变换是一个线性变换 (3-5)fa f(x,y)bf(x,y)a ff(x,y)b ff(x,y)(2) 可分离性一个二维傅立叶变换可以用二次一维傅立叶变换来实现。推导如下:( , )( , )exp2 ()f uf x yjuxy dxdy ( , )exp(2)exp(2)f x yjuxjy dxdy ( , )exp(2)exp(2)f x yjux dxjy dy ( , )exp(2)f f x yjy dy (3-6) ( , )yxf ff x y(3) 平移性傅立叶变换具有平移的特性,推导如下: (3-7)(2exp),(),(0000yuxjufyyxxff (3-

32、8),()(2exp),(0000uufyxujyxff(4) 共轭性如果函数的傅立叶变换为,的傅立叶变换的共轭函),(yxf),(uf),(yxf数为:,那么:),(*uf (3-9),(fv)(u,*vuf(5) 尺度变换特性如果函数的傅立叶变换为,a,b 是两个标量,那么:),(yxf),(vuf (3-10),(),(vuafyxaff (3-11),(1),(bvaufabbyaxff(6) 旋转不变性如果空间域函数旋转角度为,则在变换域中该函数的傅立叶变换函数也0将旋转相同的角度。表达式如下: (3-12),(),(00kfrff该式是在极坐标下的傅立叶变换表达式。(7) 对称性函

33、数的傅立叶变换具有对称性,相应的表达式为: (3-13),(),(vufyxff(8) 相关定理如果和为两个二维时域函数,则可以定义相关运算o 如下:),(yxf),(yxg dadbbyaxgbafyxogyxf),(),(),(),(则: (3-14)* ( , )( , )( , )( , )f f x yg x yf u vg u v (3-15),(),(),(),(*vuogvufyxgyxff其中为函数的傅立叶变换,为函数的傅立叶变),(vuf),(yxf),(vug),(yxg换为的共轭,为的共轭。),(*yxg),(yxg),(*vug),(vug(9) 卷积定理如果和为两个

34、二维时域函数,那么可以定义卷积运算如下:),(yxf,g x y (3-16) dadbbyaxgbafyxgyxf),(),(),(*),(则: (3-17),(),(),(*),(vugvufyxgyxff (3-18),(*),(),(),(vugvufyxgyxff其中为函数的傅立叶变换,的傅立叶变换为。),(vuf),(yxf),(yxg),(vug3.2.2 快速傅立叶变换现在,离散傅立叶变换已成为数字信号处理的重要工具,但是它的计算量较大,运算时间长,在某种程度上限制了它的使用。为了解决这一矛盾,引用了快速傅立叶变换8的思想。快速傅立叶变换并不是一种新的变换方式,它是离散傅立叶变

35、换的一种算法,这种方法是建立在分析离散傅立叶变换中的多余运算的基础上,进而消除这些重复工作的思想指导下得到的,从而在运算中节省了大量的计算时间,达到快速运算的目的。快速傅立叶变换具有很高的计算效率也具有很强的适用性,这使得快速傅立叶变换在数字图象处理中具有更为广泛的应用。快速傅立叶变换的实现步骤为:(1) 开辟存储空间用以保存加权系数及中间变量;iw(2) 采用频率分解法进行蝶形运算;(3) 重新排列序列顺序;(4) 释放存储空间。3.3 离散余弦变换基本概念图象处理中常用的正交变换除了傅立叶变换以外,还有其他一些有用的正交变换,离散余弦就是其中的一种。离散余弦变换表示为dct。3.3.1 离

36、散余弦变换的定义一维序列离散余弦变换的定义 7可以由下式表示: 1100nnxff x (3-19) 12021cos2nnxxuf uf xn (3-20)其中: f u是第u个余弦变换系数,u是广义频率变量 ,1,2,.,1fn; f x是时域 n 点序列,0,1,2,.,1xn。一维离散余弦反变换idct由下式表示: 1121210cos2nnnuxuf xff un (3-21)把上述的一维 dct 推广到二维离散变换,表达式如下: 11002121,coscos22nnxyxuyvf u va u a vf x ynn (3-22)逆变换可以表示为: 11002121,coscos2

37、2nnuvxuyvf x ya u a v f u vnn (3-23)其中:空域和变换域元素矩阵维数为n;是像素空间的坐标,,0,1,2,.,1x yn;yx,是 dct 空间的坐标,;vu,7 ,1 , 0,vu是二维空间域的元素;,f x y,f u v为经过二维离散余弦变换后的变换域元素;式中系数为 120,11aa xxnnn3.3.2 离散余弦变换的计算与傅立叶变换一样,离散余弦变换自然可以从定义出发进行计算。但是在实际中为了减少计算量,使得计算更加方便,需要寻找一种快速算法9。 以一维离散余弦变换为例,对快速算法进行推导。对于 f u,可以写成以下的形式: 10(21)120(2

38、1)120212cos22re2renxxunjnxxunjnxxuf uf xnnf xenf x en (3-24)其中re代表取实部。对于时域数据进行如下的延拓: 0,1,2,.,10,1,.,21ef xxnfxn nn (3-25)则 efx的离散余弦变换可以写成: 210210(21)2120221220102(21)cos22re2renexnexxupnjnexuxunjjnnexffxnxuf ufxnnfx enefx en (3-26)由式 3-26 可得 22120 xunjnexfx e是2n点的离散傅立叶变换。所以在做离散余弦变换的时候,可以把序列的长度延长为2n,

39、然后做离散傅立叶变换,产生的结果取实部就可以得到结果。同理,在做反变换时,首先在变换空间把 f u做如下的延拓: 0,1,2,.,10,1,.,21ef uunf uun nn (3-27)这样,反变换可以表示 : 211212121221221221221221120cos2120re120re120re1220reneeuxunjneeuxuunjjnneeuxuunjjnneeuujneexuf xff unnnff uennff ueennff u eennff u ennn22120 xunjnue (3-28)由式 3-28 可知,离散余弦反变换快速算法可以由 2ujnef u e

40、的2n点反傅立叶变换快速算法实现。4 图像文件格式4.1 图像的基本类型除了语音之外,图像是人类获取信息的另外一个重要来源,大约70%的信息是通过人眼获得的图像信息。图像信号是指将图像作为一种二维信号,采用数字信号处理的方法来对图像进行描述。今后为了表示方便,图像信号就称为图像。在近代科学研究、军事技术、工农业生产、气象、医学等领域中,人们越来越多地利用图像来认识和判断事物,解决实际问题。例如:人们利用人造卫星所拍摄的地面照片,来分析获取地球资源、全球气象和污染情况,利用“和平号”宇宙飞船所拍摄的月球表面照片,分析月球的形成。在医学上,通过ct 断层扫描,医生可以观察和诊断人体内部是否有病变组

41、织。在公安侦破中,采用指纹提取并处理进行破案。在军事上,目标的自动识别和自动跟踪都需要进行图像处理10。下面的介绍本文用到的图像的基本类别:(1)索引图象索引图像包括一个数据矩阵 x 和一个色图矩阵 map。其中, x 可以是无符号 8 位整型、无符号 16 位整型或者双精浮点型数据; map 是一个包含三列、若干行的数据阵列,其每一个元素的值均为0,1之间的双精度浮点型数据。 map 矩阵的每一行分别表示红色、绿色和蓝色的颜色值。索引图象是从像素值按照一定的规律到颜色映射值的一种图象。(2)灰度图象灰度图(graysacle)是指只含亮度信息,不含色彩信息的图像。因此,要表示灰度图,就要把亮

42、度值进行量化,通常是划分成0 一 255 共 256 个级别, 0 表示最暗, 255 表示最亮。在 bmp 格式的图像中,可以使用 256 级的调色板来表示灰度图。这个调色板的每一项的rgb 值都是相同的,也就是说从 (0, 0, 0),(1, 1, 1)一直到(255,255, 255)。在图像中实际存储的是调色板索引值,也就是该像素值在调色板中位于第几行。一幅灰度图像是一个数据矩阵i,而矩 i 中的数据均代表了在一定范围内的颜色灰度值。计算机一般把灰度图像存储为单一的数据矩阵,数据矩阵中的每个元素分别代表了图像中的像素。矩阵中的元素可以是双精度的浮点类型、8 位或 16 位无符号的整数类

43、型。(3)rgb 图rgb 图像,即真彩图像,在计算机中存储为数据矩阵。数组中的元素定义了图像中每一个像素的红、绿、蓝颜色值。它的每一个像素都要用3 个字节分别表示 rgb 值。需要指出的是, rgb 图像不使用 windows 色图。像素的颜色由保存在像素位置上的红、绿、蓝的灰度值的组合来确定。图形文件格式 rgb 图像存储为 24 位的图像,红、绿、蓝分别占 8 位,这样可以有 1000 多万种颜色(即 224=16 777 213)。 计算机中的 rgb 数组可以是双精度的浮点类型、 8 位或 16 位无符号的整数类型。在 rgb 的双精度型数组中,每一种颜色用在 0 和 1 之间的数值

44、表示。由于位真彩色图像所需的存储空间很大,处理速度较慢,当需要存储空间不大,并且要求实时快速处理图像时,一般都要利用相应的位位图对其进行近似处理,因此位位图是图像技术中涉及范围比较广泛的一种图像表示方法。图形图象处理10是计算机领域中的一个重要课题,在人们的日常生活中应用也非常的广泛。而图像格式则是图像处理技术中的基础部分。只有深入了解了图像格式,才能实现各种格式的转换,进行图像的变换处理等。目前流行的图像格式种类繁多,如 bmp、tiff,png,gif,jpeg,swf,svg 等,此外还有一些非主流的图像格式如 dxf ,wmf,lic,tga 等,这些图像格式都有其各自的优缺点,适用于

45、不同的场合。本文分析了两种具有代表性的图像文件格式并给出了vc+的读取显示实现方法。图像文件一般由文件头和图像点阵数据两部分构成,文件头中一般包含文件标志,图像尺寸,颜色数等信息,这些信息由图像提供者定义;图像点阵数据包含该图像的每一点的颜色信息。对于各种不同的图象文件格式,其文件头所包含的信息不尽相同,其中重要的是含有该文件所存储的图像信息的存储格式说明,对于图像处理程序来说,首先就是读取要处理的图象文件文件头信息,获得所有必需的信息,再据此读取图象点阵数据进行相应处理并正确显示。4.2 位图的格式bmp11是 microsoft windows 操作系统所支持的主要图象文件格式之一,其格式

46、简单,适应性强,但这种文件格式是非压缩的,故此文件所占的磁盘空间较大。在 mfc 中也对 bmp 文件格式提供了很好的支持。bmp 位图文件的结构如下图所示 ,包括位图文件头结构bitmapfileheader、位图信息头结构 bitmapinfoheader、位图颜色表rgbquad 和位图象素数据四个部分。位图文件头结构 bitmapfileheader位图信息头结构 bitmapinfoheader位图颜色表格 rgbquad(调色板 palette)位图像素数据图 4-1 bmp 位图文件的结构附:真彩色图不需要调色板。再此列出与宽度相关的部分,这些与宽度相关的成员变量在位图信息头结构

47、bitmapinfoheader 中,其原型为:typedef struct tagbitmapinfoheader dword bisize; 说明 bitmapinfoheader 结构所需的字节数long biwidth; 说明位图的宽度,以像素为单位long bihight; 说明位图的高度,以像素为单位word biplanes; 说明目标设备的位平面数,必须为1word bibitcount; 说明每一个像素的位数,必须为1,4,8,24word bicompression; 说明一个压缩位图的压缩类型,有以下几种类型:bi-rgb,bi-rle8,bi-rle4word bisi

48、zeimage; 说明位图的大小,以字节为单位,如果位图为bi-rgb 格式,那么该成员置为 0 才有效long bixpelspermeter;说明位图的目标设备的水平分辨率long biypelspermeter; 说明位图的目标设备的垂直分辨率dword biclrused; 说明实际使用的颜色表中的颜色变址数dword biclrimportant; 重要颜色的索引数4.3 位图数据的读取与显示在文献12中的相关术语:在图像处理中,可能会经常遇到一些专业词汇。为了方便交流,先来了解一下术语。1.像素:数字化图像是对物理图像进行采样,把物理图像划分为若干个采样方格,这些小的采样方格就是像

49、素。我们通常所说的屏幕分辨率为,也就是说屏幕上每行有 1024 个像素,共有 768 行。2. rgb 色彩系统 : 自然界中的所有颜色都可以由红绿蓝 (red, green, blue) 3 原色组成。以 r 分量为例,可以人为地把它分成0 到 255 共 256 个等级。其中,0 表示不含有红色分量,而 255 表示含有 100%的红色分量。对于 g 分量和 b 分量,可以按照同样的方式进行划分。这样,根据r, g, b 分量不同的组合,就可以表示出 256 x 256 x 256(约 1600 万)种颜色。3.调色板:一个字节 (byte)有 8 位(bit ),可以表示 2 的 8 次

50、方共 256 个数。那么,如果每一个像素都要用rgb 分量来表示,则每一个像素需要3 个字节。这将会使图像文件变得非常大。由于rgb 分量可以表示 1600 万种颜色,而实际中的图像并非都用到这么多的颜色,比如二值图像、16 色图像和 256 色图像等。这时,可以使用一种叫做颜色表的方法来达到压缩数据量的目的。以一幅大小为 256 x 256 的 256 色图像为例。如果按照 rgb 分量各用一个字节的方式来存储,那么该图像需要占据256 x 256 x 3 个字节的空 1j。但是该图像只有256 色,我们可以建立一张 rg 尽的颜色表,表中的每一行对应图像中的一种颜色,如图 4-1 所示。图

51、 1 调色板示意图本文使用 bmp 格式的位图图像文件作为输入图像数据,主要用到三个函数 onfileopen、openbmp、ondraw。程序的第一部分,首先通过 vc+ mfc 向导建立一个单文档的工程。向文档类中添加成员函数和成员变量。定义编写成员函数 (bmp 文件打开函数openbmp),使用的是 cfile 类的 cfile()函数。重新定义文件下拉菜单中的打开项,使它与 bmp 文件打开函数对应上。再次修改 ondraw 函数,实现打开后的 bmp 图像文件的显示功能,在这里通过 setpixel 函数把读到内存中的图像数据显示在屏幕上,由于 bmp 图像数据是从下向上排列的,

52、所以显示要从最低行开始的。i.i. 图像的读取图像的读取1313在位图的处理中,需要读取位图的长度、宽度及象素的信息。在visual c+6.0的所有类库中没有对这种位图的读取函数。本文针对该问题设计了读取位图的函数openbmp(),该函数可根据读者的需要加入任何类中。在类的头文件中,需要声明在整个类中用到的变量及数组。bitmap * pbmp;/存放 bmp 像素信息的动态数组unsigned char * m_pimagedata /显示 bmp 的动态数组long m_width,m_height /图象 bmp 的宽度、高度ii. 图图像像的的显显示示win32 sdk和mfc封装

53、的函数还不能满足对于图像显示的需要。因此,需要自己编写一些图像显示用到的函数,正所谓“自己动手,丰衣足食 ”。视图类的 ondraw函数:ondraw函数是负责显示的,一般的绘图过程都放在ondraw函数中,工程创建时会自动生成该函数。要修改视图类的 ondraw函数来显示图像,来实现图像的显示。5 图像离散余弦变换 实现问题的提出:fourier 变换的一个最大的问题是:它的参数都是复数,在数据的描述上相当于实数的两倍。为此,我们希望有一种能够达到相同功能但数据量又不大的变换。在此期望下,产生了 dct 变换。5.1 aan 方法介绍aan7算法是 y.arai , t.agui, and

54、m.nakajima 于 1988 年提出的一种快速算法,它也是将二维 dct 分解成行列的一维变换,一维n 点的 dct 变换通过 2n 点离散傅立叶变换( dft)来实现,而 2n 点 dft 又可以通过快速傅立叶变换( fft)实现。一维 8 点的算法流程图见图 3-3 所示。s0s4s2s6s5s1s7s3a1a2a3a4a5x0x1x2x3x4x5x6x7y0y4y2y6y5y1y7y3图 6-1 一维 8 点 aan 算法流程图从一维 aan 变换的算法流程图可以看出,其一维8 点变换只需 11 次乘法和 29 次加法,如果将最后的尺度变换采用此法要16*5=80 次乘法和16*2

55、9=464 次加法。5.2 实现步骤1 1. .一一维维离离散散余余弦弦变变换换 实实现现步步骤骤(1)计算离散余弦变换点数;(2)对时域空间进行延拓;(3)将时域点写入已开辟存储空间;(4)调用一维快速傅立叶变换;(5)调整系数;(6)转换变换结果,将变换结果转存回时域存储区。2 2. . 二二维维离离散散余余弦弦变变换换 实实现现步步骤骤(1)获取变换图像指针,并在 gdiplus平台下将其数据转换为 rgb进行存储;(2)选择进行离散余弦变换的宽度和高度,这两个值必须是2的整数次方;计算变换时所用的迭代次数,包括水平方向的和垂直方向;(3)依行列顺序依次读取数据区的值,存储到开辟的复数存

56、储区;(4)调用一维离散余弦变换函数进行垂直方向的变换;(5)调用一维离散余弦变换函数进行水平方向的变换;(6)将计算结果转换成可显示图像;(7)将rgb频谱和图像高度 ,宽度和变换矩阵大小存入文本文件。3 3. .分分块块离离散散余余弦弦变变换换由于本文采用的是分块思想,涉及到对图像的分块过程。本程序可进行dct 变换的矩阵维数不能超过图像高和宽的最小值,即可选择矩阵大小。5.3 结果分析本实验可进行 2*2,4*4,8*8 等分块的离散余弦变换,能分别进行变换,且保存各频谱在不同文件中。根据已知的图像离散余弦变换特性可知每一块图像变换后为除左上角的一个亮点外,其余较模糊。aan 方法的提出

57、大大的提高了运算的效率。通过对每一块图像进行快速fft 变换的调用,来实现了快速的算法。6 图像离散余弦逆变换实现6.1 正变换的相关参数存储本系统的特点是 实现了先 将正变换后的 图像和频谱信息 存储在文件中 ,然后从文件中读取 信息,把这些数据经过 idct 变换,然后再将变换后的数据以图像显示出来 。这就要求对图像正交变换 fft 和 dct 变换后的 图像数据进行存储。由于变换矩阵的维数可选,所以为还原图像需对其进行保存,还需要存储相关参数u、v,如图 7-1 所示:图 7-1 图像正交变换需要说明的是:由于在 gdiplus 平台下开发,所以不论是 8 位的灰度或者是 24 位的真彩

58、图,都会以 r,g 和 b 三种颜色进行存储,只是对于8 位的灰度图像,其r,g 和 b 均一样。在还原图像时,根据其 r、g、b 值分别进行正变换,然后分别存储其参数r(u,v)、g(u,v)、b(u,v)。6.2 根据图像数据逆变换从文件中 读取位图数据 ,调用图像逆变换程序,恢复图像。具体如下:由于离散余弦变换 (discrete cosine transform)8不同于傅立叶变换,它是以实数为对象的余弦函数,而傅立叶计算的对象是复数;虽然此类变换没有傅立叶变换的功能强大,离散余弦变换的计算速度要比对象为复数的离散傅立叶变换快得多。在参数存储时离散余弦变换更加方便。从文件xxx_8_r

59、edfre.txt,xxx_8_grefre.txt,xxx_8_blufre.txt 和 xxx_8_rgblea.txt 中依次得到 f(u,v)的 r(u,v)、g(u,v)、b(u,v)和未进行变换的图像数据。从文件名即可知,xxx 为图像名称, 8 是变换矩阵的维数, redfre,grefre 和 blufre 分别为红,绿和篮的频谱信息。 rgblea 存储的为图像高度,宽度,变换矩阵大小和未进行变换的图像数据。这样设计是方便文件的读取。 7 系统测试及效果7.1 打开图片测试灰度图片 彩色图片 (a)高度宽度为 2n的灰度图( bmp,256*256) (b) 高度宽度不为 2

60、n的真彩图(jpg,283*212)图 8-1 原始图片7.2 分块 dct 变换测试图 8-2 是 256*256 的 lena 图像的分块 8*8 的离散余弦变换效果。 (a)高度宽度为 2n的原图( bmp,256*256)(b)二维离散余弦变换效果图图 8-2 二维离散余弦变换效果图图 8-3 是 283*212 的真彩(样品)图像的分块 8*8 的离散余弦变换效果。 (a) 高度宽度不为 2n的真彩图( jpg,283*212) (b)二维离散余弦变换效果图图 8-3 二维离散余弦变换效果图7.3 逆变换测试读文件中图像文件数据逆变换,显示图片同上。可以通过修改位图数据来观察检验,修

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论