搜档网
当前位置:搜档网 › 毕业论文

毕业论文

前言

1. 图像增强及其分类

由于各种外界因素的影响,如光照,传感器分辨率等,使获得的原始图像不同程度地存在边缘模糊,局部或整体的对比度不足等问题。图像增强作为图像处理常用的技术,可以消除原始图像边缘模糊,对比度差等缺点,从而增强图像的视觉效果。

目前常用的增强技术根据其处理的方法,可分为空间域法和频率域法。空间域法主要是在空间域中对图像像素灰度值直接进行处理运算。例如:将包含某点的一个小区域内的各点灰度值进行平均运算,用所得的平均值来代替该点的灰度值,这就是通常所说的平滑处理。空间域法的图像增强技术可以用下式来描述:

g(x,y)=f(x,y)*h(x,y) (0-1)其中f(x,y)是处理前的图像:g(x,y)表示处理后的图像;h(x,y)为空间运算函数。

图像增强的频率域法就是在图像的某种变换域中(通常是频率域中)对图像的变换值进行某种运算处理,然后变换回空间域。例如:可以先对图像进行傅立叶变换,再对图像的频谱进行某种修正(如滤波等),最后再将修正后的图像进行傅立叶反变换回空间域中,从而增强该图像。

图像增强技术作为一大类基本的图像处理技术,其目的是对图像进行加工,以得到对具体应用来说视觉效果更“好”,更“有用”的图像。由于具体应用的目的和要求不同,因而这里“好”和“有用”的含义也不同,并且所需要的具体增强技术也可以大不相同,从根本上说,并没有图像增强的通用标准,观察者是某种增强技术优势优劣的最终判断者,所以主观评价是图像增强中主要评价方法。

2. 图像增强的研究现状

对于某个特定的应用,我们通常根据增强处理需要达到的目标选择合适的增强算法,但总体上,图像增强问题可以归纳为以下3个方面:

(1)消除脉冲噪声。

(2)非脉冲噪声的平滑。

(3)边缘增强和明显的结构信息的保护

噪声滤波和边缘增强常常是相互冲突的处理,噪声的平滑会破坏边缘细节,而边缘锐化会增强噪声。

传统的图像增强算法在确定变换或转移函数时常是基于整个图像的统计量,如:ST 变换,直方图均衡,中值滤波器,微分锐化滤波器,高通滤波器等等。这样,对应与某些局部区域的细节在计算整幅图的变换时其影响因为其值较小而常常被忽略掉,从而局部区域的增强效果常常不够理想,噪声滤波和边缘增强这两者的矛盾较难得到解决。

近年来,许多新的增强算法都充分利用了周围领域这一非常重要的信息,形成了局部处理的灰度调整算法,研究的热点主要集中在3大类增强算法。

(a)即能平滑噪声又能保护边缘的自适应滤波器。自适应滤波的基本思想是滤波器的参数可根据像素所在的邻域的情况而自适应选取。自适应滤波常可被描述为加劝平均滤波器。

(0-2)其中w。是X,相应的权值,N是窗口中像素的数量w。的选取常常决定了算法的性能。

在提高算法的抗噪声能力方面,文献[4]-[5]介绍了几种权值的计算方法。这些方法可以较好的平滑噪声区域,并能保持较显著的边缘,但对图像细节的保护较差。在提高算法的细节保护能力方面,Saint-Marc[6]利用梯度来决定权重,建立了以e指数形式的权函数,较好的保护了图像细节,但这种方法对脉冲噪声敏感,而且模型的性能受指数参数K的影响比较大。Li和Chen[7]提出用时变的参数K(t)来解决此问题。另外,文献[8]-[9]还提出了各项异性扩散思想的改进方法,需要求解热传导方程。这些改进算法多数集中在权值的自适应选取上,但由于自适应调整的参数较少,仍然不能很好的解决细节保护和多种噪声的滤波问题。

(b)基于图像建模和估计理论的增强算法。这类方法的基本思想是提出一个图像的模型,如果这个模型的参数由一种鲁棒(robust)估计方法估计出来,则窗口中心点的灰度值可由估计出来的参数计算得到。这类方法中最简单的例子就是中值滤波器。中

值滤波器的突出特点是对脉冲噪声具有较好的抗噪能力,但对类似细线状的细节保护能力较差。在提高算法细节保护能力方面Koivunen[10]引入最小截尾平方估计方法提出了多项式逼近的图像模型,其算法的细节保护能力较好。另外,在提高对非脉冲噪声的抗噪能力方面,Bovik[11]提出了自适应截尾中值滤波器来改进标准中值滤波器对高斯噪声的平滑效果,这类算法由于是估计理论为基础,因此所采用的估计方法的鲁棒好坏对算法的性能具有较大的影响。新的算法中选用的估计趋于复杂,使的增强算法整体也较为复杂。

(c)基于模糊集合论的增强滤波器。近年来,模糊集合理论的模式识别和计算机视觉中得到广泛应用,在基于模糊理论的图像处理方法中,我们可以引入人的指导(用语言词汇表达的启发式规则)。这种指导具有高度非线性并且较难由传统数学模型表示,更重要的是,此法允许我们将启发式的规则和传统方法结合,自适应规则的参数易于扩展,从而可以非常灵活的设计滤波器。例如Yang和Toh[12]采用模糊规则改进传统的中值滤波器中滤波窗口尺度的选择,改善了算法对高斯噪声的抗噪性能。Russoti[13]提出的自适应模糊滤波算子可以较好的保护图象细节和滤除高斯噪声,其算法中窗口的大小由邻域一致性程度决定,而这里的邻域一致性又是由一个模糊逻辑规则来得出的,算法的不足之处是对脉冲噪声的滤除效果较差。

另外,还有一些学者将局部信息引入直方图均衡法,例如Pizer[14]的局部直方图均衡方法和Leszczynski[15]的移动直方图均衡法,性能上也取得了一定的改进,但对噪声的增强仍然是这类基于统计的算法的主要问题。

3. 本人所做工作及论文的结构安排

本次毕业设计的主要应用是图像处理技术,图像处理就是对给定的图像进行某些变换,从而得到清晰图像的过程。对含有噪声的图像,要除去噪声、滤去干扰,提高信噪比,对信息微弱的图像要进行灰度变换等增强处理;对已经退化的模糊图像要进行各种复原的处理;对失真的图像要进行几何校正等变换。由此可见,图像处理就是为了达到改善图像的质量,将图像变换成便于人们观察、适于机器识别的目的。

本论文主要采用的图像增强技术有如下几种:图像的平滑、中值滤波、图像的锐化、伪彩色编码。对于含有噪声的图像,我采用的是用图像的平滑去消除,在空间域内可以

用平均来减少噪声;在频率域内,由于噪声在频谱通常多在高频段,因此可以采用各种形式的低通滤波的办法减少噪声。中值滤波在一定的条件下可以克服线形滤波如最小均方滤波,均值滤波等带来的图像细节模糊,而且对滤波脉冲干扰及图像扫描噪声最为有效。图像的锐化处理的目的是使用模糊的图像变得更加清晰起来。通常针对引起图像模糊的原因而进行相应地锐化操作属于复原的内容,在这里只是介绍一般的去模糊算法。因为人眼对于灰度微弱的递变的敏感程度要远远小于对彩色的敏感程度,因此,将一幅灰度图按照特定的伪彩色编码表进行彩色变换,这样就可以看到图像更加精细的结构。

论文第一部分简要介绍了本设计的开发环境。第二部分介绍了图像增强技术的概念,分类及研究进展,提出本设计图像增强的主要3种方法。第三部分到第六部分则详细介绍了本设计所使用的4种图像增强的方法。第七部分介绍了软件实现的界面。最后给出了本论文的总结。软件设计的思想是:首先设计一个菜单,使其能对BMP图片加载。然后分别设计功能类,例如图像平滑,中值滤波等这些功能类。然后通过编译连接,得出最后想要的结果。

1 开发环境介绍

1.1 Visual C++

Visual C++作为一种程序设计语言,它同时也是一个集成开发工具,提供了软件代码自动生成的和可视化的资源编辑功能。在使用visual c++开发应用程序的过程中,系统为我们生成了大量的各种类型的文件,在本节将要详细介绍visual c++中这些不同的文件分别起到什么样的作用,在此基础上对visual c++如何管理应用程序所用到的各种文件有一个全面的认识。

