Visual C++数字图像处理典型算法及实现


数字图像分析与处理技术 Visual C++数字图像获取、处理及实践应用 杨枝灵 王开 等编著 人民邮电出版社 Visual C++数字图像获取、处理及实践应用 · 2· 图书在版编目()数据 Visual C++数字图像获取、处理及实践应用 / 杨枝灵,王开等编著. —北京:人民邮电出版社, 2003.1 ISBN 7–115–10957–5 Ⅰ.V… Ⅱ.①杨…②王… Ⅲ.C 语言—程序设计Ⅳ. TP312 中国版本图书馆 CIP 数据核字(2002)第 101890 号 内容提要 本书全面系统地讨论了数字图像处理的理论、设计及应用。全书由自成体系而又互有联系的 12 章 组成,分别讨论了位图及图像类的概念、图像获取、图像增强、图像复原、正交变换、压缩编码、图像 配准、运动检测、特征提取、图像分割及识别的相关知识,基本涵概了从图像获取到图像处理的各个领 域,并结合 Microsoft 公司面向对象的可视化集成编程系统 Visual C++,给出了相应的算法和完整的源代 码。 本书在介绍了数字图像处理基础知识的同时,加入了该领域一些较新的研究成果,内容丰富新颖、 实用性强,适合希望运用 Visual C++进行数字图像处理的工作者阅读参考。 数字图像分析与处理技术 Visual C++数字图像获取、处理及实践应用   编    著  杨枝灵  王开等   责任编辑  张立科    人民邮电出版社出版发行 北京市崇文区夕照寺街 14 号     邮编 100061 电子函件 315@ptpress.com.cn 网址 http://www. ptpress.com.cn 读者热线       北京汉魂图文设计有限公司制作     北京隆昌伟业印刷有限公司印制     新华书店总店北京发行所经销  开本:787×1092 1/16 印张:39 字数:1216 千字 2002 年 12 月第 1 版 印数:1 – 6 000 册 2002 年 12 月北京第 1 次印刷 ISBN 7-115-10957-5/TP· 3276 定价:68.00 元(附光盘) 本书如有印装质量问题,请与本社联系 电话:(010)67129223 前 言 数字图像处理技术从广义上可看作是各种图像加工技术的总称。它包括利用计算机和其他电子设备 完成的一系列工作,如图像采集、获取、编码、存储和传输,图像的合成和产生,图像的显示、绘制和 输出,图像变换、增强、恢复和重建,特征的提取和测量,目标的检测、表达和描述,序列图像的校正, 图像数据库的建立、索引、查询和抽取,图像的分类、表示和识别,3D 景物的重建复原,图像模型的建 立,图像知识的利用和匹配,图像和场景的解释和理解,以及基于它们的推理、判断、决策和行为规划, 等等。另外图像处理技术还包括为完成上述功能而进行的硬件和系统的设计及制作等方面的技术。 数字图像处理是从 20 世纪 60 年代以来随着计算机技术和 VLSI 的发展而产生、发展和不断成熟起 来的一个新兴技术领域,它在理论上和实际应用上都取得了巨大的成就,并引起各方面人士的广泛重视。 首先,视觉是人类最重要的感知手段,图像又是视觉的基础。因此数字图像成为心理学、生物医学、计 算机科学等诸多方面的学者研究视觉感知的有效工具。其次,数字图像处理在军事、遥感、工业图像处 理等大型应用中也有不断增长的需求。 Visual C++是 Microsoft 公司推出的开发 Win 32 环境程序,面向对象的可视化集成编程系统。它不 但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等 优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE 2、WinSock 网络、3D 控制 界面。由于 Visual C++本身就是一个图形的开发界面,它提供了丰富的关于位图操作的函数,对开发图 像处理系统提供了极大的方便。因此,它现在已经成为开发 Win32 程序,包括图像处理程序的主要开发 工具。 全书基本涵概了从图像获取到处理的各个领域,由自成体系而又互有联系的 12 章组成。在介绍数字 图像处理基础知识的同时,加入了该领域一些较新的研究成果和应用,例如小波变换、Canny 分割算子、 JPEG 2000 图像编码等。书中对所介绍的图像处理算法都附有完整的 Visual C++源代码,并给出了相应 的编程实例和处理效果,读者在学习过程中可以结合程序来加深理解,也可以将代码直接用于图像处理。 本书由杨枝灵、王开等编著。此外参与编写工作的还有肖洪伟、李廷文、张增强、王洪涛、吴继刚、 周学明、李闽溟、黄沙、宣小平、但正刚、张文毅、张小磊、胡昱、范国平、陈晓鹏、王凯封、潘邦、 王锐、闫卫东、赵明华、许福、施新刚、 郑刚、李现勇、谭思量、邹超群、郭瑞军、宋文超、彭坷珂 张东胜、孙莉莉、刘灵波、刘兵、李英浩、张宏林等。在此,谨向他们的辛勤劳动表示衷心的感谢。 由于水平有限,加之时间仓促,书中难免有不妥之处。恳请读者批评指正,本书责任编辑的电子信 箱为 zhanglike@ptpress.com.cn,欢迎联系讨论。 配套光盘使用说明 1.运行环境 硬件环境:奔腾主频 200MHz,内存 32MB 以上。 软件环境:Windows 95/98/2000/NT/XP,Microsoft Vsiaul C++ 6.0。 2.说明 为了方便读者学习,我们将书中所有的源代码以及用到的图像都收录在本书的配套光盘中,相信一 定会对大家的学习和应用有所帮助。 编者 目 录 第 1 章 位图基础知识...........................................................................................................1 1.1 引言 .........................................................................................................................1 1.2 数字图像的基本概念 ..............................................................................................2 1.3 颜色和调色板..........................................................................................................4 1.3.1 颜色.................................................................................................................4 1.3.2 调色板的基本概念 .........................................................................................7 1.3.3 调色板的操作.................................................................................................8 1.4 与设备相关位图....................................................................................................13 1.5 与设备无关的位图 ................................................................................................18 1.5.1 DIB 位图的结构 ...........................................................................................18 1.5.2 Win32 SDK DIB 位图操作函数...................................................................21 1.5.3 自定义 DIB 位图函数 ..................................................................................25 第 2 章 构造 CDib 类 ..........................................................................................................31 2.1 CDib 类的总体设计 ..............................................................................................31 2.1.1 CDib 类的基本功能 .....................................................................................31 2.1.2 CDib 类基本操作函数..................................................................................32 2.2 基于 CDib 类的其他操作函数..............................................................................68 第 3 章 图像感知与获取.....................................................................................................73 3.1 视觉基础................................................................................................................73 3.1.1 视觉系统.......................................................................................................73 3.1.2 视觉模型.......................................................................................................75 3.2 图像获取................................................................................................................77 3.3 图像采样................................................................................................................78 3.3.1 确定性图像场抽样 .......................................................................................78 3.3.2 随机图像取样...............................................................................................80 3.4 量化 .......................................................................................................................82 3.5 图像显示................................................................................................................86 3.5.1 图案法显示...................................................................................................86 3.5.2 图案法显示图像的 Visual C++实现 ............................................................88 3.5.3 随机抖动法显示图像 ...................................................................................91 3.5.4 随机抖动法显示图像的 Visual C++实现 ....................................................92 第 4 章 图像增强.................................................................................................................97 4.1 对比度增强............................................................................................................97 4.1.1 灰度变换法...................................................................................................97 4.1.2 直方图修整法.............................................................................................100 Visual C++数字图像获取、处理及实践应用 · 2· 4.1.3 Visual C++编程实现 ..................................................................................102 4.2 图像平滑..............................................................................................................130 4.2.1 模板操作.....................................................................................................130 4.2.2 图像平滑技术.............................................................................................134 4.2.3 Visual C++编程实现 ..................................................................................137 4.3 图像锐化..............................................................................................................173 4.3.1 微分方法.....................................................................................................174 4.3.2 高通滤波方法.............................................................................................175 4.3.3 Visual C++编程实现 ..................................................................................175 4.4 伪彩色和假彩色增强 ..........................................................................................192 4.4.1 伪彩色和假彩色增强技术 .........................................................................192 4.4.2 Visual C++编程实现 ..................................................................................192 第 5 章 图像复原...............................................................................................................201 5.1 图像退化的数学模型 ..........................................................................................201 5.1.1 退化系统的基本定义 .................................................................................202 5.1.2 连续函数的退化模型 .................................................................................202 5.1.3 离散函数的退化模型 .................................................................................203 5.2 运动模糊图像复原 ..............................................................................................206 5.2.1 由匀速直线运动引起的图像模糊..............................................................206 5.2.2 运动模糊图像复原的 Visual C++实现 ......................................................208 5.3 非约束复原..........................................................................................................218 5.3.1 非约束复原的基本方法 .............................................................................218 5.3.2 逆滤波复原.................................................................................................219 5.3.3 逆滤波复原的 Visual C++实现..................................................................220 5.3.4 维纳滤波方法.............................................................................................231 5.3.5 维纳滤波的 Visual C++实现......................................................................233 5.4 约束复原..............................................................................................................244 第 6 章 图像处理中的正交变换 ....................................................................................245 6.1 傅立叶变换..........................................................................................................245 6.1.1 傅立叶级数.................................................................................................245 6.1.2 连续变量的傅立叶变换及其性质..............................................................246 6.1.3 离散傅立叶变换及其性质 .........................................................................249 6.1.4 快速傅立叶变换.........................................................................................250 6.1.5 二维图像的快速傅立叶变换 .....................................................................253 6.1.6 二维图像快速傅立叶变换的 Visual C++程序实现...................................253 6.2 离散余弦变换(DCT) ......................................................................................272 6.2.1 离散余弦变换定义 .....................................................................................272 6.2.2 离散余弦变换的计算 .................................................................................274 目录 · 3· 6.2.3 离散余弦变换的 Visual C++实现..............................................................275 6.3 沃尔什变换..........................................................................................................282 6.3.1 沃尔什函数.................................................................................................283 6.3.2 离散沃尔什变换.........................................................................................288 6.3.3 快速沃尔什变换.........................................................................................289 6.3.4 沃尔什-哈达玛变换的 Visual C++实现 ..................................................292 6.4 基于特征向量的变换 ..........................................................................................299 6.4.1 特征分析.....................................................................................................299 6.4.2 主向量分析(PCA) .................................................................................299 6.4.3 霍特林(Hotelling)变换 ..........................................................................300 6.4.4 SVD 变换....................................................................................................302 6.4.5 霍特林变换的 Visual C++实现..................................................................303 6.5 小波变换..............................................................................................................316 6.5.1 连续小波变换.............................................................................................317 6.5.2 离散小波变换.............................................................................................319 6.5.3 二进小波变换.............................................................................................320 6.5.4 小波变换的多分辨率分析 .........................................................................320 6.5.5 Mallat 算法 .................................................................................................321 6.5.6 小波变换的 Visual C++实现......................................................................323 第 7 章 图像压缩编码.......................................................................................................338 7.1 图像压缩编码理论基础 ......................................................................................338 7.2 图像编码分类......................................................................................................340 7.3 霍夫曼(Huffman)编码....................................................................................341 7.3.1 霍夫曼编码理论及算法 .............................................................................341 7.3.2 霍夫曼编码的 Visual C++实现..................................................................343 7.4 香农-费诺(Shannon-Fano)编码 ...................................................................353 7.4.1 香农-费诺编码的理论及算法 .................................................................353 7.4.2 香农-费诺码的 Visual C++实现..............................................................354 7.5 算术编码..............................................................................................................366 7.5.1 算术编码的理论及算法 .............................................................................367 7.5.2 算术编码的 Visual C++实现......................................................................369 7.6 游程编码(Run Length Coding).......................................................................377 7.6.1 基本原理.....................................................................................................377 7.6.2 PCX 文件格式及其编码方法.....................................................................378 7.6.3 编程实现 PCX 文件格式的读写................................................................380 7.7 位平面编码..........................................................................................................380 7.7.1 位编码理论.................................................................................................380 7.7.2 位平面编码的 Visual C++实现..................................................................382 7.8 预测编码..............................................................................................................385 Visual C++数字图像获取、处理及实践应用 · 4· 7.8.1 DPCM 的基本原理.....................................................................................385 7.8.2 预测编码的类型.........................................................................................386 7.8.3 预测编码的 Visual C++实现......................................................................387 7.9 JPEG 2000 编码...................................................................................................401 7.9.1 JPEG 2000 概述..........................................................................................402 7.9.2 JPEG 2000 图像编解码系统 ......................................................................403 7.9.3 JPEG 2000 图像压缩码流格式 ..................................................................407 第 8 章 图像配准...............................................................................................................409 8.1 图像配准理论基础 ..............................................................................................409 8.1.1 图像变换.....................................................................................................409 8.1.2 相似性测度.................................................................................................410 8.1.3 插值.............................................................................................................412 8.1.4 最小二乘法.................................................................................................412 8.2 图像配准中常用的技术 ......................................................................................413 8.2.1 点映射.........................................................................................................413 8.2.2 基于弹性模型的匹配 .................................................................................414 8.2.3 特征空间的选择.........................................................................................414 8.2.4 相似性测度的选择 .....................................................................................414 8.2.5 搜索空间和策略的选择 .............................................................................415 8.3 Visual C++编程实现图像配准............................................................................415 第 9 章 目标检测与运动检测 ...........................................................................................457 9.1 静止背景下的运动目标检测 ..............................................................................457 9.1.1 背景恢复.....................................................................................................458 9.1.2 基于静止背景的运动目标提取 .................................................................458 9.2 运动背景下的运动目标检测 ..............................................................................459 9.2.1 光流方法.....................................................................................................459 9.2.2 全局运动预测.............................................................................................460 9.2.3 基于块的运动检测方法 .............................................................................461 9.3 Visual C++编程实现 ...........................................................................................463 第 10 章 图像形状特征分析.............................................................................................475 10.1 图像的矩............................................................................................................475 10.1.1 矩的定义...................................................................................................475 10.1.2 Visual C++编程求图像的矩.....................................................................476 10.2 图像的空穴检出 ................................................................................................481 10.2.1 定义及算法...............................................................................................481 10.2.2 空穴检出的 Visual C++实现....................................................................481 10.3 图像的骨架检出 ................................................................................................489 10.3.1 图像的市街区距离 ...................................................................................489 目录 · 5· 10.3.2 图像骨架提取的 Visual C++实现............................................................489 10.4 轮廓提取............................................................................................................499 10.4.1 基本概念...................................................................................................499 10.4.2 Visual C++实现 ........................................................................................499 第 11 章 图像分割.............................................................................................................504 11.1 图像分割研究....................................................................................................504 11.1.1 图像分割定义 ...........................................................................................504 11.1.2 图像分割的方法.......................................................................................505 11.2 并行边界分割....................................................................................................506 11.2.1 边界检测的数学基础 ...............................................................................507 11.2.2 数字图像的边界检测 ...............................................................................508 11.2.3 并行边界分割的 Visual C++实现............................................................509 11.3 串行边界分割....................................................................................................528 11.3.1 边界跟踪...................................................................................................529 11.3.2 边界跟踪的 Visual C++实现....................................................................530 11.4 并行区域分割....................................................................................................535 11.4.1 阈值分割...................................................................................................535 11.4.2 自适应阈值选取.......................................................................................537 11.4.3 阈值分割的 Visual C++实现....................................................................538 11.5 串行区域分割....................................................................................................546 11.5.1 区域生长...................................................................................................546 11.5.2 分裂合并...................................................................................................548 11.5.3 区域生长的 Visual C++实现....................................................................548 11.6 Canny 算子 ........................................................................................................553 11.6.1 Canny 算子介绍........................................................................................553 11.6.2 Canny 算子的 Visual C++实现 ................................................................553 第 12 章 图像的模式识别.................................................................................................573 12.1 图像匹配............................................................................................................573 12.1.1 模板匹配...................................................................................................574 12.1.2 其他快速匹配方法 ...................................................................................577 12.2 统计模式识别....................................................................................................582 12.2.1 决策理论方法 ...........................................................................................582 12.2.2 统计分类法...............................................................................................587 12.2.3 特征的提取和选择 ...................................................................................591 12.3 线性分类器........................................................................................................592 12.3.1 Fisher 判别准则 ........................................................................................592 12.4 Visual C++编程实现 .........................................................................................595 第第 11 章章 位位图图基基础础知知识识 人类通过眼、耳、鼻、舌、身接受信息,感知世界,并进而认识世界和改造世界。据统计,约有 70% 的信息是通过视觉系统获取的。粗略地说,图像是二维或三维景物呈现在人心目中的影像。如果接受并 加工这种视觉信息的是电子计算机,则我们称之为计算机图像处理和识别。 近年来,由于计算机技术的迅猛发展,计算机的速度越来越快,图像处理系统的价格日益下降,从 而使图像处理得以广泛应用于众多的科学与工程领域,如遥感、工业检测、医学、气象、侦察、通信、 智能机器人等。这些技术正在明显地改变着人们的生产手段和生活方式。传统的生产、管理、教育等, 正向信息化、多样化转变。 正因为图像有着如此多的应用,如此与我们的工作和生活方式息息相关,所以有必要对图像和图像 技术进行深入细致的研究。在 Windows 环境中最重要的图像就是位图。在计算机处理中,位图的概念可 以和图像等同。后面的叙述中,经常用到图像和位图,如不加特殊说明,可以认为它们是相同的。本章 先讨论数字图像的基本概念以及 VC 中有关位图的知识。 本章的内容安排是:在引言中,介绍图像处理技术的基本类别,然后介绍数字图像的基本概念,色 度系统和调色板的概念将在 1.3 节中叙述,1.4 节和 1.5 节介绍 VC 中的 DDB(设备相关位图)和 DIB(设 备无关位图)。 1.1 引言 人们用各种技术方式和手段对图像进行加工以获得重要信息。图像技术从广义上可看作是各种图像 加工技术的总称,它包括利用计算机和其他电子设备进行和完成的一系列工作,例如图像采集、获取、 编码、存储和传输,图像的合成和产生,图像的显示、绘制和输出,图像变换、增强、恢复和重建,特 征的提取和测量,目标的检测、表达和描述,序列图像的校正,图像数据库的建立、索引、查询和抽取, 图像的分类、表示和识别,3D 景物的重建复原,图像模型的建立,图像知识的利用和匹配,图像和场景 的解释和理解,以及基于它们的推理、判断、决策和行为规划,等等。另外图像技术还包括为完成上述 功能而进行的硬件和系统设计及制作等方面的技术。本书所涉及到的图像处理技术主要包括以下的内容。 图像增强:图像增强是用以改善供人观看的图像的主观质量,而不一定追究图像降质的原因。直方 图修正,强化图像轮廓等都是常用手段。由于接受者是人,所以质量好坏就受观看者的心理、爱好、文 化素质等因素的影响,评判只能是相对的。 图像复原(也叫图像恢复):图像恢复则需要找出图像降质的起因,并尽可能消除它,使图像恢复本 来面目。常用的恢复有纠正几何失真、从已知图像信号和噪声的统计特性入手,用 Wiener 滤波等方法来 改善信噪比。 图像变换:图像处理的方法可以分为两大类:空域法和频域法。其中频域法也称为变换域法。在频 域法中最为关键的预处理就是图像变换。这种变换一般是线性变换,其基本线性运算是严格可逆的,并 且满足一定的正交条件,因此,也将其称为酉变换。常用的图像变换有傅立叶变换、DCT 变换,小波变 换等。 图像编码:二维形式呈现的数字图像,其信息量很大,给传输、处理、存储、显示等都带来了不少 问题。另一方面,图像中又有很大冗余信息,根据香农(Shannon)的率失真理论。不论在传输或存储时, 都可对数字图像进行一定方式编码,删除其中冗余信息,实现不失真压缩,或在容许失真限度内的进行 有失真压缩,以换取更大的压缩率。对于供人观看的图像,如电视信号,这时人是通信系统中的一环,Visual C++数字图像获取、处理及实践应用 · 2· 人的视觉特性,如掩盖效应,对灰度分辨率和空间分辨率的有限性等,也可以用来为压缩服务。 图像配准:图像配准可以近似地看成匹配的过程。简单地说就是根据图像的某些区域或者特征,在 另一幅图像中找到对应的区域或者特征。图像配准在图像识别、图像拼接、三维图像的重建等方面有着 重要的应用。 图像分析和特征提取:图像分析(或称为图像理解)可看作是一个描述过程,主要研究用自动或半 自动装置和系统,从图像中提取有用的测度、数据或信息,生成非图像的描述或者表示,这是当前图像 处理与识别领域中一个最为活跃的分支。图像分析并不仅仅是给景物中的诸区域在一定数目的已知类别 中进行分类,还要对千变万化和难以预测的复杂景物加以描述。图像分析常常依靠某种知识来说明景物 中物体与物体、物体与背景之间的关系。利用人工智能技术在分析系统中进行各层次控制和有效地访问 知识库正在被越来越普遍地采用。图像分析的内容分为特征提取、符号描述、目标检测、景物匹配和识 别等几个部分。图像特征是指图像场中可用作标志的属性,其中有些是视觉直接感受到的自然特征,如 区域的亮度、彩色、纹理或轮廓等等,有些是需要通过变换或测量才可得到的人为特征,如各种变换频 谱、直方图、矩等。图像特征提取就是从图像中提取出某些可能涉及到高层语义信息的图像特征,以进 行后续的分析。 目标和运动检测:目标检测是运动分析领域的一项重要研究内容。在监控系统、控制系统、仿真系 统以及识别系统中,目标检测都扮演着重要的角色。目标检测按照有无人的参与可以分成两类:第一是 自动目标检测,这种检测方式在实现的过程中不需要加入额外的信息;第二是交互目标检测,这种检测 方式在实现过程中需要加入一些交互信息,从而实现更为精确的目标提取。 图像分割:人能方便地从一幅图像中找出感兴趣的物体或区域,而要让计算机做到这一点却需要给 它以客观测度,使之按照灰度、颜色或几何性质等把一些物体或区域加以分离,这称之为图像分割。 形状描述:对于已经分离出来的区域或物体边界,用适当的数学语言(如图论、句法、形态学等) 来表示其统计或者区域之间的关系,得出一种简练的表达方式,这叫做描述。如果我们只对物体的形状 感兴趣,并对形状进行描述,则为形状描述。 图像识别:视觉识别是人和动物的眼-脑系统固有的功能,它是在长期的进化中形成的。人的知识、 生活经验使其在头脑中建立起为数巨大的物体模型和常识供识别使用。但指望计算机能代替人类完成各 种复杂工作和识别景物,就必须赋予它有近于人的视觉功能和识别能力。由于对人的视觉机理至今研究 得仍然不够,完善的视觉模型尚未建立,因而,目前用图像处理和识别技术能识别的景物是相对简单的。 模板匹配、统计识别等是一些常用的识别方法。 数字图像处理的应用越来越广,数字图像处理包含的内容也越来越多。当然,数字图像处理包含的 内容远远不止上述这些,但由于篇幅有限,就不在本书中进行讨论了。读者可以从其他的数字图像处理 书中获取相关的知识。 Visual C++是 Microsoft 公司推出的开发 Win 32 环境程序,是面向对象的可视化集成编程系统。它 不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序 (应用程序、动态链接库、ActiveX 控件等)等优点,而且通过简单的设置就可使其生成的程序框架支持 数据库接口、OLE 2、 WinSock 网络、3D 控制界面。由于 Visual C++本身就是一个图形的开发界面,它 提供了丰富的关于位图操作的函数,为开发图像处理系统提供了极大的方便。因此,它现在已经成为开 发 Win32 程序,包括图像处理程序的主要开发工具。本书不对 Visual C++进行全面的介绍,只对其中与 数字图像处理相关的内容进行说明。为此,假设本书的读者都具有一定的 Visual C++基础。在本书后续 的章节中,结合 Visual C++的开发环境,对图像处理技术进行详细叙述,并给出编程实例。 1.2 数字图像的基本概念 人眼看到的任何自然界的图像都是连续的模拟图像,其形状和形态表现由图像各位置的颜色决定。第 1 章 位图基础知识 · 3· 当我们从某一点观察景物时,物体所发出的光线进入人眼,在人眼的视网膜上成象,该像反映了客观景 物的亮度和颜色随空间位置的变化,因此它是空间坐标的函数。所谓图像,就是视觉景物的某种形成的 表示和记录。我们都熟悉彩色或黑白照片。黑白(或称单色)照片记录了景物中每点的亮度,而彩色照 片不仅记录亮度还记录颜色。在传统的摄影技术中,记录的机制是化学反应,它取决于落在胶片上的光 线和胶片本身的化学特性。随着科学技术的发展,人类不仅能够获得并记录那些人眼可见的图像信息, 而且可以利用非可见光和其他手段成像,并转换成人眼可见的图像,如 X 射线成像,红外成像,超声成 像等,这就使人的视觉能力大大地增强和延伸。 一幅平面图像所包含的信息首先表现为光的强度(Intensity),它是随空间坐标(x, y),光线的波长 u 和时间 t 而变化的,因此图像函数可以表示为 ),,,( tuyxfI = 若只考虑光的能量而不考虑它的波长,在视觉效果上只有黑白深浅之分,而无彩色变化,这时称为 黑白图像(灰度图像),则图像模型可表示为 0 (,,) (,,,)()dI fxyt fxyutVuu ∞= = ∫ 其中 V(u)为相对视敏函数。 当考虑不同波长光的彩色效应,则为彩色图像。根据三基色的原理,任何一种彩色可分解为红、绿、 蓝三种基色,所以彩色图像可表示为 )},,(),,,(),,,({ tyxBtyxGtyxRI = 其中: 0 (,,) (,,,)()dRxyt fxyutRuu ∞= ∫ 0 (,,) (,,,)()dGxyt fxyutGuu ∞= ∫ 0 (,,) (,,,)()dBxyt fxyutBuu ∞= ∫ 其中 R(u)、G(u),B(u)分别为 R、G、B 三基色的视敏函数。 当图像内容随时间变化时,称为时变图像或运动图像。当图像内容不随时间变化时,称为静止图像。对 灰度图像而言,其函数为 ),( yxfI = 作为数字图像处理的基础,本书中的很多算法就主要针对灰度静止图像 ),( yxf 进行讨论的。 由于人眼和其他成像系统视野有限,因此图像在空间上是有界的,其取值区域通常定义为矩形,即 Mx ≤≤0 My ≤≤0 图像函数在某一点的值常称为强度或灰度,它与图像在该点的亮度相对应,并用正实数表示,而且 这个数值的大小是有限的,即 Byxf ≤≤ ),(0 其中 B 表示最大亮度。 由于计算机仅能处理离散的数据,所以如要用计算机来处理图像,则连续的图像函数必须转换为离 散的数据集,这一过程叫做数字图像采集。数字图像采集由图像采集系统完成,经过成像、采样和量化Visual C++数字图像获取、处理及实践应用 · 4· 得到数字图像。其中,采样是对空间坐标的量化过程,量化则是对图像函数值的离散化过程。采样和量 化统称为数字化。关于图像采集系统的详细内容,将在第 3 章中进行详细叙述。数字化后的图像一般都 用二维矩阵进行表示。图 1-1 中一幅普通的黑白位图,图 1-2 是被放大后的图,图中每个方格代表了一 个像素,我们可以看到:整个圆就是由这样一些黑点和白点组成的。 图 1-1 圆 图 1-2 放大后的圆位图 1.3 颜色和调色板 1.3.1 颜色 根据人眼结构,所有颜色都可看作是 3 个基本颜色——红( R,red),绿(G,green)和蓝(B,blue) —— 的不同组合。 区分颜色常用 3 种基本特性量:亮度、色调和饱和度。色调和饱和度合起来称为色度。颜色可用亮 度和色度共同表示。当把红、绿、蓝三色光混合时,通过改变三者各自的强度比例可得到白色以及其他 各种色调和饱和度的彩色。 C ≡ rR + gG + bB 其中 C 代表某一特定色,≡ 表示匹配,R,G,B 表示三原色,r,g,b 代表比例系数,且有 r + g + b = 1 1931 年 CIE 制定了色度图(见图 1-3),用组成某种颜色的三原色的比例来规定这种颜色。 1.0 0.6 0.4 0.2 0.4 0.6 0.8 1.0 0.0 0.8 0.2 520 540 510 550 560 570 580 590 600 530 700~770 620 500 490 480 470 460 绿 黄 红 蓝 紫 400 图 1-3 色度图示意 第 1 章 位图基础知识 · 5· 1 种颜色可用 3 个基本量来描述,所以建立颜色模型就是建立 1 个 3-D 坐标系统,其中每个空间点 都代表某 1 种颜色。 目前常用的颜色模型可分两类。 1. RGB 模型 这个模型基于笛卡尔坐标系统,3 个轴分别为 R、G、B,如图 1-4 所示。 R G B (0,1,0) (1,0,0) b m c 黑 yr 白 g (0,0,1) 图 1-4 RGB 模型 2. HSI 模型 这个模型基于两个重要的事实:其一,I 分量与图像的彩色信息无关;其二,H 和 S 分量与人感受 颜色的方式是紧密相连的。 HSI 模型中的各分量可定义在如图 1-5(a)所示的双棱锥中,其中每个横截面如图 1-5(b)所示。对 其中的任一个色点 P,其 H 的值对应指向该点的矢量与 R 轴的夹角。这个点的 S 与指向该点的矢量长成 正比,越长越饱和。 H 黑 B R G I 白 B H GR P Y M C (b)(a) P 图 1-5 HSL 模型 3. 颜色模型转换 对任何 3 个在[0, 1]范围内的 R、G、B 值,其对应 HSI 模型中的 I、S、H 分量可分别由下面给出的 公式计算: Visual C++数字图像获取、处理及实践应用 · 6· ()BGRI ++= 3 1 [ ]),,min()( 31 BGRBGRS ++−= ()()[] ()()()[]       −−+− −+−= 21 2 2 arccos BGBRGR BRGRH 若设 S,I 的值在[0, 1]之间,R,G,B 的值也在[0, 1]之间,则从 HSI 到 RGB 的转换公式为(分成 3 段以利用对称性): (1) 当 H 在[0°, 120°]之间: )1( SIB −=       − += )60cos( cos1 H HSIR  )(3 RBIG +−= (2) 当 H 在[120°, 240°]之间: )1( SIR −=         − −+= )180cos( )120cos(1 H HSIG   )(3 GRIB +−= (3) 当 H 在[240°, 360°]之间: )1( SIG −=       − −+= )300cos( )240cos(1 H HSIB   )(3 BGIR +−= 图 1-6 给出一组用灰度图形式表示彩色图像的例子,其中图 1-6(a)、图 1-6(b)、图 1-6(c)分别为 1 幅 彩色图像的 R,G,B 分量(每个分量用 8 bit 表示),图 1-6(d)、图 1-6(e)、图 1-6(f )分别为这幅彩色图像 的 H、S、I 分量(每个分量也各用 8 bit 表示)。 (a) (b) (c) 第 1 章 位图基础知识 · 7· (d) (e) (f) 图 1-6 彩色图像的 RGB 和 HSL 各分量图示 1.3.2 调色板的基本概念 现实世界的颜色种类是无限的,但计算机显示系统所能表现的颜色数量有限,因此,为了使计算机 能最好地重现实际图景,就必须用一定的技术来管理和取舍颜色。 Windows 提供了一个独立于硬件的颜色接口。程序提供了一个“绝对的”颜色码,Windows 把这个 代码映射成计算机显示器上适当的颜色或颜色组合。对于一些常见的显示卡,大多数 Windows 程序都会 优化应用程序的颜色显示。在计算机中,常用的显示卡有: 标准视频图形阵列显示卡(VGA):标准视频图形阵列(VGA)显示卡使用 18 位的颜色寄存器,因 此有一个 262 144 种颜色的调色板。然而,由于显存的限制,标准 VGA 卡采用 4 色代码,这意味着,它 一次只能显示 16 种颜色。因为 Windows 对标题、边框、滚动条等需要固定的颜色,程序就可以只使用 16 种“标准”的纯色。但并不能方便地使用显示卡显示的其他颜色。