基于MFC的图像边缘检测提取算法仿真doc.docx
- 文档编号:14049310
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:39
- 大小:433.64KB
基于MFC的图像边缘检测提取算法仿真doc.docx
《基于MFC的图像边缘检测提取算法仿真doc.docx》由会员分享,可在线阅读,更多相关《基于MFC的图像边缘检测提取算法仿真doc.docx(39页珍藏版)》请在冰点文库上搜索。
基于MFC的图像边缘检测提取算法仿真doc
序号(学号):
040740525
长春大学光华学院
毕业设计(论文)
基于MFC的图像边缘检测提取算法仿真
姓名
郭俊峰
系别
信息工程系
专业
计算机技术与科学
班级
计算07405
指导教师
李平(教授)
2011
年
6
月
15
日
基于MFC的图像边缘检测提取算法仿真
[摘要]本论文是要通过计算机仿真的方法来实现对图像边缘的提取,并生成新的图像,新的图像只含有边缘,无其他的颜色信息。
在通过用计算机进行仿真的过程中,演示仿真系统是使用VC++6.0来编写的,应用了面向对象的编程思想,并使用C++语言实现。
本论文研究的图像是Windows操作系统中的标准图像文件格式(*.bmp)。
本论文从介绍MFC编程的基础知识,然后又分析了bmp图像的内部结构。
分析比较了六个常用边缘检测算子,最后又分析了边缘提取算子。
通过对各个算子的分析比较,最后应用在边缘提取上的边缘检测算子是Kirsch算子,其他几个算子在应用后边缘检测后效果一般,但是进行边缘提取后,效果非常不清晰,只有Kirsch算子较好的反应了边缘,我所做的边缘检测,是在不分析图像的噪声,和其他因素的条件下进行的。
[关键词]边缘检测边缘提取算子图像
BasedonMFCimageedgedetectionextractionalgorithmsimulation
[Abstract]Thisthesisistothroughthecomputersimulationmethodtorealizetheimageedgeextraction,andgeneratenewimage,thenewimagecontainsonlyedge,noothercolorinformation.Withacomputersimulationinthroughtheprocess,demosimulationsystemisusingvc++6.0towrite,appliedtheobject-orientedprogrammingideas,andusethec++languageimplementation.ThispaperstudiestheimageisWindowsoperatingsystemstandardimagefileformat(*.BMP).ThispaperintroducesthebasicknowledgeofprogrammingMFC,thenanalyzestheinternalstructureofBMPimage.Analysesandcomparesthesixcommonedgedetectionandthenanalyzestheoperatorimageedgeoperator.Throughtheanalysisandcomparisonofvariousoperators,finallyusedinedgeextractionofedgedetectionoperatorisonKirschoperator,severalotheroperatorsinappliedaftertheedgedetectioneffect,butaftergeneralonedgeafterextraction,theeffectisverynotclear,onlyKirschoperatorbetterresponsetheedge,Ididedgedetection,isnotanalysisimagenoise,andotherfactorsoftheconditions.
[Keywords]edgedetectionpickoperatorimage
目录I
第1章绪论1
1.1引言1
1.2边缘与边缘检测1
1.3边缘检测的研究背景及意义1
1.4课题发展状况和目标2
第2章程序框架及编程基础知识介绍3
2.1MFC概述3
2.2MFC类库3
2.3程序设计框架:
4
第3章VC++图像处理程序的设计6
3.1数字图像处理概述6
3.2图像和颜色系统7
3.2.1灰度图像和彩色图像8
3.3位图8
第4章经典的边缘检测提取方法及实现14
4.1Roberts算子14
4.2Prewitt算子和Sobel算子15
4.3Kirsch算子17
4.4拉普拉斯算子17
4.5高斯拉普拉斯边缘检测算子19
4.6边缘检测算子的实现20
4.7算子的结果比较23
第五章边缘提取25
5.1边缘提取的功能与原理25
5.2边缘提取的效果与算法实现26
结论28
致谢29
参考文献30
第1章绪论
1.1引言
边缘检测是图像处理的一个重要分支,研究为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。
边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。
在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。
边缘检测实际上就是检测图像特征发生变化的位置。
由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容:
首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。
边缘检测的方法大多数是基于方向导数掩模求卷积的方法。
导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。
[3]
1.2边缘与边缘检测
直观上边缘是一组相连像素的集合,它们位于两个不同区域之间,而从根本上说边缘是基于某种算法得到的具有特定特征的点的集合。
由此看出边缘的定义与算法有关,同时边缘的定义以像素灰度的跃变为基础。
图像上颜色相近的像素连在一起形成了不同的区域而不同的区域间的边缘表现为颜色灰度的跃变。
边缘检测就是利用微分等方法通过对灰度跃变的分析寻找图像上区域边缘的技术,对数字图像,通常使用卷积或类似卷积的方法来实现对灰度的分析。
1.3边缘检测的研究背景及意义
利用计算机进行图像处理有两个目的:
一是生产更适合人类观察和识别的图像;二是希望能由计算机自动识别和理解图像。
无论为了哪种目的,图像处理中关键的一步就是对包含大量的各式各样景物信息的图像进行分解。
分解最终结果是图像被分解成一些具有某种特征的最小成分,称为图像的基元,相对于整幅图像来说,这种基元比较容易处理。
图像的特征是指图像场中可用作标志的属性。
它可以分为图像的统计特征和图像的视觉特征。
图像的统计特征是指一些人为定义的特征,通过变换才能得到如图像的直方图、矩频谱等。
图像的视觉特征是指人的视觉可直接感受到自然特征,如区域的亮度、纹理或轮廓等,利用这两类特征把图像分解成一系列有意的目标或区域的过程称为图像的分割。
图像的边缘是图像的最基本特征。
所谓边缘是指周围图像灰度有阶跃变化的那些像素的集合,边缘广泛存在于物体与背景之间,物体与物体之间,基元与基元之间。
因此边缘检测是图像分割所依赖的重要特征。
[2]
1.4课题发展状况和目标
边缘检测的研究多年来在业内被人们高度重视。
从边缘检测研究的历史和现状来看,边缘检测有几个明显的趋势:
1、对原有的算法不断改进。
2、新方法、新概念的引入和多种方法的有效综合运用。
3、对特殊图像边缘检测的研究越来越得到重视,目前有很多针对立体图像、彩色图像、多光谱图像、合成孔径雷达图像、深度图像、纹理图像、超声图像、计算机断层扫描、磁共振图像、共聚焦激光扫描显微镜图像以及运动图像等特殊图像的边缘检测技术的研究。
4、对图像边缘检测评价的研究和对评价系统的研究越来越得到关注。
5、将现有的算法应用于工程实际中。
在此本可以将使用VC++6.0编程设计软件对边缘检测技术的的各个算法进行仿真编程,来分析和比较各个算法的功能和效果,以便更深入的了解图像边缘检测技术。
第2章程序框架及编程基础知识介绍
2.1MFC概述
MFC,微软基础类(MicrosoftFoundationClasses),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是Windows下开发人员使用的专业C++SDK(SDK,StandardSoftWareDevelopKit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:
C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE。
MFC是WinAPI与C++的结合,API,即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行,比如VB,VC++,Java,Delhpi编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在Windows的消息机制和绘图里,遵守Windows作为一个操作系统的内部实现,这其实也是一种必要,微软如果不提供API,这个世上对Windows编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾,上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++SDK来进行Windows下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Windows下用C++&MFC编制软件时的大量内节,如应用程序实现消息的处理。
2.2MFC类库
CWnd:
窗口,它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,一个例外是菜单(CMenu)不是从窗口派生的。
该类很大,一开始也不必学,知道就行了。
CDocument文档,负责内存数据与磁盘的交互。
最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)。
CView视图,负责内存数据与用户的交互。
包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。
最重要的是OnDraw(重画窗口),通常用CWnd:
:
Invalidate()来启动它。
另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。
你自己的许多功能都要加在里面,你打交道最多的就是它。
CDC设备文本。
无论是显示器还是打印机,都是画图给用户看。
这图就抽象为CDC。
CDC与其他GDI(图形设备接口)一起,完成文字和图形、图像的显示工作。
把CDC想象成一张纸,每个窗口都有一个CDC相联系,负责画窗口。
CDC有个常用子类CClientDC(窗口客户区),画图通常通过CClientDC完成。
CDialog对话框
CWinApp应用程序类。
似于C中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。
最常用函数InitInstance():
初始化。
CSize大小,就是(cx,cy)对(宽、高)MFC是在1992年的Microsoft16位版的C/C++编译器的7.0版本中作为一个扩展轻量级的WindowsAPI面向对象的C++封装库而引入的。
CEditView提供Windows编缉控件的功能。
因为CEditView派生于Cedit,该对象可同文件和文件模板一同使用afxext.h。
2.3程序设计框架:
1.系统流程图:
图2.1系统流程图
第3章VC++图像处理程序的设计
3
4
3.1数字图像处理概述
数字图像处理(DigitalImageProcessing)是指用计算机对图像信息进行的处理,也称为(ComputerImageProcessing)。
数字图像处理包括以下几个内容:
[3]
(1)点运算
点运算主要是针对图像的像素进行加、减、乘、除等运算。
图像的点运算可有有效地改变图像的直方图分布,这对提高图像的分辨率以及图像的均衡都是非常有效的。
(2)几何处理
几何处理主要包括图像的坐标转换、图像的移动、缩小、放大和旋转,多个图像的配准和图像扭曲校正等。
几何处理是最常见的图像处理手段,几乎任何图像处理软件都提供了最基本的图像缩放功能。
图像的扭曲校正功能可以对变形的图像进行几何校正,从而得出准确的图像。
(3)图像增强
图像增强主要是突出图像中重要的信息,同时减弱同时减弱或去除不需要的信息。
本论文所研究的范围就是属于图像的增强。
常用的方法有直方图增强和伪彩色增强等。
[5]
(4)图像复原
图像复原的主要目的是去除干扰和模糊,从而恢复图像的本来。
例如对图像进行去噪声复原处理。
(5)图像形态学处理
图像形态学是数学形态的延伸,是一门独立的研究科学。
利用图像形态学处理技术,可以实现图像的腐蚀、细化和分割等效果。
(6)图像编码
图像编码研究属于信息论中信息源编码的范畴,主要是利用图像的信号的统计特性和人类视觉特性对图像进行高效编码,从而达到压缩图像的目的。
图像编码是数字图像处理中一个经典的研究范畴,有60多年的研究历史,目前已经制定了多种编码标准,如H.261、JPEG和MEPG等。
(7)图像重建
图像的重建起源于CT技术的发展,是一门新兴的数字图像处理技术,主要是利用采集的数据重建出图像。
图像重建的主要算法有迭代法、代数法、傅立叶反投影法和和使用最广泛的卷积反投影法等。
(8)模式识别
模式识别也是数字图像处理的一个新兴的研究方向,目前模式识别方法有三种,即统计识别法、句法结构模式识别法和模糊识别法。
应用广泛的有文字识别(ORC)技术就是应用模式识别技术开发出来的。
3.2图像和颜色系统
1.
2.
3.
a)
b)
1.
2.
2.3
1.图像
普通的显示器屏幕是由许多的点构成的,这些点称为像素。
显示时采用扫描的方式:
电子枪每次从左到右扫描一行,为每个像素着色,然后再从上到下扫描整个屏幕,利用人眼的视觉暂留效应就可以显示出一屏完整的图像。
为了防止闪烁,每秒要重复几十次扫描过程。
我们常说的屏幕分辨率为1024*768像素,刷新频率为85Hz,意思是每行扫描1024像素,一共要扫描768行,每秒重复扫描屏幕85次。
一般刷新频率大于80Hz时,人眼感受不到因屏幕刷新而产生的闪烁,这种显示器被称为位映像设备。
所谓位映像,就是指一个二维的像素矩阵,位图就是采用位映像方法显示和存储的图像。
对于彩色图像,它的显示必须从三原色RGB概念说起。
众所周知,自然界中的所有颜色都可以由红、绿、蓝三原色组合而成。
有的颜色有红色成分多一些,其他成分少一些。
针对含有红色成分的多少,可以人为地分成0~255共256个等级。
0级表示不含红色部分,255级表示含有100%的红色成分。
同样,绿色和蓝色也可以被分成256级。
这样根据红、绿、蓝各种不同的组合可以表示出256*256*256(约1600万)种颜色。
[4]
2.调色板
如果一幅图像的每个像素都用其RGB分量来表示,那么图像文件将变的非常大,实际上的做法不完全是这样,下面举一个例子:
对一副200*200的16色图像,它共有40000个像素,如果没一个像素都用R、G、B3个分量表示,则一个像素需要3个字节(因为每个分量有256个级别,要用8位,即1个字节来表示,所以3个分量需要用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。
[2]
2.
1.3.1
2.3.1
3.2.1灰度图像和彩色图像
1.灰度图像
灰度图(Grayscale)是指含亮度信息不含彩色信息的图像,是数字图像的基本形式,灰度图像可有由黑白照片数字化得到,或从彩色图像进行去色处理得到。
灰度图像只表达图像的亮度信息而没有颜色信息,因此,灰度图像的每个像素点上只包含一个量化的灰度级(即灰度值),用来表示该点的亮度水平,并且通常用1个字节(8个二进制位)来存储灰度值。
如果灰度值用1个字节表示,则可以表示的正整数范围是0到255,也就是说,像素灰度值取值在0到255之间,灰度技术为256级。
注意到人眼对灰度的分辨能力通常在20到60级,因此,灰度值存储以字节为单位即保证了人眼的分辨能力,又符合计算机数据寻址的习惯。
在特殊应用中,可能要采用更高的灰度级数,例如CT图像的灰度级数高达数千,需要采用12位或16位二进制位来存储,但这类图像通常都采用专用的显示设备和软件来进行显示和处理。
[7]
2.彩色图像
彩色图像的数据不仅包含亮度信息,还包含颜色信息。
彩色的表示方法是多样化的,最常见的是三基色模型,例如RGB三基色模型,利用RGB三基色可以混合成任意颜色。
因此RGB模型在各种彩色成像设备和彩色显示设备中使用,常规的彩色图像也都是用RGB三基色来表示的,每个像素包括RGB三基色数据,每个基色用1个字节(8位二进制位)表示,则每个像素的数据为3个字节(即24位二进制位),这就是人们常说的24位真彩色。
3.3位图
1.GDI位图
GDI是图形设备接口(GraphicsDeviceInterface)的缩写。
GDI位图是一种GDI对象,在Microsoft基本类(MFC)库中Cbitmap类来表示。
在Cbitmap类对象中,包含一种和Windows的GDI模块有关的Windows数据结构,该数据结构是与设备相关的。
应用程序可以得到GDI位图数据的一个备份,但是其中位图的安排则完全依赖于显示设备。
我们可以将GDI位图数据在同一台计算机内的不同应用程序间任意传递,但是由于其对设备的依赖性,在不同类型计算机间的传递是没有任何意义的。
Cbitmap类封装了WindowsGDI位图,同时提供了一些位图的成员函数。
在使用CBitmap对象时,首先要创建一个Cbitmap对象,然后把它选进设备环境中,再调用其成员函数进行处理,使用完毕后,把它从设备环境中选出并删除。
2.设备无关位图(DIB)
DIB是设备无关位图(Device-IndependentBitmap)的缩写,它自带颜色信息,因此调色板管理非常容易。
DIB也使打印时的灰度阴影的控制更加容易。
任何运行Windows操作系统的计算机都可以处理DIB,它通常以BMP文件的形式被保存在磁盘中或者作为资源保存在EXE文件和DLL文件中。
(1)BMP图像的DIB结构
DIB是标准的Windows位图格式,BMP文件中包含了一个DIB。
一个BMP文件大体上分成如下4个部分:
BITMAPFILEHEADERbType=”MB”
位图文件头bfSize
(只用于BMP文件)btReserved1
btReserved2
bfOffBits
BITMAPINFOHEADERbiSize
位图信息头biWidth
biHeight
biPlanes
biBitCount
biCompression
biSizeImage
biXPelsPerMeter
biYPelsPerMeter
biClrUsed
biClrImportant
Polette单色DIB有2个表项
调色板16色DIB有16个表项或更少
256色DIB诱256个表项或更少
真彩色DIB没有调色板
每个表项长度为4字节(32位)
DIBPixels像素按照每行每列的顺序排列
DIB图像数据每一行的字节数必须是4的整倍数
第1部分为位图文件头BITMAPFILEHEADER,它是一个结构,其定义如下:
typedefstructtagBITMAPFILEHEADER{
WORDbfType;
DWORDbfSize;
WORDbfReserved1;
WORDbfReserved2;
DWORDbfoffBits;
}BITMAPFILEHEADER,FAR*LPBITMAPFILEHEADER,*PBITMAPFILEHEADER;
该结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数),各个域的说明如下:
bfType:
指定文件类型,必须是0x4D42,即字符串“MB”,也就是说所有的“.bmp”文件的头两个字节都是“MB”。
bfSize:
指定文件大小,包括14个字节。
bfReserved1,bfReserved2:
为保留字,不用考虑。
bfOffBits:
为从文件头到实际的位图数据的偏移字节数。
第2部分为位图信息头BITMAPINFOHEADER,它也是一个结构,其定义如下:
typedefstructtagBITMAPINFOHEADER{
DWORDbiSize;
LONGbiWidth;
LONGbiHeight;
WORDbiPlanes;
WORDbiBitConut;
DWORDbiCompression;
DWORDbiSizeImage;
LONGbiXPelsPerMeter;
LONGbiYPelsPerMeter;
DWORDbiClrUsed;
DWORDbiClrImportant;
}BITMAPINFOHEADER,FAR*LPBITMAPINFOHEADER,*PBITMAPINFOHEADER
这个结构的长度也是固定的,为40个字节(WORD为无符号16位整数,DWORD为无符号32位整数,LONG为32
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MFC 图像 边缘 检测 提取 算法 仿真 doc