首先要介绍的是扩展名为.dsw的文件类型,这种类型的文件在vc中级别是最高的,称为Workspace文件,在vc中,应用程序是以Project的形式存在的,Project文件以.dsp 为扩展名,在Workspace文件中可以包含多个Project,由Workspace文件对它们进行统一的协调和管理。

与dsw类型的Workspace文件相配合的一个重要的文件类型是一.opt为扩展名的文件,这个文件中包含的是在Workspace文件中要用到的本地计算机的有关配置信息,所以这个文件不能在不同的计算机上共享,当我们打开一个Workspace文件时,如果系统找不到需要的.opt类型文件,就会自动地创建一个与之配合的包含本地计算机信息的opt 文件。

上面提到Project文件的扩展名是dsp,这个文件中存放的是一个特定的工程,也就是特定的应用程序的有关信息,每个工程都对应有一个dsp类型的文件。

以clw为扩展名的文件是用来存放应用程序中用到的类和资源的信息的,这些信息是VC中ClassWizard工具管理和使用类的信息来源。

对应每个应用程序有一个readme.txt文件,这个文件中列出了应用程序中用到的所有的文件的信息,打开并查看其中的内容就可以对应用程序的文件结构有一个基本的认识。

在应用程序中大量应用的是以h和cpp为扩展名的文件,以h为扩展名的文件称为头文件。以cpp为扩展名的文件称为实现文件,一般说来h为扩展名的文件与cpp为扩展名的文件是一一对应配合使用的,在h为扩展名的文件中包含的主要是类的定义,而

在cpp为扩展名的文件中包含的主要是类成员函数的实现代码。

在应用程序中经常要使用一些位图、菜单之类的资源,VC中以rc为扩展名的文件称为资源文件,其中包含了应用程序中用到的所有的windows资源,要指出的一点是rc文件可以直接在VC集成环境中以可视化的方法进行编辑和修改。

最后要介绍的是以rc2为扩展名的文件,它是资源文件,但这个文件中的资源不能在VC的集成环境下直接进行编辑和修改,而是由我们自己根据需要手工的编辑这个文件。

对于以ico,bmp等为扩展名的文件是具体的资源,产生这种资源的途径很多。使用rc资源文件的目的就是为了对程序中用到的大量的资源进行统一的管理。

Visual C++的资源编辑器能已所见即所得(What you see is what you get)的形式直接编辑程序用户界面,为所有资源分配ID标志号。ClassWizard能把对话框模板与生成类定义或与已有的类代码连接起来,为菜单项、控制等资源生成空的处理函数模板,创建消息影射条目,并将资源ID与处理函数连接起来。通过使用AppWizard,程序员的编辑工作便简化为用户资源编辑器直观地设计界面,完善对话框类代码,在空的处理函数模板处填写响应用户操作的代码,这是一种完善的可视化编程方法。

用Visual C++进行可视化编程的基本流程如下:

(a)生成框架:运行AppWizard,并按照需要指定生成应用程序的选项,指定框架中视类的基类(Cview、CeditView、CformView、CscrollView、CtreeView等)。AppWizard将按指定的选项生成应用程序框架和相关的文件,包含项目(project)的工作空(workspace)文件和源文件,主要是应用程序(application)、文档(document)、视窗(view)和主框架(main frame)的C++代码文件(*.cpp,*.h),以及缺省包含标准界面接口的资源文件(*. rc)。

(b)设计用户界面:利用Visual C++资源编辑器可视化地直接编辑资源文件,定制菜单、对话框、工具条、字符串、加速键、位图、光标等接口资源。

(c)连接界面和代码:利用ClassWizard把资源文件中定义的界面资源标志(如菜单项、工具条和对话框中的控制等)在指定的源文件中映射成相应的函数模板。

(d)编写、修改函数代码:利用ClassWizard可以很方便的在源代码编辑器(source code editor)中跳转到指定的函数代码处。

(e)根据需要创建新类和编写代码:利用ClassWizard创建新类,并生成相应的源文件,如新类是对话框类,可先用资源编辑器生成对话框模板,然后用ClassWizard创建对话框类代码,并与模板连接,编写新类相关的源代码。

