本书首先通过一个简单JAVA图像处理程序勾勒出用JAVA来实现图像处理的基本步骤,介绍JAVA在操作图像方面的几个重要的API类如ImageIO,BufferedImageOP等,并对图像文件的保存与读写做较为深入细致的讲解。从第二章开始介绍图像的像素操作同时还会用实例讲解如何通过这些简单的像素操作实现图像的色彩特效。接下来会学习图像的直方图,演示如何直方图均衡化的实际应用,会基于直方图实现一种图像搜索算法,接下来学习图像处理中最重要与常见的如何调整图像的亮度,对比度与饱和度实现图像的基本调整。然后逐步深入介绍图像的模糊与锐化,首先学习图像卷积模糊算法,然后介绍快速模糊算法盒子模糊,细节保留的高斯模糊与双边模糊,以及各种不同方向的对图像实现模糊的技术,从而实现不同的处理效果。
目录 Contents
前言
第1章 Java Graphics及其API简介1
1.1 什么是Java图形设备Graphics1
1.1.1 Graphics概述2
1.1.2 Graphics图形设备的获取、使用和销毁2
1.1.3 Java Swing Graphics2D的重要属性3
1.2 Java 2D API3
1.2.1 基本的Java 2D图形绘制4
1.2.2 使用Java 2D实现太极图形绘制5
1.3 用Java Swing绘制自定义的JPanel6
1.4 Swing Java 2D的其他高级特性介绍8
1.5 小结13
第2章 Java BufferedImage对象及其支持的API操作14
2.1 BufferedImage对象的构成14
2.1.1 Raster对象的作用与像素存储15
2.1.2 图像类型与ColorModel16
2.1.3 BufferedImage对象的创建与保存17
2.1.4 一个完整的ImageBuffered读取例子18
2.2 Java BufferedImageOp API20
2.2.1 Java BufferedImageOp 接口介绍20
2.2.2 BufferedImage对象像素的读写方法21
2.2.3 常见问题举例21
2.3 基于BufferedImageOp的图像滤镜演示22
2.4 小结28
第3章基本Swing UI组件与图像显示29
3.1 JPanel组件与BufferedImage对象的显示29
3.2 JFrame组件与Main UI实现31
3.3 JFileChoose文件选择框的使用32
3.4 基本JButton事件响应32
3.5 一个完整的Swing UI Demo33
3.6 小结37
第4章图像属性39
4.1 失去的时光与回忆―老照片特效39
4.2 图像属性42
4.3 图像的亮度、对比度和饱和度45
4.4 图像饱和度调整46
4.5 图像亮度调整50
4.6 图像对比度调整53
4.7 综合应用―调整图像亮度、对比度和饱和度55
4.8 小结61
第5章像素基本操作62
5.1 大自然的色彩―自然系列滤镜62
5.2 图像像素加减乘除65
5.3 两幅图像的融合与叠加70
5.4 一个更加深入的应用实践―图像上轧花文字效果75
5.5 小结82
第6章像素统计与应用83
6.1 统计图像的均值、最大值与最小值83
6.2 灰度图像二值化86
6.3 图像直方图91
6.4 基于直方图实现图像二值化96
6.5 应用―直方图均衡化100
6.6 应用―基于直方图的图像搜索105
6.7 小结109
第7章图像编辑110
7.1 为什么图像放大以后失真110
7.2 临近点插值算法117
7.3 双线性插值算法120
7.4 双立方插值与Lanczos采样124
7.4.1 双立方插值算法124
7.4.2 Lanczos采样插值算法131
7.5 图像旋转134
7.6 小结141
第8章图像卷积143
8.1 模糊也是一种美143
8.2 图像空间域卷积145
8.3 盒子模糊与高斯模糊149
8.3.1 盒子模糊150
8.3.2 高斯模糊154
8.4 边缘保留的模糊算法―高斯双边模糊157
8.5 像素格特效163
8.6 卷积应用:图像去噪165
8.7 图像锐化、拉普拉斯滤波173
8.8 小结176
第9章边缘检测与提取177
9.1 什么是图像的边缘177
9.2 Robot算子与轧花效果179
9.3 Sobel算子与Prewitt算子 182
9.4 图像梯度―大小与角度186
9.5 基于二阶导数的图像边缘提取189
9.6 经典边缘提取算法―Canny Edge Detection193
9.7 小结200
第10章二值图像201
10.1 二值图像概述与半色调算法201
10.2 图像抖动算法204
10.3 二值图像泛洪填充算法208
10.4 连通组件标记算法212
10.5 二值图像边缘跟踪218
10.6 二值图像细化224
10.7 计算连通区域几何质心228
10.8 计算连通区域方向角度231
10.9 小结233
第11章图像形态学235
11.1 像素集合操作235
11.2 腐蚀与膨胀238
11.3 开闭操作241
11.4 Hit-and-Miss变换操作244
11.5 距离变换247
11.6 分水岭算法250
11.7 灰度图像腐蚀与膨胀254
11.8 小结257
第12章图像分割258
12.1 抠图真的这么难吗258
12.2 基于Mean-Shift的图像分割259
12.3 基于K-Means的图像分割265
12.4 基于Fuzzy C-Means的图像分割269
12.5 基于分水岭的图像分割275
12.6 小结279
第13章图像特征的提取与检测280
13.1 颜色特征提取280
13.2 纹理提取283
13.3 直线检测288
13.4 圆检测291
13.5 图像金字塔295
13.6 Harris角度检测302
13.7 SIFT特征提取307
13.8 小结322
第14章综合运用:照片转油画算法323
14.1 画笔区域323
14.2 采样问题325
14.3 笔画参数327
14.4 笔画绘制330
14.5 程序实现334
14.6 小结337
附录 数学知识参考引用338
为什么要写这本书?我对图像处理的认识最初来自于读软件工程专业时做毕业设计论文的需要,毕业论文做完以后,我便把所有关于图像处理的知识扔到了一边。2011年的一天有位朋友问了我几个简单的图像处理方面的问题,在解答问题的过程中我发现自己对图像处理的热情一直都在燃烧,从那一刻起我决定重新学习图像处理。这之后,我把以前买的几本图像处理的书都读了一遍,同时还坚持通过写博客来督促自己加深理解,随着学习的不断深入,对图像处理的认知也在不断加深,我越来越渴望自己能实现那些书中提到的图像处理手段与方法,于是便开始不断尝试,在经过了各种“坑”与无助之后,我终于编程实现了学习过的每一种图像处理方法。这个过程十分痛苦,因为我深刻感受到了图像处理在理论与实践之间的细微差异,而这些细微差异往往会导致处理结果与理论预期相差很大。
可能提到图像处理,很多人马上就会想到相关书籍中各种复杂的数学公式与矩阵计算,然后就会说我数学不好学不了这个,早早地就把自己给否定了。那些数学公式的确让人望而生畏,但是只要仔细探究一番,就会发现它在图像处理的应用上远远没有看上去那么复杂,甚至可以说十分简单,这是本人学习图像处理时得到的最大一个心得体会,正如一句俗语说的:“世上无难事,只怕有心人”。
正是因为自己在学习过程中经历了痛苦,所以我想写一本不一样的图像处理入门图书,内容不再是冰冷的数学公式与文字描述,而是基于理论的实践步骤和细节详解,是一个个可以直接运行的代码实现,书中没有大量的数学公式,有的只是数学知识的巧妙运用。我希望通过分享自己学习过程中的体会与编程实践经验,帮助更多人在学习图像处理的道路上少走弯路,早日进入图像处理的科学殿堂。
在国内,程序员写书早已经不是什么新鲜事物,但是我可以肯定地说,本书是国内第一本由奋斗在编码一线的码农写的图像处理入门图书。它不是当下流行的视觉图像处理库的应用介绍,而是图像处理基础知识和理论的学习与实践,正如一句西方科技谚语所说的那样,“在理论上,理论与实践是一致的,在实践上,它们是不一致的”。当前关于图像处理的书大多数都是重理论而轻实践,但图像处理在理论与实践编程之间是存在轻微差异的,而这就成了很多初学者无法逾越的鸿沟。本书就是要拟合理论与实践之间的鸿沟,帮助读者架起从理论到实践的大桥。
作为工作超过十年的程序员写的第一本书,本书也是我个人职业生涯的一个新起点,它鞭策与勉励自己不断努力上进,除了对图像处理的兴趣外,这一年多写书的动力更多的是毅力与帮助后来者的初衷。只要本书能为国内图像处理专业知识的普及与应用实践略尽绵薄之力,那辛苦也就值了。
读者对象本书适合以下人群阅读:
从事图像处理的工作人员学习图像处理的爱好者希望提升自我的中高级程序员计算机专业高年级本科生或研究生开设图像处理相关课程的大专院校学生从事Java应用的开发者如何阅读本书本书分为两大部分,其中第一部为前三章,主要介绍Java Swing编程的基础知识。第二部分是本书的核心内容,系统全面地介绍图像处理的各种方法与常见应用场景编程实现。如果你已经对Java语言和Java Swing有基本的认识,可以跳过前三章,直接从第4章开始阅读本书。同时本书注重实践,所以请务必阅读给出的源代码并运行它,这样才能更好地理解所讲的知识。
第一部分为基础篇,简单地介绍了Java Swing图形与图像编程基本API使用技巧,以及相关实践编程,帮助读者了解图像接口在Java语言中的基础知识,并熟悉像素的读写与操作。
第二部分为实践与应用编程,从最基础的像素操作开始,通过实践编程讲解图像处理过程中各种基本像素运算、混合、图像插值、直方图获取与图像搜索、图像卷积、边缘提取、二值图像分析与特征提取等知识,最后通过剖析一个流行的图像油画转换算法编程实践来结束本书。
¥249.00¥498.00
¥29.00
¥149.00¥298.00
¥399.00