可视化图像处理系统
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
摘要
本文的可视化图像处理程序是对图像信息处理有关的处理系统;并对数字处理概况进行了分析。本文设计的可视化图像处理程序是以WindowXp作为操作平台, 采用Microsotf公司推出的开发Win32环境程序,面向对象的可视化集成编程系统的具有程序框架自动生成,灵活方便的类管理,代码编写和界面设计集成交互操作,可开发多种程等优点的Visual C++作为开发工具。本图像处理程序实现对灰度图像的基本操作,如图像的打开,关闭,保存;图像的基本处理,如图像放大、缩小、旋转、位移、2值化处理、中值滤波、边缘检测、直方图、小波变换、傅立叶交换等等。对本系统的功能和算法进行了详细的论述。通过综述指出了目前研究中存在的问题并指出了今后的研究方向,着重论述了图像处理阶段的研究特点。本文提供图像处理程序的基本框架和主要的一些图像处理功能,但它却不是一个完整的商业图像处理软件,如果要升级为商业软件,还需要进行很多艰苦工作。
关键词:可视化图像处理系统,直方图 ,小波变换,傅立叶,可视化 [版权所有:http://think58.com]
目录
摘要 5
Abstract 6
第一章.前言 7
第一节 选题背景 7
一 课题来源 7
二 课题目的和意义 7
三 课题应解决的问题 8
四 课题技术关键 8
第二节 数字图像介绍 8
一 数字图像的基本概念 8
二 位图的分类 10
第三节 本文的组织结构 11
一、本文的主要工作 11
二、本文的组织结构 12
第二章 数字图像处理简介 13
第一节 图像处理概况 13
一 基于计算机的图像处理 13
二 各种图像处理的特点 14
三 数字图像处理的特征 15
第二节 图像处理基础知识 16
一 图像处理的硬件构成 16
二 数字图像与Visual C++ 18
三 位图文件格式 19
四 采样与量化 21
五 图像处理的基本步骤 22
第三章 方案设计与论证 24
第一节 方案设计 24
第二节 可行性论证 25
第四章 系统设计 26
第一节 总体设计 26
[来源:http://www.think58.com]
一、 流程分折 26
二、 功能框架结构 27
第二节 详细设计 28
一、 图像的打开、关闭、保存 28
二、 直方图设计 31
三、 傅立叶交换 34
四、 小波交换 39
第三节 编码 41
一、 开发语言特征 41
二、代码风格与代码质量 42
第五章 运行测试 44
第一节 测试目的 44
第二节 测试步骤 44
一、 图像打开及关闭 44
二、 直方图 44
三、 傅立叶变换 45
四、 小波变换 47
第三节 结果分析 48
一、 像打开及关闭 48
二、 直方图 48
三、 傅立叶变换 48
四、小波变换 48
第四节 存在问题 49
第六章 结论 50
致谢 51
参考文献 52
第四章 系统设计
第一节 总体设计
一、流程分析
图像处理系统将流程分为三个阶段,首先是图像处理阶段,第二是图像分析阶段,第三是图像理解阶段。图像处理阶段主要是在像素级上进行处理,进行图像的几何校正,图像的灰度变换处理,图像噪声滤除的平滑处理,目标物体边界的锐化处理等。这些处理很重要,如果这阶段处理不好,后面的工作根本无法展开。图像分析阶段主要对图像里感兴趣的目标进行检测、分割、特征和测量,分析的结果能为用户提供描述图像目标特点和性质的数据,把原来以像素描述的图像转变成比较简洁的非图像方式的描述。图像理解阶段主要通过对图像里各目标的性质和它们之间相互关系的研究,对描述抽象出来的符号进行运算,了解把握图像内容并解释原来的客观场景,提供客观世界的信息,指导和规化行为,其处理过程和方法与人类的思维推理可以有许多类似之处。 think58好,好think58
由于时间及能力的原因,本次的程序设计只达到了图像处理阶段,完成了图像处理中的打开、关闭、保存、直方图、傅立叶变换、小波交换等处理;数字图像处理是现代图像处理的主要方法,具有再现性好、精度高、适用面广和灵活性大等优点。
本文所作图像处理系统设计总体框架流程如图4-1所示:
think58好,好think58 [资料来源:http://www.THINK58.com]
[资料来源:www.THINK58.com]图4-1
二、功能框架结构
系统设计总体框架:
(1) 打开图像
(2) 决定处理方式
(3) 调用图像处理程处理图像
(4) 显示处理后图像
(5) 结束
think58.com
位图读取及显示方法框架如下:
(1) 开始
(2) 得到文件完整路径名
(3) 打开位图文件
(4) 读取BITMAPELEHEADER结构
(5) 文件是BMP格式吗?(否则转到(9))
(6) 得到位图大小并分配相应内存空间
(7) 读取BITMAPELEHEADER结构
(8) 计算像素起始位置,保存像素数据起始位置指针
(9) 结束 本文来自think58
图像显示框架如下:
(1) 开始
(2) 从DOC对象中得到位图数据起始位置指针,并得到图像的宽高等信息
(3) 是否带有颜色索引表?(否则转到(9))
(4) 使用文件中颜色表数据创建调色板
(5) 把新创的调色板作为设备环境的调色板并保留原调色板
(6) 设定显示参数,显示位图
(7) 恢复原调色板
(8) 结束
(9) 设定显示参数,显示位图
(10) 结束
第二节 详细设计
一、图像的打开、关闭、保存
对于大多数人来说,在设计图像处理系统时,最大的难点就是对图像的打开、关闭和保存。由于时间及能力原因,对于现存的所有的图像文件格式,本文主要介绍BMP图像文件格式,BMP文件里的图像数据是未压缩的,因为图像的数字化处理主要是对图像中的各个像素进行相应的处理,而未压缩的BMP图像中的像素数值正好与实际要处理的数字图像相对应,这种格式的文件最合适对之进行数字化处理。请读者记住,压缩过的图像是无法直接进行数字化处理的,如JPEG、GIF等格式的文件,此时首先要对图像文件解压缩,这就要涉及到一些比较复杂的压缩算法。在第二章 第二节的位图文件格式中已给出了位图的文件格式:位图文件头BITMAPFILEHEADER、位图信息头BITMAPFILEHEADER、调色板RGBQUAD等位图基本信息。因为,对于图像的打开、关闭、保存等操作如下所操作。
(一) 图像的打开、显示如下:
(1) 开始
(2) 得到文件完整路径名
(3) 打开位图文件
(4) 读取BITMAPELEHEADER结构
(5) 文件是BMP格式吗?(否则转到(14))
(6) 是否带有颜色索引?(否则转到(15))
(7) 使用文件中颜色表数据创建调色板
(8) 把新创的调色板作为设备环境的调色板并保留原调色板
(9) 设定显示参数,显示位图
(10) 恢复原调色板
(11) 得到位图大小并分配相应内存空间
(12) 读取BITMAPELEHEADER结构
(13) 计算像素起始位置,保存像素数据起始位置指针
(14) 结束
(15) 设定显示参数,显示位图 并转到(11) think58
BMP位图包括位图文件头结构BITMAPFILEHEADER、位图信息头结构BITMAPINFOHEADER、位图颜色表RGBQUAD和位图像素数据四部分。处理位图时要根据文件的这些结构得到位图文件大小、位图的宽、高、实现调色板、得到位图像素值等等。这里要注意的一点是在BMP位图中,位图的每行像素值要填充到一个四字节边界,即位图每行所占的存储长度为四字节的倍数,不足时将多余位用0填充。
启动Visual C++,生成一个名为Imgcx的单文档程序。在处理图像应用程序的文档类(Global.h)中声明如下宏及公有变量:
建立图像表示用Dib:
EXIMPORT int CreateDispDib(CDC* pDC, int xsize, int ysize); 内容来自think58 [来源:http://www.think58.com]
消除Dib:
EXIMPORT void DeleteDispDib(void);
本文来自think58 [资料来源:http://think58.com]
[资料来源:http://THINK58.com]建立参考窗口读入图像:
EXIMPORT int Load_imagefile_bmp(); 本文来自think58 [资料来源:THINK58.com]
直接输入文件名读入图像:
EXIMPORT int Load_original_image(CString filename); copyright think58 [资料来源:http://www.THINK58.com]
读灰度图像数据到设定内存:
EXIMPORT int ReadImageData(BYTE *image); copyright think58
读彩色图像数据到设定内存:
EXIMPORT int ReadImageDataRGB(BYTE *imageR, BYTE *imageG, BYTE *imageB); [资料来源:http://THINK58.com]
图像保存:
EXIMPORT BOOL Save_imagefile_bmp();
think58 [来源:http://www.think58.com]
[版权所有:http://think58.com]图像另存为:
EXIMPORT BOOL SaveAs_imagefile_bmp();
think58 [来源:http://think58.com]
[来源:http://think58.com]
获得图像横向大小:
EXIMPORT int GetXSize(); think58好,好think58
[资料来源:http://THINK58.com]
获得图像纵向大小:
EXIMPORT int GetYSize();
copyright think58
获得图像数据指针:
EXIMPORT LPBYTE GetImage();
本文来自think58
[资料来源:THINK58.com]
[资料来源:THINK58.com]获得图像类型(8 = 灰度、24 = 彩色):
EXIMPORT int GetImageType();
think58.com
[资料来源:http://THINK58.com]
[资料来源:http://think58.com]表示内存内的灰度图像:
EXIMPORT void Disp_image(BYTE *image); [资料来源:www.THINK58.com]
表示内存内的彩色图像:
EXIMPORT void Disp_imageRGB( BYTE *imageR, BYTE *imageG, BYTE *imageB); think58 [来源:http://think58.com]
获得表示图像的名称:
EXIMPORT void GetImageFileName(char *cFileName);
内容来自think58
[资料来源:http://www.THINK58.com]
设定表示图像的名称:
EXIMPORT void PutImageFileName(CString fn); copyright think58 [资料来源:www.THINK58.com]
获得表示的Dib:
EXIMPORT CDib* GetDib(void);
设定表示的Dib:
EXIMPORT void PutDib(CDib *pDib); think58 [版权所有:http://think58.com]
彩色图像变灰度图像
EXIMPORT int Color_to_mono();
think58.com
[来源:http://think58.com]
图像打开实现步骤:
1、读入位图文件
2、设定图像窗口大小
3、更新画面
4、判断图像格式
5为新图像分配内存
6、更新画面 本文来自think58
[资料来源:http://think58.com]
(二) 图像的保存及另存为
图像保存及另存为流程图:
think58.com
N
[来源:http://think58.com]
Y [版权所有:http://think58.com]
think58好,好think58 [来源:http://think58.com]
图4-2
实现步骤:
1、 判断是否读入图像(N则转到3)
2、 调用保存语句保存
3、 结束
think58好,好think58 [资料来源:http://www.THINK58.com]
二、直方图设计
图像增强处理技术一直是图像处理领域一类非常重要的基本处理技术。通过采取适当的增强处理可以将原本模糊不清甚至根本无法分辨的原始图片处理成清楚、明晰的富含大量有用信息的可使用图像,因此此类图像处理技术在医学、遥感、微生物、刑侦以及军事等诸多领域得到广泛应用。
(一)图像的灰度直方图处理技术
在空间域对图像进行增强处理的方式有许多种,如增强对比度和动态范围压缩等等,但这些处理方式都是针对原始图像的每一个像素直接对其灰度进行处理的,其处理过程主要是通过增强函数对像素的灰度级进行运算并将运算结果作为该像素的新灰度值来实现的。通过改变选用的增强函数的解析表达式就可以得到不同的处理效果,这类处理方法比较灵活方便,处理效果也不错,但对于某些灰度分布很密集或对比度很弱的图像,虽然也能起到一定的增强效果但并不明显。对于这种情况就可以采用本文提出的灰度直方图变换方法将原始图像密集的灰度分布变得比较疏散,从而拉大图像的对比度并在视觉上达到明显增强的效果,使一些原本不易观察到的细节能变得清晰可辨。
图像的灰度变换处理是通过改变原始图像各像素在各灰度级上的概率分布来实现的。通过对图像的灰度值进行统计可以得到一个一维离散的图像灰度统计直方图函数p(sk)=nk/n(这里k=0,1,2……L-1),该式表示在第k个灰度级上的像素个数nk占全部像素总数n的比例,p(sk)则给出了对sk出现概率的一个估计。因此该直方图函数实际是图像的各灰度级的分布情况的反映,换句话说也就是给出了该幅图像所有灰度值的整体描述。通过该函数可以清楚地了解到图像对应的动态范围情况,可以了解到图像灰度的主要集中范围。因此可以通过图像增强程序的干预来改变直方图的灰度分布状况,使灰度均匀地或是按预期目标分布于整个灰度范围空间,从而达到增强图像对比度的效果。这种方法是基于数理统计和概率论的,比直接在空间域对原始图像采取对比度增强效果要好得多。在实际应用中直方图的变换主要有均衡变换和规定变换两种,而后者又可根据灰度级映射规则的不同分单映射规则和组映射规则两种。 内容来自think58
[来源:http://think58.com]
(二)直方图均衡化处理
直方图均衡化处理的中心思想是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。基本思想是对在图像中的像素个数多的灰度级进行展宽,而对像素个数少的灰度级进行缩减,从而达到清淅图像的目的。通过点运算使输入图像转换为在每一灰度级上都有相同的像素点的数目,即输出图像的直方图是平的。这对于在进行图像比较和分割之前将图像转化为一致的格式是十分有益的。
直方图是用来表达一幅图像灰度级分布情况的统计表。直方图的横坐标是灰度,一般用r表示。纵坐标灰度值为 的像素个数或出现这个灰度值的概率 。并知:
(4-1)
(4-2)
式中K为一幅图像对应的灰度级数。
图像灰度的直方图是反映一幅图像中的灰度级与出现这种灰度的概率之间关系的图形。设变量r 代表图像中像素的灰度级,如果对它做归一化处理,r的值将在下述范围内:0<= r <=1
在灰度级中,r=0代表黑,r=1代白,从r=0到r=1之间数值的变化,反映了像素由黑至白的灰度变化。对于一幅给定的图像,每一像素取得(0,1)区间内的灰度级是随机的,即可以认为它是一个随机变量。假定r是连续的,那么可以用概率密度函数 来表示原始图像的灰度分布。对于数字图来说,灰度级看成是离散的,归一化后的r的取值范围为: [来源:http://www.think58.com]
0<= r <=1 k=0,1,2,…,L-1
这里,L为灰度级的数目。
如前所述,一幅给定的图像的灰度级分布在[0,1]区间内的任一个r值,都可产生一个s值,且任一r值可按下式变换:
(4-3)
T(r)为变换言之函数。在原始图像中,每一个像素灰度值r都对应产生一个s 值。
假定由式4-3给定的变换函数满足下面两个条件:
(1) 在0<= r <=1区间内是单值单调增加函数;
(2) 在0<= r <=1区间内,有0<= T (r)<=1。
条件(1)保证灰度级从黑到白的次序,条件(2)确保映射后的像素灰度在允许的范围内。反变换关系为:
(4-4)
显然,若T满足条件(1)和(2),则 也满足条件(1)和(2)。
由概率论理论可知,如果已知随机变量r的概率密度为 ,而随机变量s是r的函数,对于直方图均衡化后的连续图像,变换函数T(r)与原图像概率密度函数 之间的关系为: [资料来源:http://www.THINK58.com]
(4-5)
假定随机变量s的分布函数用 表示, 是单调增长函数,则s 的概率密度 可以由 求出,变换后的图像灰度级的概率密度函数 可由下式得到:
=[ ]r = T (s) (4-6)
因为归一化假定:
=1 (4-7)
故有
(4-8)
或
(4-9)
取定积分:
(4-10)
对于离散图像,第i个灰度级 出现的频数 用表示,该灰度像素对应的概率值 为:
(4-11)
[资料来源:http://www.THINK58.com]
n是帧内像素总数, 满足归一化条件。至此,可写出离散图像的变换函数表达式:
think58好,好think58 [版权所有:http://think58.com]
[资料来源:http://think58.com]
(4-12)
式中,k为灰度级数。
(三)实现步骤
(1) 开始;
(2) 是否读入图像(否则转到(15));
(3) 是否灰度图像(否则转到(15));
(4) 描画移动量;
(5) 用数据表示轴;
(6) 获得图像尺寸;
(7) 分配内存;
(8) 读入图像数据;
(9) 计算直方图数列;
(10) 直方图平坦化处理;
(11) 表示变换后图像;
(12) 再次计算直方图数列;
(13) 全体描画直方图;
(14) 解放内存;
(15) 结束; [来源:http://think58.com]
参考文献
[1] 吕凤军.数字图像处理编程入门.北京:清华大学出版社.2000年
[2] 周长发.精通Visual C++图像编程.北京:电子工业出版社.2000年
[3] 周长发.多媒体计算机技术开发与应用.北京:电子工业出版社.1995年
[4] 伍俊良 编著.VC++课程设计与系统开发.北京:清华大学出版社. 2002年11月1日
[5] 杨淑莹 编著. 边奠英主审.VC++图像处理程序设计.北京:清华大学出版社、 北方交通大学出版社.
本文来自think58