C++数字图像处理.docx

上传人:b****3 文档编号:3676328 上传时间:2022-11-24 格式:DOCX 页数:36 大小:780.60KB
下载 相关 举报
C++数字图像处理.docx_第1页
第1页 / 共36页
C++数字图像处理.docx_第2页
第2页 / 共36页
C++数字图像处理.docx_第3页
第3页 / 共36页
C++数字图像处理.docx_第4页
第4页 / 共36页
C++数字图像处理.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

C++数字图像处理.docx

《C++数字图像处理.docx》由会员分享,可在线阅读,更多相关《C++数字图像处理.docx(36页珍藏版)》请在冰豆网上搜索。

C++数字图像处理.docx

C++数字图像处理

 

本科毕业设计(论文)

摘要

几何变换是最常见的图像处理手段,通过对变形的图像进行几何校正,可以得出准确的图像。

常用的几何变换功能包括图像的平移、图像的镜像变换、图像的转置、图像的缩放、图像的旋转等等。

目前数字图像处理的应用越来越广泛,已经渗透到工业、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用。

作为数字图像处理的一个重要部分,本文介绍的工作是如何用VisualC++编程工具设计一个完整的应用程序,实现经典的图像几何变换功能。

程序大概分为两大部分:

读写BMP图像,和数字图像的几何变换。

即首先用VisualC++创建一个多文档应用程序框架,在实现任意BMP图像的读写,打印,以及剪贴板操作的基础上,完成经典的图像几何变换功能。

图像几何变换的VisualC++编程实现,为校内课题的实现提供了一个实例。

关键字:

图像处理;几何变换;BMP图像;VisualC++

Abstract

Thegeometricaltransformationisthemostpopularimageprocessingmethod.Wecangetanexactimagefromadistortedimagethroughthegeometricalemendation.Thetransformingmethodsincommonuseincludingtranslation,mirror,rotation,ortransposeanimage.Sincethedomainofdigitalimageprocessingapplicationhasbecomingwiderandwider,itpenetratesintomanyfields.Suchasindustry,aviation,military,andhasbecomemuchmoreimportantineveryaspectsofourlife.

Beinganimportantpartofdigitalimageprocessing,theworkintroducedinthisarticleisabouthowtodesignanintegratedapplicationprogramusingVisualC++toimplementtheclassicgeometricaltransformation.Theprogramcanbedividedintotwoparts:

readorwriteaBMPimage,andthegeometricaltransformationforit.SoIdesignedamultipledocumentinterfacefirst,onthebasicofread,write,print,andtheclipboardoperationofanimage,thencarryoutthefunctionofgeometricaltransformationfinally.

TheimplementationofgeometricaltransformationusingVisualC++isagoodexampleforcarryingoutintramuralproblems.

Keywords:

Imageprocessing;Geometricaltransformation;BMPimage;VisualC++

第一章绪论

1.1何谓数字图像处理

数字图像处理(DigitalImageProcessing),就是利用数字计算机或则其他数字硬件,对从图像信息转换而得到的电信号进行某些数学运算,以提高图像的实用性。

例如从卫星图片中提取目标物的特征参数,三维立体断层图像的重建等。

总的来说,数字图像处理包括点运算、几何处理、图像增强、图像复原、图像形态学处理、图像编码、图像重建、模式识别等。

目前数字图像处理的应用越来越广泛,已经渗透到工业、医疗保健、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用。

1.1.1图像的概念

图像是对客观对象的一种相似性的、生动性的描述或写真。

或者说图像是客观对象的一种表示,它包含了被描述对象的有关信息。

它是人们最主要的信息来源。

据统计,一个人获取的信息大约有75%来自视觉。

图像根据其形式或产生方法来分类。

从人眼的视觉特点上可将图像分为可见图像和不可见图像。

其中可见图像的一个子集为图片,它包括照片、用线条画的图和画;另一个子集为光图像,即用透镜、光栅和全息技术产生的图像。

