收藏 分销(赏)

一个BMP图像处理的设计实现论文.doc

上传人:仙人****88 文档编号:9344646 上传时间:2025-03-22 格式:DOC 页数:70 大小:797.50KB
下载 相关 举报
一个BMP图像处理的设计实现论文.doc_第1页
第1页 / 共70页
一个BMP图像处理的设计实现论文.doc_第2页
第2页 / 共70页
点击查看更多>>
资源描述
毕业设计(论文) 第 64 页 毕业设计(论文) 设计(论文)题目: 一个BMP图像处理的设计与实现 学生姓名: 学生学号: 专业班级: 学院名称: 指导老师: 学院院长: 5 月 24 日 一个BMP图像处理系统的设计与实现 摘要 随着时代的发展,科技的进步,一些简单的图片已经不能满足人们的需求。图像运用的扩大与对图像本身的精益求精,使人们越来越依赖于各种图像处理软件。各种图像处理软件也越来越完善,普及程度不断的提高。 本人用Visual C++作为开发工具,设计了一个BMP图像处理软件。本图像处理软件实现对BMP图像的基本操作,如图像的打开,关闭,保存;图像的基本处理,如图像放大、缩小、旋转、转置、二值化处理、中值滤波、边缘检测、直方图、图像的腐蚀与膨胀以及马赛克效果等等。本文先分析国内外图像处理软件的现状,以及发展趋势,进而指出目前研究中存在的问题并指出今后的研究方向,之后从对图像处理的基本原理开始阐述,详细的分析各种功能的实现和算法。 关键词:BMP,图像,图像处理,数字图像处理,图像处理软件 Design and Implementation of BMP Image Processing System Abstract With the development of science, the simple pictures couldn’t meet people’s demand. The magnification of picture’s usage and the ever delicated image of picture itself, has made people more and more rely on several of picture-processing software. And the popularization of these softwares is going higher and higher, with the progress made by themselves. I use Visual C++ development to build software which is used to deal with BMP images. This software can carry out some base operations of BMP images, such as open, close and save; some base processes of BMP images, such as magnify, shrink, rotate, binary process, mid-value filter, edge-detect, cauterization of pictures and the mosaic effect. This paper at first analyzed status of picture-processing software both of domestic an foreign, and the developing trend, then point out the exiting problems in current researches and the direction for the future. After that is the description of basic theory of picture processing, and as well the realization of various kinds of functions and the algorithms in detail KEY WORDS: BMP,picture,picture-processing,Digital Image Processing,Image Processing Software 目 录 1. 绪论 1 1.1论文结构组成 1 1.2研究背景 1 1.2.1计算机图形学的发展简史 1 1.2.2图像处理软件需求与应用 3 1.3现有图像处理软件 4 1.3.1 Photoshop简介 4 1.3.2 Picasa简介 6 1.4数字图像处理领域的发展方向 7 2. 技术背景 8 2.1 BMP文件结构 8 2.1.1 BMP文件组成 8 2.1.2 BMP文件头 8 2.1.3 位图信息头 9 2.1.4 颜色表 9 2.1.5 位图数据 10 2.2 BMP图像的基本操作 11 2.2.1 BMP位图操作 12 2.2.2调色板的操作 19 2.2.3 图像的显示 23 3. 原先软件介绍 26 3.1图像灰度变换 26 3.2 图像的特效显示 27 3.3图像的几何变换 28 3.4图像的平滑处理 28 3.5图像边缘检测 29 3.6图像分割及测量 30 3.7图像的形态学处理 31 4. 新增功能详述 35 4.1 几何变换 35 4.1.1镜像 35 4.1.2 缩放图像 36 4.1.3 图像转置 38 4.1.4 图像旋转 39 4.2 图像的特效显示 45 4.2.1 彩色马赛克 45 4.2.2马赛克效果 47 4.2.3水平栅条 48 4.2.4图像渐显 48 4.3 图像灰度变换 49 4. 3.1 双阈值二值化 50 4.3.2反色变换 50 4.3.3 灰度直方图统计 51 4.3.4灰度分布均衡化处理 53 4.3.5 对比度调整 55 4.3.6 亮度调整 57 4.3.7 窗口灰度变换 58 4.4 图像的平滑处理 59 4.4.1 3*3均值滤波 59 4.4.2 随机噪声 59 4.5图像边缘检测 60 4.5.1 Roberts边缘检测算子 61 4.5.2 Sobel边缘检测算子 62 4.6 图像分割及测量 64 4.6.1 轮廓提取 65 结论 67 感谢 68 参考文献 69 1. 绪论 1.1论文结构组成 本文先阐述了计算机图形学的发展史,分析现有的两种图像处理软件的特点,并展望了数字图像处理领域的发展方向。软件是为了处理BMP图像而设计的,所以接下来讲述了一些有关BMP方面的一些专业知识。 由于本设计是在原有软件基础上进行完善的,所以在描述软件时,先对原先软件介绍了一下,包括原有软件的框架及原先实现的功能,之后开始从效果介绍和实现原理两方面详细讲解了新增功能。 1.2研究背景 1.2.1计算机图形学的发展简史 麻省理工学院(MIT)旋风I号(Whirlwind I)计算机的附件诞生了。该显示器用一个类似于示波器的阴极射线管(CRT)来显示一些简单的图形。1958年美国Calcomp公司由联机的数字记录仪发展成滚筒式绘图仪,GerBer公司把数控机床发展成为平板式绘图仪。在整个50年代,只有电子管计算机,用机器语言编程,主要应用于科学计算,为这些计算机配置的图形设备仅具有输出功能。计算机图形学处于准备和酝酿时期,并称之为:“被动式”图形学。到50年代末期,MIT的林肯实验室在“旋风”计算机上开发SAGE空中防御体系,第一次使用具有指挥和控制功能的CRT显示器,操作者可以用笔在屏幕上指出被确定的目标。与此同时,类似的技术在设计和生产过程中也陆续得到应用,它预示着交互式计算机图形学的诞生。 1962年,MIT林肯实验室的Ivan E.Sutherland 发表一篇题为“Sketchpad:一个人机交互通信的图形系统”的博士论文,他在论文中首次使用计算机图形学“Computer Graphics”这个术语,证明交互计算机图形学是一个可行的、有用的研究领域,从而确定计算机图形学作为一个崭新的科学分支的独立地 位。他在论文中所提出的一些基本概念和技术,如交互技术、分层存储符号的数据结构等至今还在广为应用。1964年MIT的教授Steven A. Coons提出被后人称为超限插值的新思想,通过插值四条任意的边界曲线来构造曲面。同在60年代早期,法国雷诺汽车公司的工程师Pierre Bézier发展了一套被后人称为Bézier曲线、曲面的理论,成功地用于几何外形设计,并开发了用于汽车外形设计的UNISURF系统。Coons方法和Bézier方法是CAGD最早的开创性工作。值得一提的是,计算机图形学的最高奖是以 Coons的名字命名的,而获得第一届(1983)和第二届(1985) Steven A.Coons 奖的,恰好是Ivan E.Sutherlan和Pierre Bézier,这也算是计算机图形学的一段佳话。 70年代是计算机图形学发展过程中一个重要的历史时期。由于光栅显示器的产生,在60年代就已萌芽的光栅图形学算法,迅速发展起来,区域填充、裁剪、消隐等基本图形概念、及其相应算法纷纷诞生,图形学进入第一个兴盛的时期,并开始出现实用的CAD图形系统。又因为通用、与设备无关的图形软件的发展,图形软件功能的标准化问题被提出来。1974年,美国国家标准化局(ANSI)在ACM SIGGRAPH的一个与“与机器无关的图形技术”的工作会议上,提出制定有关标准的基本规则。此后ACM专门成立一个图形标准化委员会,开始制定有关标准。该委员会于1977、1979年先后制定和修改 “核心图形系统”(Core Graphics System)。ISO随后又发布了计算机图形接口CGI(Computer Graphics Interface)、计算机图形元文件标准CGM(Computer Graphics Metafile)、计算机图形核心系统GKS(Graphics Kernel system)、面向程序员的层次交互图形标准 PHIGS(Programmer's Hierarchical Interactive Graphics Standard)等。这些标准的制定,为计算机图形学的推广、应用、资源信息共享,起到重要作用。 70年代,计算机图形学另外两个重要进展是真实感图形学和实体造型技术的产生。1970年Bouknight提出了第一个光反射模型,1971年Gourand提出“漫反射模型+插值”的思想,被称为Gourand明暗处理。1975年Phong提出了著名的简单光照模型-Phong模型。这些可以算是真实感图形学最早的开创性工作。另外,从1973年开始,相继出现了英国剑桥大学CAD小组 的Build系统、美国罗彻斯特大学的PADL-1系统等实体造型系统。 1980年Whitted提出一个光透视模型-Whitted模型,并第一次给出光线跟踪算法的范例,实现Whitted模型;1984年,美国Cornell大学和日本广岛大学的学者分别将热辐射工程中的辐射度方法引入到计算机图形学中,用辐射度方法成功地模拟理想漫反射表面间的多重漫反射效果;光线跟踪算法和辐射度算法的提出,标志着真实感图形的显示算法已逐渐成熟。从80年代中期以来,超大规模集成电路的发展,为图形学的飞速发展奠定了物质基础。计算机的运算能力的提高,图形处理速度的加快,使得图形学的各个研究方向得到充分发展,图形学已广泛应用于动画、科学计算可视化、CAD/CAM、影视娱乐等各个领域。 最后,以SIGGRAPH会议的情况,来结束计算机图形学的历史回顾。ACM SIGGRAPH会议是计算机图形学最权威的国际会议,每年在美国召开,参加会议的人在50,000人左右。世界上没有第二个领域每年召开如此规模巨大的专业会议,SIGGRAPH会议很大程度上促进了图形学的发展。SIGGRAPH会议是由Brown大学教授Andries van Dam (Andy) 和IBM公司Sam Matsa在60年代中期发起的,全称是“the Special Interest Group on Computer Graphics and Interactive Techniques”。1974年,在Colorado大学召开了第一届SIGGRAPH 年会,并取得巨大的成功,当时大约有600位来自世界各地的专家参加会议。到1997年,参加会议的人数已经增加到48,700。因为每年只录取大约50篇论文,在Computer Graphics杂志上发表,因此论文的学术水平较高,基本上代表图形学的主流方向。 1.2.2图像处理软件需求与应用 随着科学技术的不断发展,计算机的更新速度不断提高,人们的思想文化素质的提高,对图像的要求也越来越高。因此把原始图像与计算机结合起来,从而创作出许多更加完美的图像,满足人们的需求。计算机图像处理,是指利用计算机对图像进行一系列加工,以便获得人们所需要的效果。图像 是人类获取和交换信息的主要来源,人类感知外界信息,80%以上是通过视 觉得到的。因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。图像是用各种观测系统以不同形式和手段观测客观世界而产生视知觉的实体。比如人的视觉就是一个观测系统,通过它得到的图像就是客观景物在人心目中形成的影像。视觉是人类观察世界、认知世界的重要功能手段。图像带有大量的信息,百闻不如一见,一图值千金都说明这个事实。图像处理技术起源比较早,但真正发展是在八十年代后,随着计算机技术的高速发展而迅猛发展起来。图像处理或图像分析方法的应用越来越广泛,其主要理论基础是形态数学,立体学,集合论等。图像处理或图像分析方法的应用越来越广泛,其主要理论基础是形态数学,立体学,集合论等。图像处理的应用领域很广,大致可以分为六大领域以及十余个子领域: 1.材料科学:光学材料,金属材料,晶体材料,陶瓷建筑材料。 2.地学:岩矿结构,岩体裂隙特征,土体颗粒。 3.生命科学:生物,植物,医学,基因。 4.地理学:经济地理,土地资源,地貌,气像学。 5.机器人: 包括电路设计,识别等。 6.鉴定:指纹鉴定,财务印章管理,防伪鉴定等。 图像处理虽然也可以用光学方法或模拟技术来实现,但目前主要是利用计算机来实现,称为数字图像处理。因此,图像处理一般是指数字图像处理。 常见的图像处理有图像数字化、图像编码、图像增强、图像复原、图像分割与图像分析等。经过处理后的图像,一定能够更好的被用于工业或者个人目的。为此开发这个数字图像处理软件,能够处理一些图像,并对图像处理技术此方面进行深入的研究。 1.3现有图像处理软件 随着对图像处理需求的扩大,现有的图像处理软件多种多样,数不胜数。本文简单介绍两个比较有代表性的图像处理软件:Photoshop和Picasa 1.3.1 Photoshop简介 Photoshop是平面图像处理业界霸主Adobe公司推出的跨越PC和MAC两界首屈一指的大型图像处理软件。它功能强大,操作界面友好,得到广大第三方开发厂家的支持,从而也赢得众多的用户的青睐。Photoshop是目前公认的最好的通用平面美术设计软件,它的功能完善,性能稳定,使用方便,所以在几乎所有的广告、出版、软件公司,Photoshop都是首选的平面工具。功能:是专门用来进行图像处理的软件。通过它可以对图像修饰、对图形进行编辑,以及对图像的色彩处理,另外,还有绘图和输出功能等。在实际生活和工作中,可以将数码照相机拍摄下来的照片进行编辑和修饰,也可以将现有的图形和照片,用扫描仪扫入计算机进行加工处理,还可以把摄像机摄入的内容转移到计算机上,然后用它实现对影像的润色。 总之,PhotoShop 可以使你的图像产生特技效果,如果和其它工具软件配合使用,还可以进行高质量的广告设计、美术创意和三维动画制作。由于PhotoShop功能强大, 目前,正在被越来越多的图像编排领域、广告和形像设计领域以及婚纱影楼等领域广泛使用,是一个非常受欢迎的应用软件。 ADOBE PHOTOSHOP最初的程序是由Mchigan大学的研究生Thomas创建,后经Knoll兄弟以及ADOBE公司程序员的努力ADOBE PHOTOSHOP产生巨大的转变,一举成为优秀的平面设计编辑软件。它的诞生可以说掀起图像出版业的革命,目前ADOBE PHOTOSHOP最新版本为6.0,它的每一个版本都增添新的功能这使它获得越来越多的支持者也使它在这诸多的图形图像处理软件中立于不败之地。 Adobe产品的升级更新速度并不快,但每一次推出新版总会有令人惊喜的重大革新.Photoshop从当年名噪一时的图形处理新秀.经过3.0,4.0,5.0,5.5的不断升级,直到目前最新的6.0版,功能越来越强大,处理领域也越来越宽广,逐渐建立了图像处理的霸主地位。 Photoshop支持众多的图像格式,对图像的常见操作和变换做到了非常精细的程度,使得任何一款同类软件都无法望其颈背;它拥有异常丰富的插件(在Photoshop中叫滤镜),熟练后您自然能体会到"只有想不到,没有做不到"的境界. 而这一切,Photoshop都提供了相当简捷和自由的操作环境,从而使工作 游刃有余。从某种程度上来讲,Photoshop本身就是一件经过精心雕琢的艺术品,更像为您度身定做的衣服,刚开始使用不久就会觉得的倍感亲切。 当然,简捷并不意味着傻瓜化,自由也并非随心所欲,Photoshop仍然是一款大型处理软件,想要用好它更不会在朝夕之间,只有长时间的学习和实际操作才能充分贴近它[6]。 1.3.2 Picasa简介 Google Picasa原为独立收费的图片处理软件,其界面美观华丽,功能实用丰富。被Google收购后,已改为完全免费软件。只需拥有Picasa,你就可以随心所欲地体验你的歌谱图片和数码相。Google照片处理软件尤其适合于初级数码照片爱好者使用,Picasa可以通过简单的单次点击式修正来进行高级修改处理,只需动动指尖来处理相片即可获得震撼效果。 Picasa 功能特点: Picasa是一个可在计算机上查看、整理、修改和共享图片的软件,它会让所有这些工作变得简单而有趣。Picasa 不会未经您的允许就删除图片或将图片放到网络上。它自动将你的相片从你的数码相机传输到你的电脑上 ,管理图片并让你能在几秒中内查找到所需的图片,让你轻松地编辑, 打印以及共享相片 ,创建幻灯片,定购打印以及其它更多。Picasa会自动根据照片拍摄的时间,目录,机型来判断,自动建立像簿,查找方便,还有timeline功能。 Picasa软件的突出特点包括: 1.高级编辑工具 —— 利用强大的工具,包括12种照片滤镜效果、色彩和亮度调节、消除红眼、照片裁剪和校正功能,图片放大功能和图片修正功能。 2.便捷地组织照片或图片 —— 通过扫描计算机中的图像并按日期排序,可以自动找到被遗忘的照片;通过添加标签、标题和星级,可以更好地组织照片或图片并整理混乱的文件夹。 3.备份功能 —— 使用者可以将电脑上的照片备份到CD或DVD盘片中,或者将照片存储到外置驱动器, 创建个性化的幻灯片CD赠品以及打印CD 封面等。 4.度身定做的打印方案 —— 用户既可以在家中打印标准或者或专用尺寸的照片,也可以将图片上载到附近提供相关服务的冲印公司那里进行冲印。 5.配合其它 Google 产品与亲友分享相片 —— 以通过 Gmail 发送电子邮件 (每个电子邮件最多可附上 10MB 的相片),也可以通过简单的操作把相片上传至使用者的 Blogger 网志。 Picasa 亦可用于其它的流行的电子邮件客户端。 支持的文件类型有: 图片:jpg、bmp、gif、png、psd、tif 电影:avi、mpg、wmv、asf、mov (QuickTime) RAW 数据文件,包括 Canon、Nikon、Kodak、Minolta 和 Pentax 相机支持这种格式的文件。 目前可用于中文(简体及繁体)、荷兰语、英语(美国和英国)、法语、德语、意大利语、日语、韩语、葡萄牙语、俄语以及西班牙语。 1.4数字图像处理领域的发展方向 在该领域中需进一步研究的问题,不外乎如下5个方面: 1.在进一步提高精度的同时着重解决处理速度问题。如在航天遥感,气像云图处理方面,巨大的数据量和处理速度仍然是主要矛盾之一。 2.加强软件研究,开发新的处理方法,特别要注意移植和借鉴其他学科的技术和研究成果,创造新的处理方法。 3.加强边缘科学的研究工作,促进图像处理技术的发展。如:人的视觉特性,心理学特性等的研究如果有所突破,将对图像处理技术的发展起到极大的促进作用。 4.加强理论研究,逐步形成图像处理科学自身的理论系统。 5.时刻注意图像处理领域的标准化问题。图像的信息量大,数据量大,因而图像信息的建库,检索和交流是一个极严重的问题。就现有的情况看,软件硬件种类繁多,交流和使用极为不便,这成了资源共享的严重障碍。应及早建立图 像信息库,统一存放格式,建立标准子程序,统一检索方法。 2. 技术背景 2.1 BMP文件结构 2.1.1 BMP文件组成 BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。文件头主要包含文件的大小、文件类型、图像数据偏离文件头的长度等信息;位图信息头包含图像的尺寸信息、图像用几个比特数值来表示一个像素、图像是否压缩、图像所用的颜色数等信息。颜色信息包含图像所用到的颜色表,显示图像时需用到这个颜色表来生成调色板,但如果图像为真彩色,既图像的每个像素用24个比特来表示,文件中就没有这一块信息,也就不需要操作调色板。文件中的数据块表示图像的相应的像素值,需要注意的是:图像的像素值在文件中的存放顺序为从左到右,从下到上,也就是说,在BMP文件中首先存放的是图像的最后一行像素,最后才存储图像的第一行像素,但对与同一行的像素,则是按照先左边后右边的的顺序存储的;另外一个需要读者朋友关注的细节是:文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补0,凑足4的倍数[2,8,]。 2.1.2 BMP文件头 BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。其结构定义如下: typedef struct tagBITMAPFILEHEADER { WORD bfType; // 位图文件的类型,必须为"BM" DWORD bfSize; // 位图文件的大小,以字节为单位 WORD bfReserved1; // 位图文件保留字,必须为0 WORD bfReserved2; // 位图文件保留字,必须为0 DWORD bfOffBits; // 位图数据的起始位置,以相对于位图文件头的偏移 量表示,以字节为单位 } BITMAPFILEHEADER;该结构占据14个字节[14-16]。 2.1.3 位图信息头 BMP位图信息头数据用于说明位图的尺寸等信息。其结构如下: typedef struct tagBITMAPINFOHEADER{ DWORD biSize; // 本结构所占用字节数 LONG biWidth; // 位图的宽度,以像素为单位 LONG biHeight; // 位图的高度,以像素为单位 WORD biPlanes; // 目标设备的平面数不清,必须为1 WORD biBitCount// 每个像素所需的位数,必须是1(双色), 4(16色),8(256色)或24(真彩色)之一 DWORD biCompression; // 位图压缩类型,必须是 0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一 DWORD biSizeImage; // 位图的大小,以字节为单位 LONG biXPelsPerMeter; // 位图水平分辨率,每米像素数 LONG biYPelsPerMeter; // 位图垂直分辨率,每米像素数 DWORD biClrUsed;// 位图实际使用的颜色表中的颜色数 DWORD biClrImportant;// 位图显示过程中重要的颜色数 } BITMAPINFOHEADER;该结构占据40个字节。 注意:对于BMP文件格式,在处理单色图像和真彩色图像的时候,无论图像数据多么庞大,都不对图像数据进行任何压缩处理,一般情况下,如果位图采用压缩格式,那么16色图像采用RLE4压缩算法,256色图像采用RLE8压缩算法[2,8]。 2.1.4 颜色表 颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下: typedef struct tagRGBQUAD { BYTErgbBlue;// 蓝色的亮度(值范围为0-255) BYTErgbGreen; // 绿色的亮度(值范围为0-255) BYTErgbRed; // 红色的亮度(值范围为0-255) BYTErgbReserved;// 保留,必须为0 } RGBQUAD; 颜色表中RGBQUAD结构数据的个数由BITMAPINFOHEADER 中的biBitCount项来确定,当biBitCount=1,4,8时,分别有2,16,256个颜色表项, 当biBitCount=24时,图像为真彩色,图像中每个像素的颜色用三个字节表示,分别对应R、G、B值,图像文件没有颜色表项。位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下: typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; // 位图信息头 RGBQUAD bmiColors[1];// 颜色表 } BITMAPINFO; 注意:RGBQUAD数据结构中,增加一个保留字段rgbReserved,它不代表任何颜色,必须取固定的值为"0",同时, RGBQUAD结构中定义的颜色值中,红色、绿色和蓝色的排列顺序与一般真彩色图像文件的颜色数据排列顺序恰好相反,既:若某个位图中的一个像素点的颜色的描述为"00,00,ff,00",则表示该点为红色,而不是蓝色[2,8]。 2.1.5 位图数据 位图数据记录位图的每一个像素值或该对应像素的颜色表的索引值,图像记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。这种格式又称为Bottom_Up位图,当然与之相对的还有Up_Down形式的位图,它的记录顺序是从上到下的,对于这种形式的位图,也不存在压缩形式。位图的一个像素值所占的字节数:当biBitCount=1时,8个像素占1个字节;当biBitCount=4时,2个像素占1个字节;当 biBitCount=8时,1个像素占1个字节;当biBitCount=24时,1个像素占3个字节,此时图像为真彩色图像。当图像不是为真彩色时,图像文件中包含颜色表,位图的数据表示对应像素点在颜色表中相应的索引值,当为真彩色时,每一个像素用三个字节表示图像相应像素点彩色值,每个字节分别对应R、G、B分量的值,这时候图像文件中没有颜色表。上面已经讲过,Windows规定图像文件中一个扫描行所占的字节数必须是4的倍数(即以字为单位),不足的以0填充,图像文件中一个扫描行所占的字节数计算方法: DataSizePerLine= (biWidth* biBitCount+31)/8;// 一个扫描行所占的字节数 位图数据的大小按下式计算(不压缩情况下): DataSize= DataSizePerLine* biHeight。 上述是BMP文件格式的说明,搞清楚以上的结构,就可以正确的操作图像文件,对它进行读或写操作。 一幅图像可以定义为一个二维函数f(x,y),f为该点(x,y)的强度或灰度。假设对一幅图像f(x,y)取样后,得到一幅有着M行和N列的图像。称这幅图像的大小为M×N。坐标(x,y)的值是离散量。为使符号表示清晰和方便,为这些离散坐标使用整数值。x是从1到M的整数,y是从1到N的整数。因此,一幅数字图像在matlab中可以很自然地表示成矩阵 2.2 BMP图像的基本操作 在实现数字图像处理的过程中,主要是通过对图像中的每一个像素点运用各种图像处理算法来达到预期的效果,所以进行图像处理的第一步,也是最关心的问题,是如何得到图像中每一个像素点的亮度值;为观察和验证处理的图像效果,另一个需要解决的问题是如何将处理前后的图像正确的显示出来。现在就是解决这些问题。 随着科技的发展,图像处理技术已经渗透到人类生活的各个领域并得到越来越多的应用,但是突出的一个矛盾是图像的格式也是越来越多,目前图像处理所涉及的主要的图像格式就有很多种,如TIF、JEMP、BMP等等,一般情况下,为了处理简单方便,进行数字图像处理所采用的都是BMP格式的图像文件(有时也称为DIB格式的图像文件),并且这种格式的文件是没有压缩的。通过操作这种格式的文件,可以获取正确显示图像所需的调色板信息,图像的尺寸信息,图像中各个像素点的亮度信息等等,有了这些数据,开发人员就可以对图像施加各种处理算法,进行相应的处理。如果特殊情况下需要处理其它某种格式的图像,如GIF、JEMP等格式的图像文件,可以首先将该格式转换为BMP格式,然后 再进行相应的处理。这一点需要读者清楚。 BMP格式的图像文件又可以分为许多种类,如真彩色位图、256色位图,采用RLE(游程编码)压缩格式的BMP位图等等。由于在实际的工程应用和图像算法效果验证中经常要处理的是256级并且是没有压缩的BMP灰度图像,例如通过黑白采集卡采集得到的图像就是这种格式,所以在整个讲座中范例所处理的文件格式都是BMP灰度图像。如果读者对这种格式的位图能够作到熟练的操作,那么对于其余形式的BMP位图的操作也不会很困难。 BMP灰度图像作为Windows环境下主要的图像格式之一,以其格式简单,适应性强而倍受欢迎。这种文件格式就是每一个像素用8bit表示,显示出来的图像是黑白效果,最黑的像素的灰度(也叫作亮度)值为"0",最白的像素的灰度值为"255",整个图像各个像素的灰度值随机的分布在"0"到"255"的区间中,越黑的像素,其灰度值越接近于"0",越白(既越亮)的像素,其灰度值越接近于"255";与此对应的是在该文件类型中的颜色表项的各个RGB分量值是相等的,并且颜色表项的数目是256个。 在进行图像处理时,操作图像中的像素值就要得到图像阵列;经过处理后的图像的像素值需要存储起来;显示图像时要正确实现调色板、得到位图的尺寸信息等[2,8]。 2.2.1 BMP位图操作 BMP位图包括位图文件头结构、BITMAPFILEHEADER、位图信息头结构 BITMAPINFOHEADER、位图颜色表RGBQUAD和位图像素数据四部分。处理位图时要根据文件的这些结构得到位图文件大小、位图的宽、高、实现调色板、得到位图像素值等等。这里要注意的一点是在BMP位图中,位图的每行像素值要填充到一个四字节边界,即位图每行所占的存储长度为四字节的倍数,不足时将多余位用0填充。 有了上述知识,可以开始编写图像处理的程序了,关于在VC的开发平台上如何开发程序的问题这里不再赘述,本人假定读者都具有一定的VC开发经验。在开发该图像处理程序的过程中,笔者没有采用面向对像的方法, 虽然面向对像的方法可以将数据封装起来,保护类中的数据不受外界的干扰,提高数据的安全性,但是这种安全性是以降低程序的执行效率为代价的,为此,充分利用程序的文档视图结构,在程序中直接使用一些API函数来操作图像。 启动Visual C++,生成一个名为Dib的多文档程序,将CDibView类的基类设为CscrollView类,这样作的目的是为了在显示位图时支持滚动条,另外在处理图像应用程序的文档类(CDibDoc.h)中声明如下宏及公有变量: #define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)//计算图像每行像素所占的字节数目; HANDLE m_hDIB;//存放位图数据的句柄; CPalette* m_palDIB;//指向调色板Cpalette类的指针; CSize m_sizeDoc;//初始化视图的尺寸,该尺寸为位图的尺寸; 最后将程序的字符串表中的字符串资源IDR_DibTYPE修改为: "\\nDib\\nDib\\nDib Files(*.bmp;*.dib)\\n.bmp\\nDib.Document\\nDib Document"。这样作的目的是为了在程序文件对话框中可以选择BMP或DIB格式的位图文[2,8]。 1.读取灰度BMP位图 可以根据BMP位图文件的结构,操作BMP位图文件并读入图像数据,为此充分利用VC的文档视图结构,重载文挡类的 OnOpenDocument()函数,这样用户就可以在自动生成程序的打开文件对话框中选择所要打开的位图文件,然后程序将自动调用该函数执行读取数据的操作。该函数的实现代码如下所示: BOOL CDibDoc::OnOpenDocument(LPCTSTR lpszPathName) { LOGPALETTE *pPal;//定义逻辑调色板指针; pPal=new LOGPALETTE;//初始化该指针; CFile file; CFileException fe; if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, &fe)) {//以"读"的方式打开文件; AfxMessageBox("图像文件打不开!"); return FALSE; } DeleteContents();//删除文挡; BeginWaitCursor(); BITMAPFILEHEADER bmfHeader;//定义位图文件头结构; LPBITMAPINFO lpbmi; DWORD dwBitsSize; HANDLE hDIB; LPSTR pDIB;//指向位图数据的指针; BITMAPINFOHEADER *bmhdr;//指向位图信息头结构的指针 dwBitsSize = file.GetLength();//得到文件长度 if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) !=sizeof(bmfHeader)) return FALSE;//读取位图文件的文件头结构信息; if (bmfHeader.bfType != 0x4d42) //检查该文件是否为BMP格式的文件; return FALSE; hDIB=(HANDLE) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize); //为读取图像文件数据申请缓冲区 if (hDIB == 0) { return FALSE; } pDIB = (LPSTR) ::GlobalLock((HGLOB
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服