基于VC++的数字图像处理软件的开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于VC++的数字图像处理软件的开发
摘要:随着科学技术的飞速发展,计算机使用领域的不断开拓,一种全新的图像处理方法——数字图像处理技术应运而生,即利用计算机设备将图像转变成数字信息来进行保存、处理、传输和显示。目前,数字图像处理技术被广泛使用在众多的领域,而且其处理精度比较高,所以,开发一个好的数字图像处理软件至关重要。
本文设计了一个基于VC++的数字图像处理系统,系统中包括图像处理技术的各个方面,涵盖了数字图像处理领域的大部分算法,并对相应的算法进行了实现。本系统具有很强的可移植性和扩展性。
本文以BMP文件的读写为切入点,相继介绍了图像处理领域的大部分算法:图像几何变换、正交变换、图像增强、边缘检测,并详细论述了各个算法的实现过程,对主要算法的实际使用效果进行了分析。实验结果表明系统能够满足图像处理的基本要求,而且还可以针对不同的处理目的,灵活地对图像处理算法进行改进,从而选择出最优处理算法,达到期望的处理效果。为了方便用户观察处理结果,更好的理解算法,本文设计了一个友好的图形用户界面,此界面操作简单,使用方便,为数字图像处理处理算法的研究人员提供了一个很好的图像处理平台。
关键词:数字图像处理,VC++,BMP
一、前言
图像是人类获取信息、表达信息和传递信息的重要手段。人出生以后第一次睁开眼睛,首先接收的就是各种各样的图像信息,因此有人说,图像和生俱来是人类生活中最直观、最丰富和最生动的信息表示形式。国外学者曾做过统计,人们从外界所获取的信息有70%以上来自于视觉摄取的图像,和文字或者语言信息相比,图像包含的信息量更大,具有更广泛的适用性和更高的使用效率。在当今科学技术迅速发展的时代,人们越来越多的利用图像信息来认识和判断事物,解决实际问题。
既然图像处理如此重要,那么开发一个好的数字图像处理软件也是十分必要的。MATLAB软件虽然能够对数字图像进行方便的处理,并且其制作的界面也比较友好,但是由于其过于庞大,移植性和速度方面也很难和VC++相比。另外,由于商业化的VC++数字图像处理软件价格比较昂贵,而且不便于二次开发,所以自己利用VC++集成开发环境开发一套简单的数字图像处理软件系统,本系统界面友好,不但能对现代光学测量中散斑和条纹图像进行良好的处理,而且还能够满足一些简单的数字图像处理的需求,为以后的学习和研究奠定了基础。
二、软件界面设计
用户界面是指用户和计算机之间进行交互通信联系的平台,并出现了多种形式的人机交互方式,从早期计算机使用的命令行的交互方式到以图形界面(GUI)为主的交互形式。GUI的广泛使用极大的方便了非专业用户的使用,人们不再需要死记硬背大量的命令,取而代之的是可用通过窗口、菜单、按钮等方式来方便的进行操作。图形界面给用户带来了操作和控制的方便和灵活性,所以它在人机
交互方式中占主导地位。
考虑到图像处理操作的简单方便,本系统采用多重文档界面(MDI),它的特点是允许多个框架窗口存在,每次能创建和拥有多个文档对象,也允许打开多个文档。根据Windows的界面标准和本软件的功能设计,软件的主菜单中包括文件、编辑、查看、窗口、几何变换、点运算、图像增强、形态学变换、边缘和轮廓、帮助等菜单项,本系统软件界面如图2-1所示。每一个主菜单相应的会有几个子菜单,同时,通过对话框操作可实现图像的交互处理。下面我们以边缘和轮廓处理中的轮廓提取为例,通过主菜单、子菜单、对话框来实现图像的轮廓提取操作。
图2-1软件界面示意图
三、图像处理软件设计
软件本身功能包括五个模块,分别是:几何变换模块、点运算模块、图像增强模块、形态学变换模块、边缘和轮廓模块。几何变换模块包括:图像旋转、图像缩放、图像转置、水平镜像、垂直镜像。点运算模块包括:灰度化、灰度直方图。图像增强模块包括:图像平滑、梯度锐化、拉普拉斯锐化。形态学变换模块包括:腐蚀、膨胀、开运算、闭运算。边缘和轮廓模块包括:边缘检测、轮廓提取、轮廓跟踪。功能结构图如图3-1。本文将就重要部分进行介绍。
几
何
变
换图像旋转
水平镜像
图像转置
图像缩放灰度化
图像平移垂直镜像
点
运算梯度锐化腐蚀膨胀
拉普拉斯锐化
图像平滑
灰度直方图
边缘检测
闭运算
开运算
Gauss-Laplace 算子轮廓跟踪
轮廓提取Sobel 算子
点
运
算点
运
算图
像
增
强图3-1 软件功能结构图
3.1 VC++图像格式
3.1.1位图结构
BMP 位图文件格式是Windows 系统交换图像数据的一种标准图像文件存储格式,在Windows 环境下运行的所有图像处理软件都支持这种格式。Windows 3.0以前的BMP 位图文件格式和显示设备有关,因此把它称为DDB 文件格式,Windows 3.0以后的 BMP 位图格式和显示设备无关,因此把它称为DIB 文件格式,目的是为了让Windows 能够在任何类型的显示设备上显示BMP 位图文件。一个BMP 文件由4个部分组成:位图文件头、位图信息头、调色板和像素数据。如图3-2 所示。
图3-2 BMP 图像文件结构示意图
1. BMP 文件头
BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。其定义如下:
typedef struct tagBITMAPFILEHEADER{
WORD bfType
DWORD bfSize
WORD bfReserved1
WORD bfReserved2
DWORD bfOffBits
} BITMAPFILEHEADER;
参数bfType 指定位图文件类型的识别代码,例如BMP为BM 等,该参数必须为BM。
参数bfSize 指定位图文件的大小,以字节为单位。
参数bfReserved1和bfReserved2为保留字,需要将其设为0 。
参数bfOffBits 指定位图数据的起始位置,以相对于位图文件头的偏移量并以字节为单位来表示。
2. 位图信息头
BMP位图信息头包含了单个像素所用字节数以及描述颜色的格式,此外还包括位图的宽度、高度、目标设备的位平面数以及图像的压缩格式。第二部分为位图信息头BITMAPINFOHEADER,也是一个结构,该结构的定义如下:typedef struct tagBITMAPINFOHEADER{
DWORD biSize
LONG biWidth
LONG biHeight
WORD biPlanes
WORD biBitCount
DWORD biCompression
DWORD biSizeImage
LONG biXPelsPerMeter
LONG biYPelsPerMeter
DWORD biClrUsed
DWORD biClrImportant
} BITMAPINFOHEADER;