(f)实现文档类:在AppWizard生成的框架基础上设计文档数据的数据结构,在文档类中增加相应的成员数据、成员函数,实现对数据的操作和文档与数据的接口。

(g)实现框架中的标准的文件操作命令,即Open、Save和Save as命令:框架已完成标准的文件操作命令的所有接口,程序员要做的仅仅是编写文档类的串行化(Serialize())员函数。

(h)实现视类:框架已构造好了文档与视图的关系,视能方便的访问文档中的public 数据成员。可根据文档的需要构造一个或多个视类,通过ClassWizard把视的用户接口资源映射成函数模板,并编写函数代码。

(i)如需要,增加分割窗口(splitter window):在SDI的主窗口类或MDI的子窗口类中添加一个Csplitter Wnd对象,在窗口类的ONCreateClient成员函数中对CsplitterWnd对象进行创建和初始化。如果用户分割了一个窗口,框架将给文档创建并增加附加的视对象。

(j)建立、调试、修改应用程序。

(k)测试应用程序。

(l)结束。

1.2 MFC特点

如果你曾经使用过传统的windows编程方法开发应用程序,你会深刻的体会到,即使是开发一个简单的windows应用程序也需要对windows的编程原理有很深刻的认识,同时也要手工编写很多的代码。因为程序的出错率几乎是随着代码长度的增加呈几何级数增长的,这就使得调试程序变得很困难。所以传统的windows编程是需要极大的耐心和丰富的编程经验的。

近几年来,面向对象技术无论是理论还是实践上都是在飞速地发展。面向对象技术中最重要的就是“对象”的概念,它把现实世界中的气球、自行车等客观实体抽象成程序中的“对象”。这种“对象”具有一定的属性和方法,这里的属性指对象本身的各种

特性参数。如气球的体积,自行车的重量等,而方法是指对象本身所能执行的功能,如气球能飞,自行车能滚动等。一个具体的对象可以有许多的属性和方法,面向对象技术的重要特点就是对象的封装性,对于外界而言,并不需要知道对象有哪些属性,也不需要知道对象本身的方法是如何实现的,而只需要调用对象所提供的方法来完成特定的功能。从这里我们可以看出,当把面向对象技术应用到程序设计中时,程序员只是在编写对象方法时才需要关心对象本身的细节问题,大部分的时间是放在对对象的方法的调用上,组织这些对象进行协同工作。

MFC的英文全称是Microsoft Fundation Classes,即微软的基本类库,MFC的本质就是一个包含了许多微软公司已经定义好的对象的类库,我们知道,虽然我们要编写的程序在功能上是千差万别的,但从本质上来讲,都可以归为用户界面的设计,对文件的操作,多媒体的使用,数据库的访问等等一些最主要的方面。这一点正是微软提供MFC类库最重要的原因,在这个类库中包含了一百多个程序开发过程中最常用到的对象。在进行程序设计的时候,如果类库中的某个对象能完成所需要的功能,这时我们只是简单地调用已有对象的方法就可以了。我们还可以利用面向对象技术中很重要的“继承”方法从类库中的已有对象派生出我们自己的对象,这时派生出来的对象除了具有类库中的对象的特性和功能之外,还可以由我们自己根据需要加上所需要的特性和方法,产生一个更专门的,功能更为强大的对象。当然,你也可以在程序中创建全新的对象,并根据需要不断完善对象的功能。

正是由于MFC编程方法充分利用了面向对象技术的优点,它使得我们编程时极少需要关心对象方法的实现细节,同时类库中的各种对象的强大功能足以完成我们程序中的绝大部分所需功能,这使得应用程序中程序员所需要编写的代码大为减少,有力的保证了程序的良好的可调试性。

MFC对于Visual C++编程极其重要。这是因为,MFC类库不仅是windows应用程序的基础,还提供用于派生类的基类。MFC基本类库的结构体现了类的派生和继承,通过这些派生类,用户可以添加自己的新的数据和成员函数,以实现所需的功能。MFC类库按照派生的顺序可以归纳为:

(1)根类

(2)应用程序体系结构类

1)命令发送类

2)窗口应用程序类

