基于VC++的数字图像处理软件的开发.docx
《基于VC++的数字图像处理软件的开发.docx》由会员分享,可在线阅读,更多相关《基于VC++的数字图像处理软件的开发.docx(14页珍藏版)》请在冰豆网上搜索。
基于VC++的数字图像处理软件的开发
基于VC++的数字图像处理软件的开发
摘要:
随着科学技术的飞速发展,计算机使用领域的不断开拓,一种全新的图像处理方法——数字图像处理技术应运而生,即利用计算机设备将图像转变成数字信息来进行保存、处理、传输和显示。
目前,数字图像处理技术被广泛使用在众多的领域,而且其处理精度比较高,所以,开发一个好的数字图像处理软件至关重要。
本文设计了一个基于VC++的数字图像处理系统,系统中包括图像处理技术的各个方面,涵盖了数字图像处理领域的大部分算法,并对相应的算法进行了实现。
本系统具有很强的可移植性和扩展性。
本文以BMP文件的读写为切入点,相继介绍了图像处理领域的大部分算法:
图像几何变换、正交变换、图像增强、边缘检测,并详细论述了各个算法的实现过程,对主要算法的实际使用效果进行了分析。
实验结果表明系统能够满足图像处理的基本要求,而且还可以针对不同的处理目的,灵活地对图像处理算法进行改进,从而选择出最优处理算法,达到期望的处理效果。
为了方便用户观察处理结果,更好的理解算法,本文设计了一个友好的图形用户界面,此界面操作简单,使用方便,为数字图像处理处理算法的研究人员提供了一个很好的图像处理平台。
关键词:
数字图像处理,VC++,BMP
一、前言
图像是人类获取信息、表达信息和传递信息的重要手段。
人出生以后第一次睁开眼睛,首先接收的就是各种各样的图像信息,因此有人说,图像和生俱来是人类生活中最直观、最丰富和最生动的信息表示形式。
国外学者曾做过统计,人们从外界所获取的信息有70%以上来自于视觉摄取的图像,和文字或者语言信息相比,图像包含的信息量更大,具有更广泛的适用性和更高的使用效率。
在当今科学技术迅速发展的时代,人们越来越多的利用图像信息来认识和判断事物,解决实际问题。
既然图像处理如此重要,那么开发一个好的数字图像处理软件也是十分必要的。
MATLAB软件虽然能够对数字图像进行方便的处理,并且其制作的界面也比较友好,但是由于其过于庞大,移植性和速度方面也很难和VC++相比。
另外,由于商业化的VC++数字图像处理软件价格比较昂贵,而且不便于二次开发,所以自己利用VC++集成开发环境开发一套简单的数字图像处理软件系统,本系统界面友好,不但能对现代光学测量中散斑和条纹图像进行良好的处理,而且还能够满足一些简单的数字图像处理的需求,为以后的学习和研究奠定了基础。
二、软件界面设计
用户界面是指用户和计算机之间进行交互通信联系的平台,并出现了多种形式的人机交互方式,从早期计算机使用的命令行的交互方式到以图形界面(GUI)为主的交互形式。
GUI的广泛使用极大的方便了非专业用户的使用,人们不再需要死记硬背大量的命令,取而代之的是可用通过窗口、菜单、按钮等方式来方便的进行操作。
图形界面给用户带来了操作和控制的方便和灵活性,所以它在人机交互方式中占主导地位。
考虑到图像处理操作的简单方便,本系统采用多重文档界面(MDI),它的特点是允许多个框架窗口存在,每次能创建和拥有多个文档对象,也允许打开多个文档。
根据Windows的界面标准和本软件的功能设计,软件的主菜单中包括文件、编辑、查看、窗口、几何变换、点运算、图像增强、形态学变换、边缘和轮廓、帮助等菜单项,本系统软件界面如图2-1所示。
每一个主菜单相应的会有几个子菜单,同时,通过对话框操作可实现图像的交互处理。
下面我们以边缘和轮廓处理中的轮廓提取为例,通过主菜单、子菜单、对话框来实现图像的轮廓提取操作。
图2-1软件界面示意图
三、图像处理软件设计
软件本身功能包括五个模块,分别是:
几何变换模块、点运算模块、图像增强模块、形态学变换模块、边缘和轮廓模块。
几何变换模块包括:
图像旋转、图像缩放、图像转置、水平镜像、垂直镜像。
点运算模块包括:
灰度化、灰度直方图。
图像增强模块包括:
图像平滑、梯度锐化、拉普拉斯锐化。
形态学变换模块包括:
腐蚀、膨胀、开运算、闭运算。
边缘和轮廓模块包括:
边缘检测、轮廓提取、轮廓跟踪。
功能结构图如图3-1。
本文将就重要部分进行介绍。
图3-1软件功能结构图
3.1VC++图像格式
3.1.1位图结构
BMP位图文件格式是Windows系统交换图像数据的一种标准图像文件存储格式,在Windows环境下运行的所有图像处理软件都支持这种格式。
Windows3.0以前的BMP位图文件格式和显示设备有关,因此把它称为DDB文件格式,Windows3.0以后的BMP位图格式和显示设备无关,因此把它称为DIB文件格式,目的是为了让Windows能够在任何类型的显示设备上显示BMP位图文件。
一个BMP文件由4个部分组成:
位图文件头、位图信息头、调色板和像素数据。
如图3-2所示。
图3-2BMP图像文件结构示意图
1.BMP文件头
BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。
其定义如下:
typedefstructtagBITMAPFILEHEADER{
WORDbfType
DWORDbfSize
WORDbfReserved1
WORDbfReserved2
DWORDbfOffBits
}BITMAPFILEHEADER;
参数bfType指定位图文件类型的识别代码,例如BMP为BM等,该参数必须为BM。
参数bfSize指定位图文件的大小,以字节为单位。
参数bfReserved1和bfReserved2为保留字,需要将其设为0。
参数bfOffBits指定位图数据的起始位置,以相对于位图文件头的偏移量并以字节为单位来表示。
2.位图信息头
BMP位图信息头包含了单个像素所用字节数以及描述颜色的格式,此外还包括位图的宽度、高度、目标设备的位平面数以及图像的压缩格式。
第二部分为位图信息头BITMAPINFOHEADER,也是一个结构,该结构的定义如下:
typedefstructtagBITMAPINFOHEADER{
DWORDbiSize
LONGbiWidth
LONGbiHeight
WORDbiPlanes
WORDbiBitCount
DWORDbiCompression
DWORDbiSizeImage
LONGbiXPelsPerMeter
LONGbiYPelsPerMeter
DWORDbiClrUsed
DWORDbiClrImportant
}BITMAPINFOHEADER;
参数biSize指定结构的字节数。
参数biWidth和biHeight指定位图的宽度和高度,以像素为单位。
参数biPlanes表示目标设备的级别,必须是1。
参数biBitCount指定每个像素所需的位数,其值必须为1(黑白二色图)、4(16色图)、8(256色)、24(真彩色图)。
参数biCompression指定位图压缩类型,其值必须是0,1或2,其中0为不压缩,1代表BI_RLE8压缩类型,2为BI_RLE4压缩类型。
参数biSizeImage指定实际的位图数据占用的字节数。
3.调色版
调色板实际上定义为是一个数组,用于说明位图中的颜色,它包含biClrUsed个元素,每个元素代表一种颜色,并由一个RGBQUAD类型的结构来表示,RGBQUAD结构的定义如下:
typedefstructtagRGBQUAD{
BYTErgbBlue//该颜色的蓝色分量
BYTErgbGreen//该颜色的绿色分量
BYTErgbRed//该颜色的红色分量
BYTErgbReserved//保留值
}RGBQUAD;
调色板中RGBQUAD结构数据的个数由位图信息头中参数biBitCount来确定。
4.位图数据
位图数据记录了位图的每一个像素值,记录顺序在扫描行内是从左到右,扫描行之间从上到下,Windows规定一个扫描行所占的字节数必须是4的倍数,不足的以0填充。
位图的一个像素值所占的字节数如下:
当biBitCount=1时,8个像素占一个字节。
当biBitCount=4时,2个像素占一个字节。
当biBitCount=8时,1个像素占一个字节。
当biBitCount=24时,1个像素占3个字节。
3.1.2设备无关位图
Windows系统使用的位图常分为设备相关位图(DDB)和设备无关位图(DIB)两种。
其中DDB依赖于具体的图像输出设备,它只能存在于视频内存或系统内存中,其颜色模式必须和输出设备相一致。
因此我们不会把DDB图像存储成文件,而是更多地使用DIB。
DIB不依赖于具体输出设备,和所有显示设备兼容,因为DIB的颜色模式和设备无关,而且它自带颜色信息。
DIB的设备无关性使得其可以被用来永久地保存图像,因此DIB既可以保存在内存中,也可以以文件形式保存在磁盘上。
DIB通常以BMP为文件扩展名的形式保存在磁盘中的。
3.2几何变换模块
图像几何变换又称为图像空间变换,它是数字图像处理的重要内容之一。
通过几何变换,可以根据使用的需要使原图像产生大小、形状和位置等各方面的变化。
从变换性质来分,几何变换可以分为图像的旋转、缩放、转置、镜像、平移等等。
在这里我们只介绍基本的图像的旋转。
3.2.1图像的旋转
图像的旋转变换是几何变换中研究的重要内容之一。
一般情况下,图像的旋转是指将图像围绕某一指定点旋转一定的角度。
旋转通常也会改变图像的大小,和图像平移一样,可以把转出显示区域的图像截去,也可以改变输出图形的大小以扩展显示范围。
以任意点为中心的图像旋转即是将图像平移和旋转操作相结合,先进行坐标系平移,再以新的坐标原点为中心旋转,然后将新原点平移回原坐标系的原点。
这一过程可分为以3个步骤:
(1)将坐标系Ⅰ变成Ⅱ。
(2)将该点顺时针旋转θ角。
(3)将坐标系Ⅱ变回Ⅰ。
下面我们以围绕图像中心的旋转为例,具体说明上述的变换过程。
坐标系Ⅰ以图像左上角点为坐标原点,向右为x轴正方向,向下为y轴正方向;而坐标系Ⅱ是以图像的中心为原点,向右为x轴正方向,向上为y轴正方向。
如图3-3所示。
图3-3图像旋转示意图
本软件进行图像旋转功能如图3-4:
图3-4图像旋转
3.3点运算模块
点运算模块包括图片的灰度化、灰度直方图功能。
这里只介绍灰度直方图功能。
3.3.1灰度直方图
灰度直方图是数字图像处理中一个最简单、最有用的工具,它描述了一幅图像的灰度级内容。
任何一幅图像的直方图都包含了客观的信息,某些类型的图像还可由其直方图完全描述。
灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数。
横坐标表示像素的灰度级别;纵坐标是该灰度出现的频率(像素的个数)。
本软件对图像的灰度直方图统计效果如图3-5:
图3-5灰度直方图
3.4形态学变换模块
3.4.1腐蚀
把结构元素B平移a后得到Ba,若Ba包含于X,我们记下这个a点,所有满足上述条件的a点组成的集合称做X被B腐蚀的结果。
用公式表示为:
E(X)={a|Ba
X}=X
B,如图3-6所示。
图3-6 腐蚀的示意图
图3-6中X是被处理的对象,B是结构元素。
不难知道,对于任意一个在阴影部分的点a,Ba包含于X,所以X被B腐蚀的结果就是那个阴影部分。
本软件进行腐蚀的效果如下,图3-7为原图,图3-8为腐蚀后的图片
图3-7原图
图3-8腐蚀后的图片
3.4.2膨胀
膨胀可以看做是腐蚀的对偶运算,其定义是:
把结构元素B平移a后得到Ba,若Ba击中X,我们记下这个a点。
所有满足上述条件的a点组成的集合称做X被B膨胀的结果。
用公式表示为: