新書推薦:
《
情绪传染(当代西方社会心理学名著译丛)
》
售價:HK$
88.5
《
中国年画 1950-1990 THE NEW CHINA: NEW YEAR PICTURE 英文版
》
售價:HK$
236.0
《
革命与反革命:社会文化视野下的民国政治(近世中国丛书)
》
售價:HK$
93.2
《
画楼:《北洋画报》忆旧(年轮丛书)
》
售價:HK$
337.5
《
大国脊梁:漫画版
》
售價:HK$
80.2
《
跟着渤海小吏读历史:大唐气象(全三册)
》
售價:HK$
189.0
《
心智的构建:大脑如何创造我们的精神世界
》
售價:HK$
81.4
《
美国小史(揭秘“美国何以成为美国”,理解美国的经典入门读物)
》
售價:HK$
81.4
|
內容簡介: |
《数字图像处理:技术详解与Visual C++实践含CD光盘1张》全面系统地讲述了数字图像处理领域中的15 大核心话题,包括色彩空间、图像编码、频域变换、图像文件格式、几何变换、灰度变换、图像的增强处理、边缘检测、轮廓跟踪、形态学处理、图像分割、图像的加密与隐藏、小波变换、偏微分方程以及图像去噪等。为了便于学习与实践,基于自行开发的MagicHouse 平台,本书提供了全部算法的完整编码实现,并在Visual C++ 2005 环境下调试通过。借此,《数字图像处理:技术详解与Visual C++实践含CD光盘1张》也向读者全面详尽地介绍了Visual C++下进行数字图像处理编程的技术和方法。
《数字图像处理:技术详解与Visual C++实践含CD光盘1张》源于实践、贴近应用、深入浅出、通俗易懂,既可以作为希望进行数字图像处理学习和研究的初学者的自学教材,也可以作为大专院校计算机及相关专业师生或工程技术人员的参考书。
|
關於作者: |
左飞,服务于中国规模最大的移动通信运营商,业余时间他撰写了多部计算机方面的著作,并译有《编码》、《提高C++性能的编程技术》等经典名著。
|
目錄:
|
第1 章 绪论.................................................1
1.1 数字图像处理概述...........................1
1.1.1 图像与数字图像..................1
1.1.2 数字图像处理研究的内容...................3
1.1.3 数字图像处理的应用......................5
1.2 Visual C++概述................................6
1.2.1 Visual C++简介..................................6
1.2.2 卓越的集成开发环境...........................9
1.3 在Visual C++中处理数字图像.........................12
1.3.1 位图和调色板.........................................13
1.3.2 图形设备接口................................14
1.4 本章实例:利用Visual C++实现画图程序....................16
1.4.1 实例预览......................................16
1.4.2 开始创建项目....................17
1.4.3 完成实例编码....................19
第2 章 色彩系统.....................................25
2.1 学习图像处理从认识色彩开始................25
2.1.1 什么是颜色........................25
2.1.2 颜色的属性........................27
2.1.3 光源能量分布图................28
2.2 CIE 色度图.....................................30
2.2.1 CIE 色彩模型的建立.................30
2.2.2 CIE 色度图的理解.......................32
2.2.3 CIE 色度图的后续发展.............33
2.3 常用的色彩空间.............................34
2.3.1 RGB 颜色空间...................34
2.3.2 CMYCMYK 颜色空间.................35
2.3.3 HSVHSB 颜色空间......................37
2.3.4 HSIHSL 颜色空间............................38
2.3.5 Lab 颜色空间..............................40
2.3.6 YUVYCbCr 颜色空间.................40
2.4 色彩空间的转换方法............................41
2.4.1 RGB 转换到HSV 的方法...................42
2.4.2 RGB 转换到HSI 的方法...............42
2.4.3 RGB 转换到YUV 的方法..............44
2.4.4 RGB 转换到YCbCr 的方法.................45
2.5 本章实例:Photoshop 色彩编辑器的实现................46
2.5.1 需要解决的若干问题..................46
2.5.2 开始创建项目......................48
2.5.3 完成实例编码...........................49
第3 章 图像的变换与编码...................51
3.1 图像编码的理论基础.....................51
3.1.1 率失真函数........................51
3.1.2 香农下边界.........................60
3.1.3 无记忆高斯信源................63
3.1.4 有记忆高斯信源................67
3.2 图像的压缩编码.............................74
3.2.1 行程编码............................74
3.2.2 LZW 编码..........................75
3.2.3 霍夫曼编码........................77
3.3 傅里叶变换.....................................83
3.3.1 傅里叶变换的数学基础............83
3.3.2 傅里叶变换与傅里叶级数的关系.................86
3.3.3 数字图像的傅里叶变换..................92
3.3.4 快速傅里叶变换的算法........94
3.3.5 编程实现图像的快速傅里叶变换...................99
3.4 离散余弦变换...............................105
3.4.1 基本概念及数学描述...................105
3.4.2 离散余弦变换的意义.................107
3.4.3 离散余弦变换的实现...................109
3.5 子带编码.......................................111
3.5.1 数字信号处理基础....................112
3.5.2 多抽样率信号处理...................115
3.5.3 图像的子带分解.....................124
第4 章 使用DIB 处理数字图像....................130
4.1 设备相关位图和设备无关位图...............130
4.1.1 设备相关位图(DDB)...................130
4.1.2 设备无关位图(DIB)........................130
4.2 CBitmap 类...................................131
4.2.1 创建DDB..........................131
4.2.2 CBitmap 中的成员函数...........133
4.2.3 应用DDB 显示图像..................134
4.2.4 应用DDB 显示大图像............135
4.3 进一步了解DIB............................143
4.3.1 DIB 的结构......................143
4.3.2 DIB 信息段......................143
4.3.3 位图数据..........................145
4.3.4 与DIB 有关的函数.........145
4.4 本章实例:DIB 类的封装.....................147
4.4.1 类的抽象与设计..............148
4.4.2 编写构造函数..................150
4.4.3 DIB 位图的显示..............154
4.4.4 BMP 文件的存储.............155
第5 章 使用GDI+处理数字图像.............157
5.1 GDI+简介.....................................157
5.1.1 GDI+概述.........................157
5.1.2 GDI+的结构.....................158
5.1.3 GDI+在Visual C++ 2005 中的配置................158
5.2 GDI+基础.....................................160
5.2.1 Graphics 类.......................160
5.2.2 GDI+的基本数据类型...................162
5.2.3 GDI+中的颜色...........................164
5.3 GDI+处理图像的基本方法....................165
5.3.1 GDI+的图像类..........................166
5.3.2 创建图像对象.........................167
5.3.3 图像的显示和缩放..........169
5.3.4 图像的基本处理方法............174
5.4 图像的剪裁....................................182
5.4.1 剪裁区域............................182
5.4.2 GraphicsPath 类...................183
5.4.3 Region 类..........................187
5.5 处理图像的色彩...............................191
5.5.1 ColorMatrix 结构体...............191
5.5.2 改变图像的透明度...............192
5.5.3 将图像转换为灰度图..................196
5.5.4 改变图像的亮度....................198
5.5.5 改变图像的对比度.......................200
5.6 本章实例:类似ACDSee 的图像浏览工具....................202
5.6.1 实例预览..........................203
5.6.2 概要设计..........................203
5.6.3 完成实例编码....................208
第6 章 图像文件的格式.........................212
6.1 图像文件概述.................................212
6.1.1 图像文件..............................212
6.1.2 图像文件的一般结构............213
6.1.3 图像文件的常用参数.........213
6.2 BMP 文件格式...................................215
6.2.1 文件结构...............................215
6.2.2 文件头和信息头..................215
6.2.3 主要参数.................................216
6.3 GIF 文件格式.....................................216
6.3.1 GIF 格式简介.....................216
6.3.2 GIF 文件结构.......................217
6.3.3 GIF 文件块的结构..............218
6.3.4 在GDI+下播放GIF 动画...............222
6.4 PNG 文件格式....................................227
6.4.1 PNG 格式简介............................227
6.4.2 PNG 文件结构.....................227
6.4.3 PNG 中的关键数据块...........229
6.5 JPEG 文件及其编解码的实现..........................230
6.5.1 JPEG 文件概述..........................230
6.5.2 JPEG 的编解码原理................230
6.5.3 JPEG 文件格式.......................239
6.5.4 JPEG 解码程序的实现.................242
第7 章 图像的点运算..............................248
7.1 灰度直方图简介..................................248
7.1.1 灰度直方图简介.......................248
7.1.2 基本原理.................................250
7.1.3 编程实现..............................250
7.2 灰度线性变换...................................259
7.2.1 基本原理.................................259
7.2.2 编程实现................................262
7.3 灰度非线性变换...............................265
7.3.1 灰度对数变换............................265
7.3.2 灰度幂次变换..........................269
7.3.3 灰度指数变换.......................271
7.4 灰度阈值变换......................................273
7.4.1 基本原理...............................273
7.4.2 编程实现...............................274
7.5 灰度拉伸.......................................276
7.5.1 基本原理...............................276
7.5.2 编程实现.................................278
7.6 灰度均衡..................................282
7.6.1 基本原理...............................283
7.6.2 编程实现.................................284
第8 章 对图像进行几何变换.................286
8.1 图像几何变换的基本理论...................286
8.1.1 图像几何变换概述...................286
8.1.2 图像几何变换的数学描述............289
8.2 图像的平移变换...................................289
8.2.1 效果预览...................................289
8.2.2 基本原理................................290
8.2.3 编程实现................................291
8.3 图像的镜像变换...............................295
8.3.1 效果预览...................................295
8.3.2 基本原理....................................296
8.3.3 编程实现...............................297
8.4 图像的转置........................................300
8.4.1 效果预览.............................300
8.4.2 基本原理................................300
8.4.3 编程实现...............................301
8.5 图像的缩放.......................................303
8.5.1 效果预览...................................303
8.5.2 基本原理................................304
8.5.3 插值算法介绍........................305
8.5.4 编程实现................................307
8.6 图像的旋转.......................................312
8.6.1 效果预览................................312
8.6.2 基本原理..................................313
8.6.3 编程实现.................................316
8.7 使用GDI+实现图像的几何变换................322
8.7.1 GDI+的变换操作....................323
8.7.2 平移.......................................324
8.7.3 缩放..........................................326
8.7.4 旋转.............................................327
8.7.5 变换的组合.................................331
8.7.6 利用矩阵进行其他几何变换............................333
第9 章 图像的增强处理.............................337
9.1 卷积积分与邻域处理............................337
9.1.1 理解卷积积分的概念.................337
9.1.2 卷积应用于图像处理的原理..................342
9.1.3 邻域处理的基本概念..............342
9.2 图像的简单平滑...................................345
9.2.1 图像的简单平滑原理..........................345
9.2.2 图像简单平滑的算法实现.....................346
9.3 图像的高斯平滑................................350
9.3.1 平滑线性滤波器...........................350
9.3.2 高斯平滑的原理........................351
9.3.3 高斯分布...................................352
9.3.4 高斯平滑的算法实现....................354
9.4 图像的中值滤波.....................................358
9.4.1 统计排序滤波器.......................358
9.4.2 图像中值滤波的原理................359
9.4.3 图像中值滤波的算法实现..............361
9.5 图像的拉普拉斯锐化.........................367
9.5.1 图像的锐化..........................367
9.5.2 拉普拉斯锐化的原理...............367
9.5.3 拉普拉斯锐化的算法实现..........368
9.6 Sobel 边缘细化..................................372
9.6.1 Sobel 边缘细化的原理................372
9.6.2 Sobel 边缘细化的算法实现............375
第10 章 图像的形态学处理..........................381
10.1 数学形态学.........................................381
10.2 一些必要的概念和符号约定.............381
10.3 图像的腐蚀........................................385
10.3.1 腐蚀原理.............................385
10.3.2 编程实现...................................388
10.4 图像的膨胀...........................................393
10.4.1 膨胀原理................................393
10.4.2 编程实现...............................395
10.5 腐蚀和膨胀的性质及应用..................399
10.5.1 腐蚀和膨胀的代数性质.............399
10.5.2 腐蚀和膨胀的应用..............401
10.6 开运算和闭运算................................407
10.6.1 开运算..................................407
10.6.2 闭运算..................................409
10.6.3 编程实现...............................410
10.6.4 开运算和闭运算的代数性质..................411
10.7 图像形态学的其他运算....................413
10.7.1 击中不击中运算.....................413
10.7.2 细化处理...............................416
第11 章 图像的边缘和轮廓.........................421
11.1 边缘检测.............................................421
11.1.1 边缘检测的基本概念.................421
11.1.2 常规边缘检测..............................423
11.1.3 带方向的边缘检测....................427
11.1.4 拉普拉斯算子..........................432
11.2 Hough 变换........................438
11.2.1 平面坐标系的转换.................438
11.2.2 Hough 变换的思想....................440
11.2.3 直线的Hough 变换.................441
11.2.4 圆的Hough 变换.........................444
11.2.5 彩色图像的Hough 变换................445
11.3 种子算法..............................................448
11.3.1 算法介绍..................................448
11.3.2 编程实现.....................................451
11.4 轮廓跟踪...............................................454
11.4.1 区域表示方法............................454
11.4.2 计算区域的面积和周长...........462
11.4.3 单区域跟踪............................464
11.4.4 多区域跟踪.............................467
11.5 基于形态学分水岭的图像分割...................469
11.5.1 基本概念....................................470
11.5.2 分水岭算法.............................470
11.5.3 编程实现分水岭分割.............473
第12 章 数字图像的加密与隐藏.............478
12.1 混沌理论概述.....................................478
12.1.1 混沌理论的发展.......................478
12.1.2 混沌的基本概念........................480
12.1.3 混沌的度量与判定...................482
12.2 几种典型的混沌系统举例.....................485
12.2.1 Logistic 映射................................485
12.2.2 Henon 映射..........................488
12.2.3 Chebychev 映射.....................488
12.3 数字图像的混沌加密简介..............489
12.3.1 密码学与混沌密码学.............489
12.3.2 图像混沌加密算法的分类...............490
12.4 基于置乱的图像加密技术......................491
12.4.1 数字图像与排列变换...........491
12.4.2 利用Hilbert 曲线置乱图像.................492
12.4.3 利用Arnold 变换置乱图像............495
12.4.4 数字图像置乱算法的评价..........499
12.5 混沌在图像加密中的应用..................499
12.5.1 以排序法为基础的混沌置乱..............500
12.5.2 基于起始地址法的混沌置乱........507
12.5.3 基于灰度值变换的混沌加密..................507
12.5.4 对图像进行混沌加密的评价.....................510
12.6 数字图像的隐藏技术............................514
12.6.1 图像融合技术简介......................515
12.6.2 基于混沌的图像隐藏算法............516
12.6.3 图形用户界面设计...............518
12.6.4 编码实现.............................518
第13 章 小波变换及其应用.....................519
13.1 哈尔函数与哈尔变换......................519
13.1.1 哈尔函数的定义..................519
13.1.2 哈尔函数的性质.................520
13.1.3 酉矩阵与酉变换...................521
13.1.4 二维离散线性变换.............521
13.1.5 哈尔基函数...........................523
13.1.6 哈尔变换................................525
13.2 小波的数学基础..............................529
13.2.1 小波的历史.........................529
13.2.2 理解小波的概念................530
13.2.3 多分辨率分析.....................532
13.2.4 小波函数的构建..................536
13.2.5 小波序列展开........................538
13.2.6 离散小波变换....................539
13.2.7 连续小波变换.....................540
13.2.8 小波的容许条件与基本特征............542
13.3 快速小波变换...................................543
13.3.1 快速小波正变换................543
13.3.2 快速小波逆变换..................547
13.3.3 图像的小波变换...................549
13.4 小波在图像处理中的应用.................551
第14 章 偏微分方程与图像降噪..............554
14.1 PM 方程及其应用..............................554
14.1.1 一维热传导方程...................554
14.1.2 各向异性扩散方程.................559
14.1.3 PM 扩散方程的实现............565
14.1.4 加性算子分裂.......................570
14.2 TV 方法及其应用...........................578
14.2.1 泛函与变分法......................578
14.2.2 全变分模型.........................581
14.2.3 TV 算法的数值实现...................583
14.2.4 基于TV 的图像降噪实例...............584
|
內容試閱:
|
1. 引子
本书是“Visual C++数字图像处理系列”的第三部。前两部图书《Visual C++数字图像处理开发入门与编程实践》和《数字图像处理原理与实践:基于Visual C++开发》自问世以来收获了颇多肯定,许多读者纷纷来信与笔者讨论技术问题,交流心得感想。此外,据不完全统计,前两部图书的科技文献参考引用量已经超过百余篇次。从这个侧面也可以看出有关书籍对读者的学习和研究的确产生了一定积极的作用,或者说读者能够从书中获得新知和启迪,这也是一直鼓舞我们的动力所在。
这一系列的书,一脉相承,有着共同的基础和相似的创作理念,但又各自有着不同的定位。《Visual C++数字图像处理开发入门与编程实践》是一本介绍如何运用Visual C++进行数字图像处理编程的入门书籍。全书所涉及的相关图像处理算法不是很多,而更多的篇幅则是在介绍如何用集成开发环境来进行编程。书中最鲜明的一个特点就是,即使在介绍图像处理算法时,也极少出现数学公式。《数字图像处理原理与实践:基于Visual C++开发》相对于第一部图书而言则提升了难度,涉及的问题也更广。更重要的是,第二版更侧重于实际开发,把在Visual C++中进行开发可能用到的一些函数库或者技术大概都讲到了,包括设备无关位图、GDI+、OpenCV 和ImageMagick 等。这些技术可以帮助读者更快捷地完成开发任务,真正做到事半功倍。
与前两部图书相同,本书依然在自行开发的MagicHouse 框架基础上来向读者介绍数字图像处理的有关理论和方法。但本书的理论性更强,内容也更全面。相对而言,本书的难度也最大。出于篇幅以及难度等方面的考虑,前两部图书无法对相关理论成果进行面面俱到的介绍,本书在很大程度上弥补了这一不足。因此,本书在保持系列作品突出实践的特色基础之上,详细地介绍了包括色彩空间、图像编码、频域变换、图像格式、几何变换、灰度变换、形态学处理、图像的增强处理、图像的边缘与轮廓检测、图像分割、图像的加密与隐藏、小波变换和偏微分降噪等10 多个主题,并配有完整的C++代码。可以说,本书更适合期望对相关理论进行系统学习和深入研究的读者。
2. Visual C++与Matlab
数字图像处理在航空航天、地质勘探、医疗影像、工业控制和影音娱乐等领域有着非常广泛的应用,同时也是大学相关专业高年级本科生和研究生的必修课。它常常与另外一门学科“计算机视觉”(或称机器视觉)联系在一起。但通常数字图像处理更侧重于对于图像的获取、处理、传输和表达,而计算机视觉则更侧重于对图像的分析和理解(典型内容包括特征分析和匹配、运动检测等)。二者之所以有如此紧密的联系,是因为对图像进行分析之前往往需要运用图像处理的有关方法对图像进行预处理。例如,运用SIFT 算法进行特征检测之前,需要运用高斯滤波方法来构建多尺度空间。
大学里许多专业都会学习图像处理这门课程。从大的方面来说,主要是计算机专业和电子信息专业(其实很多应用数学专业的学生所从事的方向也是数字图像处理)。如果去科技书店看看,你一定会发现,关于数字图像处理开发方面的书籍主要分为两大阵营,即Visual C++(或CC++)和Matlab。而且就实际出版的图书种类而言,Matlab 更具统治地位。通常而言,计算机专业的学生更倾向于使用Visual C++,一方面,因为编程本来就应该是他们的基本功之一;另一方面,计算机专业往往不会开设Matlab 相关课程。电子信息专业的学生则更倾向于Matlab,因为绝大部分这类专业在课程设置中都会有“信号与系统”和“数字信号处理”课,而这些课在教学时往往需要学生使用Matlab 来进行编程试验。当然,这里所说的仅仅是一般情况,不排除个别学校在具体教学安排中可能存在差异的情况。
其实说起Visual C++和Matlab 在图像处理领域的纷争,二者应该是各有千秋。Matlab很适合做科学研究。用Matlab 进行图像处理编程通常更加容易,代码也更简短。这是因为Matlab 中提供了许多现成的函数可以大大简化开发过程,用Matlab 开发甚至无须考虑内存的分配与回收问题。例如,本书的最后一章中给出了利用TV 模型进行图像降噪的源代码。有心的读者可以在网上搜索一下,因为基于PDE 的图像处理技术对数学要求较高,因此相关资料并不多见。基于TV 模型的降噪算法实现起来非常复杂,所以用C++写出的代码在网上几乎找不到,能够找到的几个资源完全是基于Matlab 的。这就是因为用Matlab 写,这个算法的实现编码量会大大缩减。
相对而言,使用Visual C++进行图像处理开发难度较大,需要考虑的问题更多,很多矩阵运算函数都需要自己编写。读入不同格式和类型的图像数据,然后进行解码这种问题也没有现成的方法。但是,Visual C++在工业开发中则更实用,例如,它可以直接开发应用于工业系统的嵌入式程序。而Matlab 开发的程序要想在实际中运用,诸如可移植性等问题表现欠佳。就学习而言,最初我建议大家应该从Visual C++入手。Matlab 用起来很简单、很方便,但是它掩盖了太多细节,不利于读者深入理解底层实现,也不利于读者打好基础。不积跬步,无以致千里。最初学习时如果基础不打牢,后续再讲什么创新其实都是纸上谈兵。在读者对底层实现比较清楚的情况下,进行后续的科学研究时,再去考虑使用Matlab可能才是明智的选择。
以图像编解码为例。在Matlab 中,只需一个函数就能将图片读入,然后得到一个现成的像素矩阵。在这个过程中,就忽略了很多细节。而在Visual C++中,如果不调用现成的函数库(例如OpenCV),那么就需要自己编写解码函数。这时就不得不去考虑不同图像格式的编码方案和算法,考虑图像文件在存储器上到底是如何存储的等问题。这时才会知道原来图像被写进存储器的时候不是简简单单的一个像素矩阵,原来还有调色板、文件头等内容。我经常喜欢拿武侠小说《天龙八部》中的一段情节来向读者说明此中的道理,相信读者对这部曾经被多次搬上银幕的金庸作品已经耳熟能详了。书中有个名叫鸠摩智的番僧一心想练就绝世武学,而且他也算是个相当勤奋的人了。但是,他错就错在太过于急功近利,甚至使用道家的小无相功来催动少林绝技。看上去威力无比,而且可以在短时间内“速成”,但实则后患无穷。最终鸠摩智走火入魔,武功尽失,前功尽废,方才大彻大悟。这个故事告诉我们基础其实非常重要,特别是要取得更长足的发展,就更是要对基本原理刨根问底,力求甚解,从而做到庖丁解牛,烂熟于心。
说到OpenCV,我也想再多谈两句。在Visual C++中引入OpenCV 无疑会大大降低开发强度,基本上就可以跟使用Matlab 的感觉差不多。这对那些并不十分熟悉Matlab,又苦于在Visual C++中进行图像处理编程太烦琐的开发人员来说,无疑是一个福音。在本系列的前两部作品中,笔者都有专门的章节来对OpenCV 进行解释。当然,一方面,因为OpenCV本身内容就比较多;另一方面,OpenCV 的版本还在不断地更新,容量也在不断地扩充,因此实在难于一言以蔽之。所以,笔者也只不过是抛砖引玉了。如果专门讲OpenCV,则完全可以写一本书。现在专门介绍OpenCV 的书很多,所以还是那句话:如果读者对于底层原理已经比较了解,但是对Matlab 不是特别熟悉,那么完全可以在Visual C++中结合OpenCV 进行编程开发。
3. 天书VS 儿歌三百首
数字图像处理的理论基础主要就是数学,而数学本身又是一个极其庞杂的系统,它的分支层出不穷,不计其数。读者现在所要学习的数字图像处理,至少涉及数学中三门主干的内容,即高等数学、线性代数和概率论。在本书中,读者会发现这些内容几乎无处不在,以高等数学中的泰勒公式为例,本书中就至少用到过三次。除了上述提到的大家在本科阶段就应学过的三门数学课程之外,本书还用到了复变函数、偏微分方程、泛函理论等内容。从这个角度说,数字图像处理对于很多学生而言,无异于“天书”。
不得不说现在很多学生都非常浮躁,做学问不求甚解,还妄图一蹴而就。学知识也是蜻蜓点水、浅尝辄止,看东西则是走马观花、浮光掠影,很难安下心来仔细研究。如果你写得比较专业,过于阳春白雪,那显然会看得人晕头转向,不知所云。但是如果你写得很通俗、很浅显,又会有人觉得自己都看懂了,就开始自以为是、洋洋得意起来,甚至会觉是作者水平太差,写的书都这么简单。对于这些人,我想借用毛主席的话来劝诫他们:“务必使同志们继续保持谦虚、谨慎、不骄、不躁的作风。”
霍金也说:“在书中每增加一条公式,读者就会流失一半”。如果你现在手捧着的是这样一部由公式罗列而成的天书,相信很多读者都会望而却步。本系列的第一部图书正是出于难度的考虑,大大削减了出现在书中的数学公式,如此一来,一些较为艰深的内容也一并被切掉了。当然,数学公式亦有数学公式的好处。从数学角度解释图像处理算法的原理,是深入到了算法本质层面的。如果不谈任何公式,然后把如何处理一张图片的方法用文字描述的方式告诉读者也不是不可能的,但是这其实只是让读者“知其然而不知其所以然”。这样的弊端就在于读者想进行更为深入的研究时,几乎难如登天。那么有没有什么方法能够缓和这两者之间的矛盾,而把“天书”写得如同《儿歌三百首》一样通俗易懂呢?
笔者一直以把复杂晦涩的理论写得深入浅出、浅显明了为终极目标。但是要做到这一点实非易事,为此笔者也进行了诸多探索。本书公式集中爆发在三个章节,这三个章节自也是全书最为复杂的部分,往往是读者学习上的薄弱环节和理解上的峻岭鸿沟。但本书绝非仅仅是简单地罗列公式,为了帮助读者打牢根基,融会贯通,在写本书时,笔者主要做了三项工作:首先,给足背景的铺垫,而非凭空丢来一个公式。例如,本书在介绍PM方程时,为了让读者能够真正理解它的原理,笔者是从一个简单的物理现象开始一步步引导读者进行学习的;其次,在给出公式的同时,笔者基本都给出了最为浅显的证明过程,而且力求过程之详细。例如,在率失真理论的介绍中,对于这部分公式的证明,国内教材都是以詹森不等式为基础的,但是读者不禁又困惑了,詹森不等式为什么会成立呢?所以笔者在这些地方完全摒弃了詹森不等式,而是用初等数学中的基本不等式来开展有关证明,这无疑会大大减少读者心中的困惑;最后,在某些时候我们可能需要的是严密的数学证明,而有些时候可能需要的是感性的认识。笔者试图将两者有机地结合在一起,需要严密的时候就尽量严密,需要感性的时候就努力感性。例如,我们在推导欧拉-拉格朗日方程时,其实证明过程并不完全严格,但是从读者对于该公式的理解以及后续学习的可开展性上,这种程度的解释可能才是最佳的方式。
尽管为了能把理论讲得更明白、更透彻,笔者查阅了许多资料,进行了诸多求索,但科技文章写作永远是留有遗憾的艺术。可能本书仍有许多未尽之处,可能本书还不能完全把天书降低到儿歌三百首那种地步,但笔者相信只要读者能够仔细研究,定能有所长进,有所收获。
4. 关于本书
本书既强调对于理论知识的深刻领悟,又突出编程实践的重要意义,为此配有大量的实例代码供读者参考学习。这些代码均是在MagicHouse 框架下完成的。MagicHouse 是笔者在Visual C++下开发的一个数字图像处理的算法试验平台。它可以从存储器上读取两种格式(BMP 和JPG)的图像,然后将图像解码成一个数组(也就是一个像素矩阵),再用一个指针指向它。开发者只要针对这个像素矩阵进行变换,MagicHouse 便可以将运算结果显示在屏幕上或者以两种格式中的任意一种存储在磁盘上。因此,在这个框架下进行算法试验是非常方便的。我们前面也讲过,对于图像读入并解码也是读者应该掌握的知识(当然还包括图像格式中色彩空间的使用),因此笔者也会带领读者一步步地完成MagicHouse的搭建和编码。这个过程本身也是砥砺编程能力、夯实知识基础的过程。
白居易说:“文章合为时而著,歌诗合为事而作。”他的意思是说,不管是写诗还是做文章都要有现实意义。其实写图像处理这方面的书也差不多得有点这种境界。图像处理是一个发展非常迅猛的领域,每天都有新方法、新理论诞生,读者当然不能总是在学最原始、最简单的那点东西。本书最后的一部分内容,包括图像的加密与隐藏、小波变换和基于偏微分方程的图像降噪,尽管已经取得了长足的发展,但仍然是理论界的热门话题。这部分也是建议读者重点研习的部分。特别是其中关于图像的加密与隐藏和偏微分方程图像处理方法的资料在国内仍然很少,而小波变换和基于偏微分方程的应用由于对数学的要求较高,也一直令很多人不得要领。本书在这些内容上花费了大量的笔墨,就是希望能够帮助读者叩开久闭的山门,同时也希望为读者挺进这些方兴未艾的领域披荆斩棘、扫除障碍。
本书由左飞统筹并执笔,万晋森和刘航参与了部分章节的撰写。具体分工是,左飞负责撰写第1~4 章、第6 章、第9 章的部分和第12~14 章;万晋森撰写了第5 章、第7 章和第8 章;刘航撰写了第9 章的大部分和第10 章、第11 章。欢迎读者就书中的问题同笔者展开交流,具体请访问笔者在CSDN 上的博客http:blog.csdn.netbaimafujinji,关于本书的勘误和补遗也将实时发布在此博客上。
自知论道需思量,几度无眠一文章。由于时间和能力有限,书中纰漏在所难免,真诚
地希望各位读者和专家不吝批评斧正。
|
|