3)文档/视图类

4)线程支持类

(3)可视对象类

1)窗口类

2)视图类

3)菜单类

4)对话框类

5)控件类

6)控件条类

7)绘画对象类

8)设备对象类

(4)数据类型类

(5)通用类

1)文件输入/输出类

2)模板集合类

3)异常类

4)调试支持类

(6)ODBC数据库类(7)OLE数据库类

1)OLE容器类

2)OLE服务类

3)ActiveX控件类(8)Internet类

1)ISAPI类

2)Windows Socket类

3)Win32 Internet类

上述的类都是MFC类库的一部分,也是使用频率比较高的类库,对于初学者来说,只要掌握这些就足够了。

最后要指出的是MFC类库提供的对象的各种属性和方法都是经过谨慎的编写和严格的测试,可靠性很高,这就保证了使用MFC类库不会影响程序的可靠性和正确性。

2 数字图像处理基础

2.1 Windows位图

如今Windows(98以及NT,Windows XP)系列已经成为决大多数用户使用的操作系统。它比DOS成功的一个重要因素是它可视化的漂亮界面,例如你可以在桌面上铺上你喜欢的墙纸。那么Windows是如何显示图像的呢?这就要谈到位图(Bitmap)。

我们知道,普通的显示器屏幕是由许许多多的点构成的,我们称之为像素。显示时采用扫描的方法:电子枪每次从左到右扫描一行,为每个像素着色,然后从上到下这样扫描若干行,就扫过了一屏。为了防止闪烁,每秒要重复上述过程几十次。例如我们所说的屏幕分辨率为1024*768,刷新频率为85Hz,意思是说每行要扫描1024个像素,一共有768行,每秒重复扫描屏幕85次。我们称这种显示器为位映像设备。所谓位映像,就是指一个二维的像素矩阵,而位图就是采用位映像方法显示和存储的图像。

那么,彩色图是怎么回事呢?

我们先来说说三元色RGB概念。我们知道,自然界中的所有颜色都可以由红,绿,蓝(R,G,B)组合而成。有的颜色含有红色成分多一些,如深红;有的含有红色成分少一些,如淡红。针对含有红色成分的多少,可以分成0到255共256个等级,0级表示不含红色成分,255级表示含有100%的红色成分。同样,绿色和蓝色也被分成256级。这种分级的概念被称作量化。这样,根据红,绿,蓝各种不同的组合我们就能表示出256*256*256,约1千6百万种颜色。这么多颜色对于我们人眼来已经足够了。

表2-1 常见颜色的RGB组合

颜色红色成分绿色成分蓝色成分

黑色0 0 0

白色255 255 255

红色255 0 0

绿色0 255 0

蓝色0 0 255

青色0 255 255

紫色255 0 255

黄色255 255 0

灰色128 128 128

橄榄色128 128 0

深青色0 128 128

银色192 192 192

当一幅图中每个像素被赋予不同的RGB值时,就能呈现出五彩缤纷的颜色了,这就形成了彩色图像。

2.2 调色板

你大概已经明白了,当一幅图中每个像素赋予不同的RGB值时,就能呈现出五彩缤纷的颜色了,这样就形成了彩色图。对,是这样的,但实际上的做法还有些差别。

让我们来看看下面的例子。

有一个长宽各为200个像素,颜色数为16色的彩色图,每一个像素都用R,G,B 三个分量表示,因为每个分量有256个级别,要用8位(bit),即一个字节(byte)来表示,所以每个像素需要用3个字节。整个图像要用200*200*3,约120k字节,可不是一个小数目呀!如果我们用下面的方法,就能省的多。

因为是一个16色图,也就是说这幅图中最多只有16种颜色,我们可以用一个表:表中的每一行记录一种颜色的R,G,B值。这样当我们表示一个像素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第0行为255,0,0(红色),那么当某个像素为红色时,只需要标明0即可。

让我们再来计算一下:16种状态可以用4位(bit)表示,所以一个像素要用半个字节。整个图像要用200*200*0.5,约20k字节,再加上表占用的字节为3*16=48字节.整个占用的字节数约为前面的1/6,省很多吧。

这张RGB的表,即是我们常说的调色板(Palette),另一种叫法是颜色查找表

