基于VC++实现图像处理

时间:2022-08-31 03:37:16

摘 要:图像是人类获取和交换信息的主要来源,图像处理已经涉及到人类生活和工作的方方面面,如何实现图像处理的清晰化,是人们关注的焦点。鉴于社会对图像处理程序灵活性、易扩展且有系统版权的要求,本文通过选用VC++作为开发基础平台,介绍图像处理中图像灰度变换、图像的平滑处理、中值滤波等方法的原理,探讨各方法在MFC中的实现。

关键词:MFC 图像处理 GIS CDib

数字图像处理又称计算机图像处理,是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。

一、研究的主要目的

数字图像处理研究的主要内容有:图像变换、图像编码压缩、图像增强和复原、图像分割和图像描述。使用VC++开发程序,通过对数字图像处理函数的代码化表达使开发出的程序能够进行图像变换,提高图像质量,图像特效显示、二值化、灰度变换等操作,从而达到图像的处理的大众化且具有灵活性、易扩展和有系统版权等特点。

二、图像处理与GIS

数字图像处理是GIS研究的重要部分。

地理信息系统(GIS)是以地理空间数据为基础,在计算机软硬件的支持下,对空间相关数据进行采集、管理、操作、模拟、分析和显示,并采用地理模型分析方法,适时提供多种空间和动态的地理信息,为地理研究和地理决策服务而建立起来的计算机技术系统。

VC++能够完成对GIS的开发,实际上,目前,比较流行的一些GIS专业开发工具很多都是用VC++ 开发完成的。应用VC++可以迅速开发出满足要求的GIS系统,并在灵活性、可操作性等方面具有无可比拟的优点。例如:它具有:较强的灵活性、有系统版权和易于扩展成各种系统的优点。但是,它也存在开发困难、开发量大、对开发人员的素质要求高等缺点。

三、进行图像处理的具体原理与方法

1.CDib库的建立。由于DIB位图能独立的保存固有的图像信息,能在不同的系统中重显其图像,因此,成为了Windows环境中的基本图像格式。本文的图像处理也是基于DIB来进行讨论的。

2.图像的显示。图像显示是最基本同时也是最重要的一种图像处理技术。为了使计算机能更好地重现实际图像,就需要采用一定的方法管理。由于采用方法的不同,在本程序中,可以输入的是8位或24位的图像信息。⑴调色板。为了确定每个颜色编号所对应的真实颜色,硬件要参考调色板的颜色值。在调色板系统中,每一幅图像都有自己的调色板,显示时必须将自己的调色板载入系统调色板中,实现调色板,因此,首先要对调色板进行创建。⑵图像的显示。当取到了图像数据首地址,就可以用图像文件自带的颜色表,创建调色板,载入调色板显示图像。⑶图像的特效显示。图像的特效显示就是利用人眼的视觉特性,通过对图像分块,然后以不同的次序显示出来。实现图像的特效显示的基本思想是将图像分成不同的小块,按一定的方向或次序、分阶段地显示或擦除图像块。图像的特效显示效果有:自上而下扫描、自下而上扫描、自左向右扫描、自右向左扫描、水平向右移、垂直向上移、交叉飞入、从左到右展开、从上到下展开、水平栅条、垂直栅条、图像渐显、中间扩张、中间收缩。

3.图像灰度变换。

⑴二值化。二值化处理就是把图像f(x,y)分成目标物体和背景两个领域。二值化是数字图像处理中的一项基本的变换方法,通过非零取一,固定阀值、双固定阀值等不同的阀值化变换方法,使一幅灰度图变化成为黑白二值图像,将我们所需的目标部分从复杂的图像背景中脱离出来,以利于进一步研究。在二值化中实现的算法有非零取一法、固定阀值法和双固定阀值法。

⑵窗口灰度变换处理。当像素中大部分像素的灰度级在[L,U]范围内,少部分像素分布在小于L和大于U的区间内时可将小于L和大于U灰度级的像素强行压缩为0和255。

灰度窗口变换的变换函数表达式如下:

⑶灰度匹配变换。在实际当中,有时需要将直方图变换为某种特定的形状,以对原始图像进行有目的的增强。为了达到这种目的,就需要设计合适的匹配变换函数,来达到不同的均衡效果。