不可见的图像包括不可见光成像和不可见量,如温度、压力及人口密度等的分布图。

按波段多少图像可分为但波段、多波段和超波段图像。

但波段图像上每点只有一个亮度值;多波段图像上每点不只一个特性。

例如红、绿、蓝三波段光谱图像或彩色图像上的每个点具有红、绿、蓝三个亮度值,这三个值表示在不同光波段上的强度,人眼看来就是不同的颜色。

超波段图像上每个点具有几十或几百个特性。

按图像空间坐标和明暗程度的连续性可分为模拟图像和数字图像。

模拟图像指空间坐标和明暗程度都是连续变化的、计算机无法直接处理的图像。

数字图像是一种空间坐标和灰度均不连续的、用离散的数字(一般用整数)表示的图像。

这样的图像才能被计算机处理。

1.1.2图像处理

对图像进行一系列的操作,以达到预期的目的的技术称作图像处理。

图像处理可分为模拟图像处理和数字图像处理两种方式。

利用光学、照像和电子学方法对模拟图像的处理称为模拟图像处理。

光学图像处理方法已有很长的历史,在激光全息技术出现后,它得到了进一步的发展。

尽管光学图像处理理论日臻完善,且处理速度快,信息容量大,分辨率高,又非常经济,但处理精度不高,稳定性差,设备笨重,操作不方便和工艺水平不高等原因限制了它的发展速度。

从20世纪60年代起,随着电子计算机技术的进步,计算机图像处理获得了飞跃发展。

所谓数字图像处理,就是利用计算机对数字图像进行系列操作,从而获得某种预期的结果的技术。

数字图像处理离不开计算机,因此又称计算机图像处理。

为了与模拟图像处理想区别,下文采用“数字图像处理”。

1.2图像处理学的内容和其他相关学科的关系

1.2.1图像处理学的内容

至20世纪70年代末以来,由于数字技术和微电子技术的迅猛发展给数字图像处理提供了先进的技术手段,基于计算机的图像处理学也就从信息处理、自动控制系统论、计算机科学、数据通信、电视技术等学科中脱颖而出,成为研究“图像信息的获取、传输、存储、变换、显示、理解与综合利用”的一门崭新学科。

图像处理学所包含的内容是相当丰富的,根据抽象程度的不同可分为三个层次:

狭义图像处理、图像分析和图像理解。

狭义图像处理着重强调在图像之间进行的变换,主要是指对图像进行各种操作以改善图像的视觉效果,或对图像进行压缩编码以减少所需存储空间或传输时间、传输通路的要求。

它是一个从图像到图像的过程。

图像分析主要是对图像中感兴趣的目标进行检测和测量,从而建立对图像的描述。

图像分析是一个从图像到数值或符号的过程。

图像理解超出了目前的所学范围,则不加以讨论。

1.2.2图像处理学与相关学科的关系

图像处理学是一门综合性边缘学科。

从研究范围来看,它与计算机图形学、模式识别、计算机视觉等既有联系又有区别。

图形学原本指用图形、图表、绘图等形式表达数据信息的科学。

而计算机图形学研究的是如何利用计算机技术来产生这些形式。

和图像分析对比,两者的处理对象和输出结果正好相反。

计算机图形学试图从非图像形式的数据描述来生成图像。

另一方面,模式识别与图像分析则比较相似,只是前者试图把图像抽象成符号描述的类别,它们有相同的输入,而不同的输出结果之间可较方便的进行转换。

至于计算机视觉主要强调用计算机去实现人的视觉功能,其中涉及图像处理的许多技术,但目前的研究内容主要与图像理解相结合。

由此看来,以上学科相互联系,相互交叉,它们之间并没有绝对的界限。

虽各有侧重但又相互补充。

另外以上各学科都得到了人工智能、神经网络、遗传算法、模糊逻辑等新理论、新工具、新技术的支持,所以它们又都在近年得到了长足发展。

1.3数字图像处理的特点及其应用

