




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
贵州师范大学机电学院毕业设计——数字图像的几何变换--PAGE28-数字图像的缩放和旋转潘春锋摘要数字的缩放和旋转是一种较为常见的图像处理手段,其通过对变形的图像进行几何校正而可得出准确的图像。目前数字图像处理的应用越来越广泛,已经渗透到工业、航空航天、军事等各个领域,在国民经济中发挥着越来越大的作用。BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式。作为数字图像处理的一个重要部分,本论文介绍的工作是如何用VisualC++编程工具设计一个完整的应用程序,实现经典的图像几何变换功能。程序大概分为两大部分:读写BMP图像,和数字图像的几何变换,即首先用VisualC++创建一个多文档应用程序框架,在实现任意BMP图像的读写,打印,以及剪贴板操作的基础上,完成经典的图像几何变换功能。关键字:图像处理;图像缩放;图像旋转;BMP图像;VisualC++AbstractDigitalzoomandrotationisacommonimageprocessingmethod,thegeometriccorrectionandcanbeanaccuratepictureofthedeformationoftheimage.Applicationofthedigitalimageprocessingismoreandmorewidely,haspenetratedintoeveryfieldofindustrial,aerospace,military,playsamoreandmoreimportantroleinthenationaleconomy.TheBMPfileisrecommendedandsupportedbytheWindowsoperatingsystemimagefileformat,isakindofimagedatamemoryordisplaynotcompressedanddirectlypressadiskfileformat.Asanimportantpartofdigitalimageprocessing,thispaperintroducestheworkishowtouseVisualC++programmingtooltodesignacompleteapplicationprocedures,toachievetheclassicimagegeometrytransformfunction.Theprogramcanbedividedintotwoparts:thereadandwriteBMPimage,anddigitalimagesofgeometrictransformation,thatisfirstusedVisualC++tocreateamultipledocumentinterfaceframework,write,printinanyBMPimagereading,aswellasthebasisoftheclipboardoperation,completetheimagegeometrytransformfunctionclassic.Keywords:imageprocessing;imagescaling;imagerotation;BMPimage;VisualC++目录第1章引言 31.1数字图像处理 31.1.1图像的概念 31.1.2图像处理 31.2数字图像处理的特点及其应用 31.2.1数字图像处理的特点 41.2.2数字图像处理的应用 41.3VisualC++ 51.3.1VisualC++简述 51.3.2将VisualC++应用于数字图像的几何变换 6第2章数字图像处理的基本概念 72.1图像和调色板 72.1.1图像的显示 72.1.2调色板 72.1.3色彩系统 82.1.4灰度图 92.2GDI位图 102.2.1从资源中装入GDI位图 102.2.2伸缩位图 102.3设备无关位图(DIB) 112.3.1BMP文件中DIB的结构 112.3.2DIB访问函数 14第3章图像的缩放和旋转 163.1图像的缩放 163.1.1理论基础 163.1.2VisualC++编程实现 173.2图像的旋转 193.2.1理论基础 203.5.2VisualC++编程实现 203.6本程序基本类对象之间的相互访问关系 24第4章结论与展望 254.1结论 254.2展望 25附录1 28附录2 30第1章引言1.1数字图像处理数字图像处理(DigitalImageProcessing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。数字图像处理最早出现于20世纪50年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。随着计算机的发展,数字图像处理技术也不断的进步,实现了对图像图像增强、复原、编码、压缩等,在航天和军事等高科技中扮演越来越重要的角色。1.1.1图像的概念图像是对客观对象的一种相似性的、生动性的描述或写真。或者说图像是客观对象的一种表示,它包含了被描述对象的有关信息。它是人们最主要的信息来源。据统计,一个人获取的信息大约有75%来自视觉。图像根据其形式或产生方法来分类。从人眼的视觉特点上可将图像分为可见图像和不可见图像。按波段多少图像可分为但波段、多波段和超波段图像。但波段图像上每点只有一个亮度值;多波段图像上每点不只一个特性。按图像空间坐标和明暗程度的连续性可分为模拟图像和数字图像。数字图像才能被计算机处理。1.1.2图像处理对图像进行一系列的操作,以达到预期的目的的技术称作图像处理。图像处理可分为模拟图像处理和数字图像处理两种方式。模拟图像处理是利用光学、照像和电子学方法对模拟图像的处理。光学图像处理方法已有很长的历史,在激光全息技术出现后,它得到了进一步的发展。从20世纪60年代起,随着电子计算机技术的进步,计算机图像处理获得了飞跃发展。数字图像处理,是利用计算机对数字图像进行系列操作,从而获得某种预期的结果的技术。数字图像处理离不开计算机,因此又称计算机图像处理。1.2数字图像处理的特点及其应用计算机出现之前,模拟图像处理占着主导地位。随着计算机的发展,数字图像处理发展速度越来越快。与人类对视觉机能着迷的历史相比,尽管它是一门相对年轻的学科,目前一般采用顺序处理的计算机,对大数据量的图像处理速度不如光学方法快,但其处理精度高,实现多种功能的、高度复杂的运算求解非常灵活方便。在其短短的历史中,却成功的应用于几乎所有与成像有关的领域,并正发挥极其重要的作用。1.2.1数字图像处理的特点相比模拟图像处理,数字图像处理有许多优点。精度高对计算机程序来说,不管是对4bit还是8bit和其他比特图像的处理,几乎是一样的。即使处理图像变大,只需改变数组的参数,而处理方法不变,所以从原理上不管处理多高精度的图像都是可能的。而在模拟图像处理中,要想使精度提高一个数量级,就必须对处理装置进行大幅度改进。再现性好在模拟图像处理中,会因为各种干扰及设备故障而无法保持图像的再现性。而在数字图像处理中,不论是什么图像,它们都用数组或集合表示。将它们输入到计算机内,用计算机容易处理的方式表示。在传送和复制图像时,只在计算机内部进行处理,这样数据就不会丢失或遭破坏,保持了完好的再现性。通用性、灵活性高计算机处理的通用性:不管是可视图像还是X线照片、红外线热成像、超声波图像等不可见光成像,尽管这些图像成像体系中的设备规模和精度各不相同,但当把图像信号直接进行A/D变换,或者记录成照片再数字化,对于计算机来说都能用二维数组表示,不管什么样的图像都可以用同样的方法进行处理。同时,对处理程序自由加以改变,可进行各种各样的处理。例如上下滚动、漫游、拼图、合成、变换、放大、缩小和各种逻辑运算等,所以灵活性很高。1.2.2数字图像处理的应用计算机图像处理和计算机、多媒体、智能机器人、专家系统等技术的发展紧密相关。近年来计算机识别、理解图像的技术发展很快,随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大。航天和航空技术方面航天和航空技术方面的应用数字图像处理技术在航天和航空技术方面的应用,除了JPL对月球、火星照片的处理之外,另一方面的应用是在飞机遥感和卫星遥感技术中。许多国家每天派出很多侦察飞机对地球上有兴趣的地区进行大量的空中摄影。对由此得来的照片进行处理分析,以前需要雇用几千人,而现在改用配备有高级计算机的图像处理系统来判读分析,既节省人力,又加快了速度,还可以从照片中提取人工所不能发现的大量有用情报。生物医学工程方面数字图像处理在生物医学工程方面的应用十分广泛,而且很有成效。除了CT技术之外,还有一类是对医用显微图像的处理分析,如红细胞、白细胞分类,染色体分析,癌细胞识别等。此外,在X光肺部图像增晰、超声波图像处理、心电图分析、立体定向放射治疗等医学诊断方面都广泛地应用图像处理技术。通信工程方面当前通信的主要发展方向是声音、文字、图像和数据结合的多媒体通信。具体地讲是将电话、电视和计算机以三网合一的方式在数字通信网上传输。其中以图像通信最为复杂和困难,因图像的数据量十分巨大,如传送彩色电视信号的速率达100Mbit/s以上。要将这样高速率的数据实时传送出去,必须采用编码技术来压缩信息的比特量。在一定意义上讲,编码压缩是这些技术成败的关键。工业和工程方面在工业和工程领域中图像处理技术有着广泛的应用,如自动装配线中检测零件的质量、并对零件进行分类,印刷电路板疵病检查,弹性力学照片的应力分析,流体力学图片的阻力和升力分析,邮政信件的自动分拣,在一些有毒、放射性环境内识别工件及物体的形状和排列状态,先进的设计和制造技术中采用工业视觉等。军事公安方面在军事方面图像处理和识别主要用于导弹的精确末制导,各种侦察照片的判读,具有图像传输、存储和显示的军事自动化指挥系统,飞机、坦克和军舰模拟训练系统等;公安业务图片的判读分析,指纹识别,人脸鉴别,不完整图片的复原,以及交通监控、事故分析等。文化艺术方面目前这类应用有电视画面的数字编辑,动画的制作,电子图像游戏,纺织工艺品设计,服装设计与制作,发型设计,文物资料照片的复制和修复,运动员动作分析和评分等等,现在已逐渐形成一门新的艺术——计算机美术。视频和多媒体系统目前,电视制作系统广泛使用的图像处理、变换、合成,多媒体系统中静止图像和动态图像的采集、压缩、处理、存贮和传输等。电子商务在当前呼声甚高的电子商务中,图像处理技术也大有可为,如身份认证、产品防伪、水印技术等。总之,图像处理技术应用领域相当广泛,已在国家安全、经济发展、日常生活中充当越来越重要的角色,对国计民生的作用不可低估。1.3VisualC++1.3.1VisualC++简述VisualC++是微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。VC++整合了便利的除错工具,特别是整合了微软视窗程式设计(WindowsAPI)、三维动画DirectXAPI,Microsoft.NET框架。其优越性主要表现为:开发分布式应用。开发的应用程序运行效率高、具有健壮性。能缩短软件升级周期。能够生成多线程应用,而多线程应用对于增加并发响应有实际意义。1.3.2将VisualC++应用于数字图像的几何变换由于VC具有明显的优势,因而本文选择了它来作为数字图像几何变换的开发工具。VC丰富的功能和大量的扩展库,类的重用特性以及它对函数库、DLL库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发。在本程序的开发过程中,VC的核心知识、消息映射机制、对话框控件编程等都得到了生动的体现和灵活的应用。第2章数字图像处理的基本概念2.1图像和调色板2.1.1图像的显示1.像素普通的显示器屏幕是由许多的点构成的,这些点称为像素。显示时采用扫描的方式:电子枪每次从左到右扫描一行,为每个像素着色,然后再像这样从上到下扫描整个屏幕,利用人眼的视觉暂留效应就可以显示出一屏完整的图像。为了防止闪烁,每秒要重复上述扫描过程几十次。一般刷新频率大于80Hz时,人眼感受不到屏幕刷新而产生的闪烁,这种显示器被称为位映像设备。所谓位映像,就是指一个二维的像素矩阵,而位图就是采用位映像方法显示和存储的图像。2.彩色图像对于彩色图像,它的显示必须从三原色RGB的概念说起。众所周知,自然界中的所有颜色都可以由红绿蓝(R、G、B)3原色组合而成。针对三原色成分的多少,可以人为的将每种颜色分成0到255共256个等级。这样,根据红、绿、蓝各种不同的组合,就能表示出256*256*256(约1600万)种颜色。当一幅图中每个像素被赋予不同的RGB值时,就能呈现出五彩缤纷的颜色了,这就形成了彩色图像。2.1.2调色板若一幅图像的每个像素都用其RGB分量来表示,则所有的图像文件都将变的非常庞大,实际上的做法不完全是这样的,可以先来看一个简单的计算。对一幅200*200的16色图像,它共有40000个像素,如果每一个像素都用R、G、B三个分量表示,则一个像素需要3个字节,这样保存整个图像要用200*200*3即120000字节。但是如果采用下面的方法,就能省很多字节。对于16色图像,图中最多只有16种颜色,如果采用一个颜色表,表中的每一行记录一种颜色的R、G、B值,这样当表示一个像素的颜色时,只需要指出该颜色是在第几行,即该颜色在颜色表中的索引值便可以。例如,如果表的第0行为255,0,0(红色),那么当某个像素为红色时,只需要标明0即可。通过颜色索引表来表示图像,16种状态可以用4位(bit)表示,所以一个像素要用半个字节。整个图像要用200*200*0.5即20000字节,在加上颜色表占用3*16=48字节,也不过20048字节。这样一幅图像整个占用的字节数只是前面的1/6。其实这张RGB表,就是通常所说的调色板(Palette),或颜色查找表LUT(LookUpTable)。不仅仅是Windows位图,其他许多图像文件格式,例如“.pcx”、“.tif”、“.gif”等都用到了调色板。另外还有一种情况,即真彩色图像(又叫做24位图像)的颜色种类高达256*256*256=16777216种,也就是包含上述提到的R、G、B颜色表示方法中所有的颜色。真彩色图像是说它具有显示所有颜色的能力,即可以包含所有的颜色。通常,在表示真彩色图像时,每个像素直接用R、G、B这3个分量字节表示,而不采用调色板技术。原因很简单:如果使用调色板,表示一个像素颜色在调色板中的索引要用24位,这和直接用R、G、B这3个分量表示用的字节数一样,不但没有节省任何空间,还要加上一个256*256*256*3个字节大的调色板。所以真彩色直接用R、G、B这3个分量表示。2.1.3色彩系统RGB色彩系统是最常用的颜色系统,但在其他方面也会用到其他的色彩系统,常见的有:CMY色彩系统CMY(Cyan,Megenta,Yellow)色彩系统也是一种常用的表示颜色的方式。计算机屏幕的显示通常用RGB色彩系统,它是通过颜色的相加来产生其他颜色,这种做法通常称为加色合成法。而在印刷工业上则通常用CMY色彩系统,它是通过颜色相减来产生其他颜色的,所以称这种方式为减色合成法。White(1,1,1)White(1,1,1)Cyan(0,1,1)Green(0,1,0)Yellow(1,1,0)Blue(0,0,1)Magenta(1,0,1)Black(0,0,0)Red(1,0,0)图2.1RGB与CMY色彩系统关系图YIQ色彩系统YIQ色彩系统通常被北美的电视系统所采用,这里Y不是指黄色,而是指颜色的明视度,即亮度。其实Y就是图像的灰度值,而I和Q则是指色调,即描述图像色彩及饱和度的属性。RGB与YIQ之间的对应关系如下:YUV色彩系统YUV色彩系统被欧洲的电视系统所采用,其中Y和上面的YIQ色彩系统中的Y相同,都是指亮度。U和V虽然也是指色调,但是和I与Q的表达方式不完全相同。RGB与YUV之间的对应关系如下:YCbCr色彩系统YCbCr色彩系统也是一种常见的色彩系统,JPEG采用的色彩系统正是该系统。它是从YUV色彩系统衍生出来的。其中Y还是指亮度,而Cb和Cr则是将U和V做少量调整而得到的。RGB色彩系统和YCbCr色彩系统之间的对应关系如下:2.1.4灰度图把白色与黑色之间按对数关系分为若干等级,称为灰度。灰度分为256阶。用灰度表示的图像称作灰度图(Grayscale),又称灰阶图。通常划分为0到255共256个级别,0最暗(全黑),255最亮(全白)。BMP格式的文件中并没有灰度图这个概念,但是可以很容易的用BMP文件来表示灰度图。方法是用256色的调色板,只不过这个调色板有点特殊,每一项的RGB值都是相同的。也就是说RGB值从(0,0,0),(1,1,1)一直到(255,255,255)。(0,0,0)是全黑色,(255,255,255)是全白色,中间的是灰色。对于R=G=B的色彩,带入YIQ或YUV色彩系统转换公式中可以看到其颜色分量都是0,即没有色彩信息。灰度图使用比较方便。首先RGB的值都一样;其次,图像数据即颜色表索引值,也就是实际的RGB的亮度值;另外,因为是256色的调色板,所以图像数据中一个字节代表一个像素。如果是彩色的256色图,图像处理后有可能会产生不属于这256种颜色的新颜色,所以,图像处理一般采用灰度图。2.2GDI位图GDI是图形设备接口(GraphicsDeviceInterface)的缩写。GDI位图是一种GDI对象,在Microsoft基本类(MFC)库中用CBitmap类来表示。在CBitmap类对象中,包含一种和Windows的GDI模块有关的Windows数据结构,该数据结构是与设备相关的。应用程序可以得到GDI位图数据结构的一个备份,但是其中位的安排则完全依赖于显示设备。可以将GDI位图数据在同一台计算机的内的不同的应用程序间任意传递,但是由于其对设备的依赖性,在不同类型计算机间的传递是没有任何意义的。CObjetCGdiObjectCObjetCGdiObjectCBitmap图2.2CBitmap类的继承关系图2.2.1从资源中装入GDI位图为了加载位图,可以使用CBitmap类的LoadBitmap()成员函数。LoadBitmap()函数有两种调用方式。BOOLLoadBitmap(LPCTSTRlpszResourseName);BOOLLoadBitmap(UINTnIDResourse);一种是通过资源名称(由参数lpszResourseName指定)来加载指定的GDI位图;另外一种是通过资源ID(由参数nIDResourse指定)来加载指定的GDI位图。2.2.2伸缩位图想对位图进行放大或缩小的操作,就可以使用StretchBlt()函数来显示位图。下面是该函数的原型:BOOLStretchBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,intnSrcWidth,intnSrcHeight,DWORDdwRop);该函数中各个参数含义如下:x:指定绘制区域的左上角x坐标(逻辑单位);y:指定绘制区域的左上角y坐标(逻辑单位);nWidth:指定绘制区域的宽度;nHeight:指定绘制区域的高度;pSrcDC:指向要复制位图所在的CDC对象的指针;xSrc:指定原位图要绘制区域的左上角x坐标(逻辑单位);ySrc:指定原位图要绘制区域的左上角y坐标(逻辑单位);nSrcWidth:指定要复制原图像的宽度;nSrcHeight:指定要复制原图像的高度;dwRop:指定绘制方式。2.3设备无关位图(DIB)DIB是Device-IndependentBitmap(设备无关位图)的缩写。它自带颜色信息,因此调色板管理非常容易。DIB也使打印时的灰度阴影的控制更加容易。任何运行Windows的计算机都可以处理DIB,它通常以BMP文件的形式被保存在磁盘中或则作为资源保存在EXE文件和DLL文件中。2.3.1BMP文件中DIB的结构DIB是标准的Windows位图格式,BMP文件中包含了一个DIB。一个BMP文件大体上分成如下4个部分:BITMAPFILEHEADERBITMAPFILEHEADER位图文件开头(只用于BMP文件)bfType=”BM”bfSizebfReservedlbfReserved2bfOffBitsbiSizebiWidthbiHeightbiPannesbiBitCountbiCompressionbiSizeImagebiXPelsPerMeterbiYPelsPerMeterbiClrUsedbiClrmpoetantBITMAPFILEHEADER位图信息头单色DIB有2个表项16色DIB有16个表项或更少256色DIB有256个表项或更少真彩色DIB没有调色板每个表项长度为4字节(32位)像素按照每行每列的顺序排列每一行的字节数必须是4的整数Palette调色板DIBPixelsDIB图像数据图2.3BMP文件结构示意图第一部分为位图文件头BITMAPFILEHEADER,它是一个结构,其定义如下:typedefstructtagBITMAPFILEHEADER{WORDbfType; DWORD bfSize;WORDbfReserved1;WORDbfReserved2;DWORD bfOffBits;}BITMAPFILEHEADER,FAR*LPBITMAPFILEHEADER,*PBITMAPFILEHEADER;该结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数),下面是各个域的说明:bfType:指定文件类型,必须是0x424D,即字符串“BM”,也就是说所有“.bmp”文件的头两个字节都是“BM”。bfSize:指定文件大小,包括这14个字。bfReserved1,bfReserved2:为保留字,不用考虑。bfOffBits:为从文件头到实际的位图数据的偏移字节数,即上图中前三个部分的和。第二部分为位图信息头BITMAPINFOHEADER,它也是一个结构,其定义如下:typedefstructtagBITMAPINFOHEADER{DWORDbiSize;LONGbiWidth; LONGbiHeight;WORDbiPlanes;WORDbiBitCount;DWORDbiCompression;DWORDbiSizeImage;LONGbiXPelsPerMeter;LONGbiYPelsPerMeter;DWORDbiClrUsed;DWORDbiClrImportant;}BITMAPINFOHEADER,FAR*LPBITMAPINFOHEADER,*PBITMAPINFOHEADER;该结构的长度也是固定的,为40个字节。各个域的说明如下:biSize:指定这个结构的长度,为40字节。biWidth:指定图像的宽度,单位是像素。biHeight:指定图像的高度,单位是像素。biPlanes:必须是1,不用考虑。biBitCount:指定表示颜色时要用到的位数,常用的值为1(黑白二色图)、4(16色图)、8(256色)、24(真彩色),新的“.bmp”格式支持32位色,这里就不做讨论了。biCompression:指定位图是否压缩,有效的值为BI-RGB,BI-RLE8,BI-RLE4,BI-BITFIELDS(都是Windows定义好的常量)。要说明的是,Windows位图可以采用RLE4和RLE8的压缩格式,但用的不多。今后所讨论的只有第一种不压缩的情况,即biCompression为BI-RGB的情况。biSizeImage:指定实际的位图数据占用的字节数。biXPelsPerMeter:指定目标设备的水平分辨率,单位是像素/米。biYPelsPerMeter:指定目标设备的垂直分辨率,单位是像素/米。biClrUsed:指定本图像实际用到的颜色数,如果该项为0,则用到的颜色数为2的biCompression次幂。biClrImportant:指定本图像中重要的颜色数,如果该值为0,则认为所有的颜色都是重要的。第三部分为调色板(Palette)。有些位图需要调色板,有些位图,如真彩色图,不需要调色板,它们的BITMAPINFOHEADER后面直接是位图数据。调色板实际上是一个数组,共有biClrUsed个元素(如果该值为0,则有2的biBitCount次幂个元素)。数组中每个元素的类型是一个RGBQUAD结构,占4个字节,其定义如下:typedefstructtagRGBQUAD{BYTErgbBlue;BYTErgbGreen;BYTErgbRed;BYTErgbReserved;}RGBQUAD;其中:rgbBlue:该颜色的蓝色分量。rgbGreen:该颜色的绿色分量。rgbRed:该颜色的红色分量。rgbReserved:保留值。第四部分就是实际的图像数据。对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值,对于真彩色图,图像数据就是实际的R、G、B值。下面就2色、16色、256色位图和真彩色位图分别介绍。对于2色位图,用1位就可以表示该像素的颜色(一般0表示黑,1表示白),所以一个字节可以表示8个像素。对于16色位图,用4位可以表示一个像素的颜色,所以1个字节可以表示2个像素。对于256色位图,1个字节刚好可以表示1个像素。对于真彩色图,3个字节才能表示1个像素。2.3.2DIB访问函数Windows支持一些重要的DIB访问函数,但是这些函数都还没有被封装到MFC中,这些函数主要有:SetDIBitsToDevice函数:该函数可以直接在显示器或打印机上显示DIB。在显示时不进行缩放处理。StretchDIBits函数:该函数可以缩放显示DIB于显示器和打印机上。GetDIBits函数:还函数利用申请到的内存,由GDI位图来构造DIB。通过该函数,可以对DIB的格式进行控制,可以指定每个像素颜色的位数,而且可以指定是否进行压缩。CreateDIBitmap函数:利用该函数可以从DIB出发来创建GDI位图。CreateDIBSection函数:该函数能创建一种特殊的DIB,称为DIB项,然后返回一个GDI位图句柄。LoadImage函数:该函数可以直接从磁盘文件中读入一个位图,并返回一个DIB句柄。DrawDibDraw函数:Windows提供了窗口视频(VFW)组件,VisualC++支持该组件。VFW中的DrawDibDraw函数是一个可以替代StretchDIBits的函数。它的最主要的优点是可以使用抖动颜色,并且提高显示DIB的速度,缺点是必须将VFW代码连接到进程中。第3章图像的缩放和旋转图像的几何变换,通常包括图像的平移、图像的镜像变换、图像的转置、图像的缩放和图像的旋转等。程序基本框架如下图:图像的平移图像的镜像图像的平移图像的镜像图像的转置图像的缩放图像的旋转程序开始读写BMP图像程序结束图3.1程序基本框架图本论文只讨论图像的缩放和旋转。3.1图像的缩放图像的缩放操作会改变图像的大小,产生的图像中的像素可能在原图中找不到相应的像素点,这样就必须进行近似处理。一般的方法是直接赋值为和它最相近的像素值,也可以通过一些插值算法来计算。下面的代码采用直接赋值法。3.1.1理论基础假设图像x轴方向缩放比率为fx,y轴方向缩放比率为fy,那么原图中点(x0,y0)对应与新图中的点(x1,y1)的转换矩阵为:其逆运算如下:即例如,当fx=fy=0.5时,图像被缩放到一半大小,此时缩小后图像中的(0,0)像素对应于原图中的(0,0)像素;(0,1)像素对应于原图中的(0,2)像素;(1,0)像素对应于原图中的(2,0)像素,以此类推。在原图基础上,每行隔一个像素取一点,每隔一行进行操作。其实是将原图每行中的像素重复取值一遍,然后每行重复一次。3.1.2VisualC++编程实现按照上面的转换公式,可以容易的写出图像的缩放程序流程图:程序开始程序开始单击“文件>打开”打开一幅图像获取水平缩放量和垂直缩放量单击“几何变换>图像缩放”更新DIB中图像的高度和宽度计算缩放后图像实际高度和宽度针对图像每行每列进行操作计算指向新DIB第i行,第j个像素的指针计算该像素在原DIB中的坐标判断坐标是否在原图范围内计算指向原DIB在该坐标下像素的指针复制像素将该像素赋值为255判断缩放缩放成功替换DIB,更新DIB大小和调色板,设置脏标记重新设置滚动视图大小,并更新视图提示用户程序结束是否是否图3.2图像缩放程序流程图下面是进行缩放的界面:图3.3图像缩放的界面缩放后的结果为:图3.4图像缩放后的结果3.2图像的旋转图像的旋转是以图像的中心为原点,旋转一定的角度。旋转后,图像的大小一般会改变。和图像平移一样,既可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像。3.2.1理论基础可以推导一下旋转运算的变换公式。如下图所示,点(x0,y0)经过旋转θ度后坐标变成(x1,y1)。在旋转前:旋转后:写成矩阵表达式为:其逆运算如下:3.5.2VisualC++编程实现有了上面的转换公式,就可以编写出实现图像旋转的函数。首先应计算出公式中需要的几个参数:a,b,c,d和旋转后新图像的高、宽度。现在已知图像的原始宽度为lWidth,高度为lHeight,以图像中心为坐标系原点,则原始图像四个角的坐标分别为,,和,按照旋转公式,在旋转后的新图中,这四个点坐标为:则新图像的宽度lNewWidth和高度lNewHeight为:lNewWidth=max(,)lNewHeight=max(,)令因为a=,b=,c=,d=所以则程序流程图如下:程序开始程序开始单击“文件>打开”打开一幅图像获取旋转角度单击“几何变换>图像旋转”计算旋转角度的正弦和余弦计算原图和新图四个角的坐标计算旋转后图像实际高度和宽度更新DIB中图像的高度和宽度针对图像每行每列进行操作计算指向新DIB第i行,第j个像素的指针计算该像素在原图DIB中的坐标判断坐标是否在原图范围内计算指向原DIB在该坐标下像素的指针将该像素赋值为255复制像素判断旋转是否成功替换DIB,更新DIB大小和调色板,设置脏标记重新设置滚动视图大小,并更新视图程序结束提示用户是否是否图3.5图像旋转程序流程图下面是进行旋转的界面:图3.6图像进行旋转的界面旋转后的结果为:图3.7图像旋转后的结果3.6本程序基本类对象之间的相互访问关系前面就图像的几何变换,详细的介绍了图像的平移、镜像(垂直镜像和水平镜像)、转置、缩放和旋转的流程及其功能。下面就整个程序流程和基本类对象之间的相互访问关系进行图解说明:程序开始程序开始CDataFusionApptheAPPCDataFusionApp()InitInstance()创建主窗口调用函数库GeoTrans视图类(CDataFusionView)CDataFusionViewOnDraw(CDC*pDC)…………GetDocument()…………OnGeoTRtan()OnGeoMith()OnGeoMiv()OnGeoTrpo()OnGeoZoom()OnGeoRota()框架类窗口(CMainFrame)CMainFrame()OnCreate(…)文档类(CDataFusionDoc)CDataFusionDoc()OnNewDocument()OnOpenDocument(…)CanCloseFrame(…)销毁窗口程序结束对话框类DlgGoTranCdlgGeoTran(…)DoDataExchange(…)对话框类DlgGoZoomCdlgGoZoom(…)DoDataExchange(…)使用函数库global子框架窗口类(CChildFrame)CChildFrame()ActivateFrame(…)图3.8程序基本类对象之间的相互访问关系第4章结论与展望4.1结论数字图像处理的处理速度相对较慢,因为其数据量较大。为了简化操作,本文只针对灰度图进行处理。本文在对BMP图像各种基础操作实现的基础上,完成经典的图像几何变换功能。如下:图像的缩放。程序将图像按用户设定的X轴方向的缩放比率和Y轴方向的缩放比率进行缩放。此操作产生的图像中的像素可能在原图中找不到相应的像素点,因此必须进行近似处理。图像的旋转。程序将图像以图像中心为原点,按照用户设定的旋转角度进行旋转。本程序作为数字图像处理的一个重要组成部分,具有高度的稳定性和灵活性。各个模块独立性高,可扩充性好。通过它,我对计算机图像处理的基础理论和操作有了初步认识,对VisualC++开发应用程序的流程、消息映射机制、应用程序执行过程等有了进一步的理解,深刻体会到了C++高效和简洁的特点,为以后的学习打下了坚实的基础。4.2展望因时间有限,本程序还有许多不足之处。主要体现有以下几个方面:1、在图像的旋转中,为了减小运算量,将图像以图像中心为坐标系原点进行旋转,而不是用户指定的任意一点。2、图像处理的一个重要的组成部分,支持任意格式图像的读写操作,是不可缺少的部分。但本程序考虑到灰度图使用比较方便,故只实现了BMP格式的读写,对其他格式,例如GIF,JPEG,PCX格式的图像则未做处理。要实现这一部分,必须了解每种格式的存储结构,对不同的格式定义不同的数据结构和函数库。3、对于一个完整的应用程序来说,支持不同图像格式的相互转换是非常重要的内容。而本程序只是简单的将BMP格式图像保存为原格式,未实现不同格式之间的相互转换。要实现这一部分,除了必须了解每种格式的数据结构之外,对于存在压缩的图像格式,还必须了解它所用的编码或解码方式。参考文献【1】张宏林编著.《VisualC++数字图像模式识别技术及工程实践》.——北京:人民邮电出版社,2003.2【2】何斌、马天予、王运坚、朱红莲编著.《VisualC++数字图像处理(第二版)》.——北京:人民邮电出版社,2002.12【3】《数字图像处理》.电子工业出版社.【4】《VisualC++——图形图像编程》.机械工业出版社.【5】章毓晋编著.《图像处理和分析》.清华大学出版社,1999.2【6】贾永红编著.《计算机处理与分析》.武汉大学出版社,2001.9【7】章毓晋.中国图象工程:1996.中国图象图形学报,2(5):336-【8】章毓晋.基于内容的多媒体信息检索CMIR与国际标准MPEG-7(特邀报告).第九届全国图形学学术会议论文集,9-16.1998b致谢在本次论文设计过程中,我首先要感谢舒恒老师给予细心指引与教导,他严谨的治学态度,一丝不苟的敬业精神给我留下了深刻的印象。感谢他在百忙之中一直督促关心着我的本科论文的写作。他的博学、勤勉以及平和的为人,使我油然而生敬意。再次感谢舒恒老师给我这个机会学到数字图像处理的一些知识,使我能够学习到许多图像处理学科前沿的知识,而且通过实际项目开发,积累了宝贵的实践经验,提高了我用VisualC++编程的能力。也感谢我的同学,在与他们的交流和讨论中我受益匪浅,同时也被他们刻苦钻研的精神所深深感染。他们乐于助人,耐心的解答我提出的问题,对我的论文提出了许多中肯的修改意见,并对一些技术上的细节给予了很大的帮助。同时感谢我的父母,是他们给予了我无私的奉献、支持和鼓励。附录1图像进行缩放的算法:memcpy(lpNewDIB,lpDIB,*(LPDWORD)lpDI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025标准房屋租赁合同范本「版」
- 2025年管理顾问聘用合同范本
- 2025打印机租赁合同协议书
- 2025简化版劳动合同模板
- 二零二五汽车运输合同书协议书
- 影视剧美术指导聘用劳动合同范例二零二五年
- 二零二五对外承包项目借款合同书模板范例
- 二零二五学校护校人员聘用合同书
- 二零二五花园绿化养护管理合同书
- 大学生职业规划大赛《电子与计算机工程专业》生涯发展展示
- 化工工艺原理考试题库梳理
- 定金款管理制度
- 光伏电站安全培训
- GB/T 37027-2025网络安全技术网络攻击和网络攻击事件判定准则
- 2025年江苏南通苏北七市高三二模高考物理试卷(含答案详解)
- 2024年药理学考试真题回顾试题及答案
- 2025年军队文职(司机类)核心知识点备考题库(含答案)
- 2025年深圳二模考试试题及答案
- (一模)临沂市2025届高三高考第一次模拟考试生物试卷(含标准答案)
- 老年康体指导职业教育课件
- 微训练 一文多考 备考高效之诗歌《临安春雨初霁》陆游 - 教师版
评论
0/150
提交评论