⑷灰度直方图。图像的直方图包含了丰富的图像信息,描述了图像的灰度级内容,反映了图像的灰度分布情况。图像直方图是图像处理中一种十分重要的图像分析工具,具有简单适用的特点。从数学上来说,它统计一幅图像中各个灰度级出现的次数和概率;从图形上来说,它是一个二维图,横坐标表示图像中各个像素点的灰度级,纵坐标为各个灰度级上图像像素点出现的个数或出现概率。灰度直方图描述了一幅图像的概貌,是研究图像灰度分布的手段,是数字图像处理中一个非常有用的工具。

⑸灰度分布均衡化。直方图均衡方法的基本思想是对在图像中象素个数多的灰度级进行展宽,而对象素个数少的灰度级进行缩减,从而达到清晰图像的目的。通过点运算使输入图像转换为在每一灰度级上都有相同的象素点的数目,技术处的图像的直方图是平的。直方图的横坐标是灰度,一般用r表示。纵坐标的灰度值为R的象素个数或出现这个灰度值的概率P(R)。并知:

公式中k为一幅图像对应的灰度级数。

4.图像的平滑处理。众所周知,实际获得的图像在形成、传输、接收和处理的过程中,不可避免地存在着外部干扰和内部干扰。因此,去除噪声,恢复原始图像是图像处理中一个重要内容。消除图像噪声的工作称之为图像平滑或滤波。平滑的目的有两个:改善图像质量和抽出对象特征。

⑴二值图像的黑白点噪声滤波。本程序消去二值图像f(i,j)上的黑白的噪声,当图像f(i,j)周围的8个象素的平均值为a时,若{f(i,j)-a}的绝对值在127.5以上,则对f(i,j)的黑白进行翻转,若不到127.5,则f(i,j)不变。

⑵超限邻域平均法。阈值的邻域平均法以某个灰度值T作为阈值,如果某个像素的灰度大于其邻近像素的平均值,并超过阈值,才使用平均灰度置换这个像素灰度,他的数学表达式 :

5.中值滤波。⑴N*N中值滤波器。本程序计算灰度图像f中以像素f(i,j)为中心的N*N屏蔽窗口内灰度值的中值为u,无条件作f(i,j)=u处理,N由用户给定。⑵ 十字型中值滤波器。本程序计算灰度图像f中以像素f(i,j)为中心的十字形屏蔽窗口(十字型的纵向和横向的长度为N,N=3,5,7…)内灰度值的中值u,无条件作f(i,j)=u处理,N由用户给定。

四、原理代码化实现过程

目前,用MFC设计的应用程序几乎都采用文档/视图结构,这种程序框架与简单程序框架之间的重要区别就在于形成应用程序的主窗口不止需要一个类的对象,而是三个类的对象。即:框架窗口类CFrameWnd对象最为窗口的框架,视图类CView的对象作为贴附在框架窗口上的用户区,二者形成了应用程序的界面,文档类CDocument对象则在幕后专门对数据进行存储和管理。

因此,根据设计需要,需做好以下几方面工作:⑴ 创建新类。⑵重写CWinApp派生类CDSplitApp中的虚函数InitInstance。在这个函数中按需创建和显示窗口;⑶在CDocument的派生类CDSplitDoc中,声明程序所需的数据和对这些数据进行必要操作的接口函数;⑷在CView类的派生类CDynSplitView2中编写处理消息的代码,并调用该类的的成员函数GetDocument来获取文档对象,通过文档对象的接口函数对文档中的数据进行操作;⑸在CView的派生类CDynSplitView2中的OnDraw函数中编写窗口重绘时的代码。

参考文献:

[1]任 哲:《MFC Windows应用程序设计》,清华大学出版社,2004.7。

[2]姚领田:《精通MFC程序设计》,人民邮电出版社,2006.7。

[3]埃克尔(美):《C++编程思想》(第2版),机械工业出版社,2002.9。

魏 威、曹丽新:郑州铁路职业技术学院。

魏 冲:郑州大学。

上一篇:关于民族声乐训练的几个问题 下一篇:温纳瑞斯――一位在中国生活了50年的美军战俘