LUT(LookUpTable),似乎更确切一些。Windows位图中便用到了调色板技术.其实是不光是Windows位图,许多图像文件格式如pcx,tif,gif等都用到了。所以很好地掌握调色板的概念是十分重要的.

有一种图,它的颜色数高达256*256*256种,也就是说包含我们上述提到的R,G,B颜色表示方法中所有的颜色,这种图叫做真彩色图(TrueColor)。真彩色图并不是说一幅图包含了所有的颜色,而是说它具有显示所有颜色的能力,即最多可以包含所有的颜色。表示真彩色图时,每个像素直接用R,G,B三个分量字节表示,而不采用调色板技术,原因很明显:如果用调色板,表示一个像素也要用24位,这是因为每种颜色的索引要用24位(因为总共有2的24次方种颜色,即调色板有2的24次方行),和直接用R,G,B三个分量表示用的字节数一样,不但没有任何便宜,还要加上一个

256*256*256*3个字节的大调色板。所以真彩色图直接用R,G,B三个分量表示,它又叫做24位色图。

2.3 色彩系统

2.3.1 CMY色彩系统

CMY(Cyan、Magenta、Yellow)色彩系统也是一种常用的表示颜色方式。计算机屏幕的显示通常用RGB色彩系统,它是通过颜色的相加来产生其他颜色,这种做法通常称为加色合成法(Additive Color Synthesis)。而在打印工业上则通常用CMY色彩系统(一般所称的四色印刷CMYK则是加上黑色),它是通过颜色相减来产生其他颜色的,所以我们称这种方式为减色合成法(Subractive Color Synthesis)。

2.3.2 YIQ色彩系统

YIQ色彩系统通常被北美的电视系统所采用(属于NTSC系统),这里Y不是指黄色,而是指颜色的明视度(Luminance),即亮度(Brightness)。其实Y就是图像的灰度值(Gray value),而I和Q则是指色调(Chrominance),即描述图像色彩及饱和度的属性。RGB与YIQ之间的对应关系如下:

(2-1)

(2-2)

2.3.3 YUV色彩系统

YUV色彩系统被欧洲的电视系统所采用(属于PAL系统),其中Y和上面的YIQ 色彩系统中的Y相同,都是指明视度。U和V虽然也是指色调,但是和I与Q的表达方式不完全相同。RGB与YUV之间的对应关系如下:

(2-3)

(2-4)2.3.4 YCbCr色彩系统

YCbCr色彩系统也是一种常见的色彩系统,JPEG采用的色彩系统正是该系统。它是从YUV色彩系统衍生出来的(因此通常还有人称JPEG采用的色彩系统是YUV系统,其实是错误的)。其中Y还是指明视度,而Cb和Cr则是将U和V做少量调整而得到的。RGB色彩系统和YCbCr色彩系统之间的对应关系如下:

(2-5)

(2-6)2.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)是全白色,中间的是灰色。这样灰度图就可以用256色图来表示了。对于R=G=B的色彩,YIQ或YUV色彩系统转换公式可以看到其颜色分量都是0,即没有色彩信息

灰度图使用比较方便。首先RGB的值都一样。其次,图像数据即调色板索引值,也就是实际的RGB的亮度值;另外因为是256色的调色板,所以图像数据中一个字节代表一个像素。如果是彩色的256色图,图像处理后有可能会产生不属于这256种颜色的新颜色,所以,图像处理一般采用灰度图。

3 图像的平滑

图像的平滑是一种实用的数字图像处理技术,主要目的是为了减少图像的噪声。一般情况下,在空间域内可以用领域平均来减少噪声:在频率域,由于噪声频谱通常多在高频段,因此可以采用各种形式的低通滤波的办法来减少噪声。

在介绍图像平滑之前,首先介绍一下模板操作。

3.1 模板操作

模板操作是数字图像处理中经常用到的一种运算方式,图像的平滑、锐化以及后面将要介绍的细化、边缘检测都要用到模板操作。例如:有一种常见的平滑算法是将原图中一个像素的灰度值和它周围邻近八个像素的灰度值相加,然后将求得的平均值(除以9)作为新图中该像素的灰度值。我们用如下方法来表示该操作:

(3-1)上式有点类似于矩阵,我们通常称之为模板(Template)。中间的黑点表示为中心元素,即该个元素是要进行处理的元素。如果模板是:

(3-2)则该操作应该描述为:将原图中一个像素的灰度值和它的右下邻近的8个像素的灰度值相加,然后将求得的平均值(除以9)作为新图中该像素的灰度值。

如果模板为,则表示将自身灰度值的2倍加下边的元素灰度值作为新值,而则表示将自身灰度值加上元素灰度值的2倍作为新灰度值。

通常模板不允许移出边界,所以处理后的新图像会比原图小。例如:当模板是,

原图灰度矩阵是时,经过模板操作后的图像为,“—”表示边界上无法进行模板操作的点,一般的做法是复制原图的灰度值,不再进行任何其他处理。

模板操作实现了一种邻域运算(Neighborhood Operation),即某个像素点的结果不仅和本像素灰度有关,而且和其邻域点的值有关。模板运算在数学中的描述是卷积(或互相关)运算。

模板运算在图像处理中经常要用到,但是当图像很大时,运算量是相当可观的,也

非常耗时。以模板运算为例,每个像素完成一次模板操作要用9次乘法,8

次加法和1次除法。对于一幅N x N(宽度x高度)的图像,就是次乘法,

次加法和次除法操作,算法复杂度为,这对于大图像来说,是非常可怕的。所以,常用的模板并不大,如3*3,4*4。有很多专用的图像处理系统,用硬件来完成模板运算,大大提高了速度。

另外,可以设法讲2维模板运算转成为1维模板运算,这对速度的提高也是有益的。例如:(2)式可以分解为一个水平模板和一个竖直模板。即:

(3-3)这样,改进后将要进行6(N-2)(N-1)次乘法,4(N-2)(N-1)次加法,次除法操作,减少了不少次乘法和加法运算。

下面我们来举例验证一下该分解算法的可行性,设图象为,直接经过模板

处理后变为,但是如果采用分解后的模板来处理,结果为:

(3-4)可以发现两中计算方法得出的结果是完全相同的。

3.2 图像平滑理论基础

平滑图像的思想是通过一点和周围几个点的运算(通常为平均运算)来去除突然变化的点,从而滤掉一定的噪声,但图像有一定程度的模糊。而减少图像摸木代价是图像平滑研究的主要问题之一。这主要取决于噪声本身的特性。一般情况下通过选择不同的模板来消除不同的噪声。常用模板有:

(3-5)其中最后一个模板称为高斯模板,它是通过采样2维高斯函数得到的。

3.3 图像平滑设计思想流程图

设计操作模板函数

获取图像灰度值

进行模板运算

处理后的像素点替换原像素点

实现图像平滑

图3-1 图像平滑设计思想流程图

3.4 模板操作函数

下面我们来编写一个通用的图像模板操作函数。首先分析一下该函数需要的参数,显然我们必须得到要处理图像的信息,即指向图像像素的指针以及图像的高宽信息;其次必须指定要进行变换模板的信息,包括模板大小信息、模板系数信息、模板元素数组、模板中心元素的位置信息。该函数的原型如下所示。具体实现代码请查附录。

*************************************************************************

** 函数名称:

* Template()

** 参数:

* LPSTR lpDIBBits - 指向源DIB图像指针

* LONG lWidth - 源图像宽度(象素数)

* LONG lHeight - 源图像高度(象素数)

* int iTempH - 模板的高度

* int iTempW - 模板的宽度

* int iTempMX - 模板的中心元素X坐标( < iTempW - 1)

* int iTempMY - 模板的中心元素Y坐标( < iTempH - 1)

* FLOAT * fpArray - 指向模板数组的指针

* FLOAT fCoef - 模板系数

** 返回值:

* BOOL - 成功返回TRUE,否则返回FALSE。

** 说明:

* 该函数用指定的模板(任意大小)来对图像进行操作,参数iTempH指定模板

* 的高度,参数iTempW指定模板的宽度,参数iTempMX和iTempMY指定模板的中心

* 元素坐标,参数fpArray指定模板元素,fCoef指定系数。

*************************************************************************/

相关主题