在计算机出现之前,模拟图像处理占主导地位。

随着计算机的发展,数字图像处理发展速度越来越快。

与人类对视觉机能着迷的历史相比,它是一门相对年轻的学科。

尽管目前一般采用顺序处理的计算机,对大数据量的图像处理速度不如光学方法快,但是其处理的精度高,实现多种功能的、高度复杂的运算求解非常灵活方便。

在其短短的历史中,它却成功的应用于几乎所有与成像有关的领域,并正发挥相当重要的作用。

1.3.1数字图像处理的特点

同模拟图像处理相比,数字图像处理有很多优点。

主要表现在:

1.精度高

不管是对4bit还是8bit和其他比特图像的处理,对计算机程序来说几乎是一样的。

即使处理图像变大,只需改变数组的参数,而处理方法不变。

所以从原理上不管处理多高精度的图像都是可能的。

而在模拟图像处理中,要想使精度提高一个数量级,就必须对处理装置进行大幅度改进。

2.再现性好

不管是什么图像,它们均用数组或集合表示。

将它们输入到计算机内,用计算机容易处理的方式表示。

在传送和复制图像时,只在计算机内部进行处理,这样数据就不会丢失或遭破坏,保持了完好的再现性。

而在模拟图像处理中,就会因为各种干扰及设备故障而无法保持图像的再现性。

3.通用性、灵活性高

不管是可视图像还是X线照片、红外线热成像、超声波图像等不可见光成像,尽管这些图像成像体系中的设备规模和精度各不相同,但当把图像信号直接进行A/D变换,或记录成照片再数字化,对于计算机来说都能用二维数组表示,不管什么样的图像都可以用同样的方法进行处理,这就是计算机处理的通用性。

另外,对处理程序自由加以改变,可进行各种各样的处理。

如上下滚动、漫游、拼图、合成、变换、放大、缩小和各种逻辑运算等,所以灵活性很高。

1.3.2数字图像处理的应用

计算机图像处理和计算机、多媒体、智能机器人、专家系统等技术的发展紧密相关。

近年来计算机识别、理解图像的技术发展很快,也就是图像处理的目的除了直接供人观看(如医学图像是为医生观看作诊断)外,还进一步发展了与计算机视觉有关的应用,如邮件自动分检,车辆自动驾驶等。

下面仅罗列了一些典型应用实例,而实际应用更广。

1.在生物医学中的应用

主要包括显微图像处理;DNA显示分析;红、白血球分析计数;虫卵及组织切片的分析;癌细胞的识别;染色体分析等等。

2.遥感航天中的应用

军事侦察、定位、导航、指挥等应用;多光谱卫星图像分析;地形、地图、国土普查;地质、矿藏勘探;天文、太空星体的探测及分析等。

3.工业应用

CAD和CAM技术用于模具、零件制造、服装、印染业;零件、产品无损检测,焊缝及内部缺陷检查;交通管制、机场监控;火车车皮识别等。

4.军事公安领域中的应用

巡航导弹地形识别;指纹自动识别;警戒系统及自动火炮控制;反伪装侦察;手迹、人像、印章的鉴定识别;过期档案文字的复原;集装箱的不开箱检查等。

5.其他应用

图像的远距离通信;多媒体计算机系统及应用;电视电话;服装试穿显示;理发发型预测显示;电视会议;办公自动化、现场视频管理等。

1.4VisualC++

1.4.1VisualC++简述

VisualC++(简称VC)是微软公司提供的基于C/C++的应用程序集成开发工具。

VC拥有丰富的功能和大量的扩展库,使用它能有效的创建高性能的Windows应用程序和Web应用程序。

VC的优越性主要表现在以下几个方面:

1.开发分布式应用。

2.开发的应用程序运行效率高、具有健壮性。

3.能缩短软件升级周期。

4.能够生成多线程应用,而多线程应用对于增加并发响应有实际意义。

VC除了提供高效的C/C++编译器外,还提供了大量的可重用类和组件,包括著名的微软基础类库(MFC)和活动模板类库(ATL),因此它是软件开发人员不可多得的开发工具。

1.4.2将VisualC++应用于数字图像的几何变换

VC丰富的功能和大量的扩展库,类的重用特性以及它对函数库、DLL库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发,正由于VC具有明显的优势,因而我选择了它来作为数字图像几何变换的开发工具。

在本程序的开发过程中,VC的核心知识、消息映射机制、对话框控件编程等都得到了生动的体现和灵活的应用。

第二章数字图像处理的基本概念

本章将详细介绍Windows下VisualC++数字图像处理的基础知识。

主要的内容有:

1:

Windows位图的结构和调色板的概念;

2:

GDI位图与设备无关位图的概念;

3:

如何构造自己的DIB函数库,及如何用VisualC++编程来实现Windows位图的读写。

2.1图像和调色板

2.1.1图像的显示

普通的显示器屏幕是由许多的点构成的,这些点称为像素。

显示时采用扫描的方式:

电子枪每次从左到右扫描一行,为每个像素着色,然后再像这样从上到下扫描整个屏幕,利用人眼的视觉暂留效应就可以显示出一屏完整的图像。

为了防止闪烁,每秒要重复上述扫描过程几十次。

一般刷新频率大于80Hz时,人眼感受不到屏幕刷新而产生的闪烁,这种显示器被称为位映像设备。

所谓位映像,就是指一个二维的像素矩阵,而位图就是采用位映像方法显示和存储的图像。

对于彩色图像,它的显示必须从三原色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色彩系统是最常用的颜色系统,但在其他方面也会用到其他的色彩系统,常见的有:

1.CMY色彩系统

CMY(Cyan,Megenta,Yellow)色彩系统也是一种常用的表示颜色的方式。

计算机屏幕的显示通常用RGB色彩系统,它是通过颜色的相加来产生其他颜色,这种做法通常称为加色合成法。

而在印刷工业上则通常用CMY色彩系统,它是

通过颜色相减来产生其他颜色的,所以称这种方式为减色合成法。

图2.1RGB与CMY色彩系统关系图

2.YIQ色彩系统

YIQ色彩系统通常被北美的电视系统所采用,这里Y不是指黄色,而是指颜色的明视度,即亮度。

其实Y就是图像的灰度值,而I和Q则是指色调,即描述图像色彩及饱和度的属性。

RGB与YIQ之间的对应关系如下:

3.YUV色彩系统

YUV色彩系统被欧洲的电视系统所采用,其中Y和上面的YIQ色彩系统中的Y相同,都是指亮度。

U和V虽然也是指色调,但是和I与Q的表达方式不完全相同。

RGB与YUV之间的对应关系如下:

4.YCbCr色彩系统

YCbCr色彩系统也是一种常见的色彩系统,JPEG采用的色彩系统正是该系统。

它是从YUV色彩系统衍生出来的。

其中Y还是指亮度,而Cb和Cr则是将U和V做少量调整而得到的。

RGB色彩系统和YCbCr色彩系统之间的对应关系如下:

2.1.4灰度图

灰度图(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位图数据在同一台计算机的内的不同的应用程序间任意传递,但是由于其对设备的依赖性,在不同类型计算机间的传递是没有任何意义的。

下图是CBitmap类的继承关系图。

CBitmap类封装了WindowsGDI位图,同时提供了一些操作位图的成员函数。

在使用CBitmap对象时,首先要创建一个CBitmap对象,然后把它选进设备环境中,再调用其成员函数进行处理,在使用完毕后,把它从设备环境中选出并删除。

图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个部分:

图2.3BMP文件结构示意图

第一部分为位图文件头BITMAPFILEHEADER,它是一个结构,其定义如下:

typedefstructtagBITMAPFILEHEADER{

WORDbfType;

DWORDbfSize;

WORDbfReserved1;

WORDbfReserved2;

DWORDbfOffBits;

}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;

LONGbiXPel

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1