《Java数字图像处理:编程技巧与应用实践》——导读

简介:


screenshot

前 言

为什么要写这本书

我对图像处理的认识最初来自于读软件工程专业时做毕业设计论文的需要,毕业论文做完以后,我便把所有关于图像处理的知识扔到了一边。2011年的一天有位朋友问了我几个简单的图像处理方面的问题,在解答问题的过程中我发现自己对图像处理的热情一直都在燃烧,从那一刻起我决定重新学习图像处理。这之后,我把以前买的几本图像处理的书都读了一遍,同时还坚持通过写博客来督促自己加深理解,随着学习的不断深入,对图像处理的认知也在不断加深,我越来越渴望自己能实现那些书中提到的图像处理手段与方法,于是便开始不断尝试,在经过了各种“坑”与无助之后,我终于编程实现了学习过的每一种图像处理方法。这个过程十分痛苦,因为我深刻感受到了图像处理在理论与实践之间的细微差异,而这些细微差异往往会导致处理结果与理论预期相差很大。

可能提到图像处理,很多人马上就会想到相关书籍中各种复杂的数学公式与矩阵计算,然后就会说我数学不好学不了这个,早早地就把自己给否定了。那些数学公式的确让人望而生畏,但是只要仔细探究一番,就会发现它在图像处理的应用上远远没有看上去那么复杂,甚至可以说十分简单,这是本人学习图像处理时得到的最大一个心得体会,正如一句俗语说的:“世上无难事,只怕有心人”。

正是因为自己在学习过程中经历了痛苦,所以我想写一本不一样的图像处理入门图书,内容不再是冰冷的数学公式与文字描述,而是基于理论的实践步骤和细节详解,是一个个可以直接运行的代码实现,书中没有大量的数学公式,有的只是数学知识的巧妙运用。我希望通过分享自己学习过程中的体会与编程实践经验,帮助更多人在学习图像处理的道路上少走弯路,早日进入图像处理的科学殿堂。

在国内,程序员写书早已经不是什么新鲜事物,但是我可以肯定地说,本书是国内第一本由奋斗在编码一线的码农写的图像处理入门图书。它不是当下流行的视觉图像处理库的应用介绍,而是图像处理基础知识和理论的学习与实践,正如一句西方科技谚语所说的那样,“在理论上,理论与实践是一致的,在实践上,它们是不一致的”。当前关于图像处理的书大多数都是重理论而轻实践,但图像处理在理论与实践编程之间是存在轻微差异的,而这就成了很多初学者无法逾越的鸿沟。本书就是要拟合理论与实践之间的鸿沟,帮助读者架起从理论到实践的大桥。

作为工作超过十年的程序员写的第一本书,本书也是我个人职业生涯的一个新起点,它鞭策与勉励自己不断努力上进,除了对图像处理的兴趣外,这一年多写书的动力更多的是毅力与帮助后来者的初衷。只要本书能为国内图像处理专业知识的普及与应用实践略尽绵薄之力,那辛苦也就值了。

读者对象

本书适合以下人群阅读:

从事图像处理的工作人员

学习图像处理的爱好者

希望提升自我的中高级程序员

计算机专业高年级本科生或研究生

开设图像处理相关课程的大专院校学生

从事Java应用的开发者

如何阅读本书

本书分为两大部分,其中第一部为前三章,主要介绍Java Swing编程的基础知识。第二部分是本书的核心内容,系统全面地介绍图像处理的各种方法与常见应用场景编程实现。如果你已经对Java语言和Java Swing有基本的认识,可以跳过前三章,直接从第4章开始阅读本书。同时本书注重实践,所以请务必阅读给出的源代码并运行它,这样才能更好地理解所讲的知识。
第一部分为基础篇,简单地介绍了Java Swing图形与图像编程基本API使用技巧,以及相关实践编程,帮助读者了解图像接口在Java语言中的基础知识,并熟悉像素的读写与操作。

第二部分为实践与应用编程,从最基础的像素操作开始,通过实践编程讲解图像处理过程中各种基本像素运算、混合、图像插值、直方图获取与图像搜索、图像卷积、边缘提取、二值图像分析与特征提取等知识,最后通过剖析一个流行的图像油画转换算法编程实践来结束本书。
附录为本书相关数学知识简单参考。其他参考资料索引可在我的Github上找到。

致谢

首先要感谢图像处理学科那些伟大的先行者,是他们创立了这个影响力巨大的学科。其次要感谢CSDN博客频道,在CSDN我结识了很多良师益友,他们直言不讳地指出了我博客文章中的很多不妥之处与需要改进的地方,特别是Trent、jichen324、qiwenmingshiwo、FDHGVH2461、cr459464757、wust小吴、xiaowei_cqu,以及这个仓促写就的名单之外的更多朋友,感谢你们的宝贵建议。

感谢机械工业出版社华章公司的编辑杨绣国老师,你的一封电子约稿邮件促成了本书,也帮助我实现了写一本注重实践的图像处理入门图书的梦想;感谢你的耐心,在这一年多时间里你不厌其烦地回答我在写作过程中一个又一个问题;感谢你的魄力和远见,始终支持我的写作,你的鼓励和帮助引导我顺利完成全部书稿。

最后一定要感谢我的父母,感谢你们将我培养成人;感谢我的妻子在我写书的这一年多时间让我从家务中解脱,给我支持与鼓励。

谨以此书,献给我最亲爱的两个孩子,以及众多热爱图像处理的朋友们。

贾志刚

中国,苏州,2015年9月

目 录

[第1章 Java Graphics及其API简介
1.1 什么是Java图形设备Graphics](https://yq.aliyun.com/articles/108898/)
1.1.1 Graphics概述
1.1.2 Graphics图形设备的获取、使用和销毁
1.1.3 Java Swing Graphics2D的重要属性
1.2 Java 2D API
1.2.1 基本的Java 2D图形绘制
1.2.2 使用Java 2D实现太极图形绘制
1.3 用Java Swing绘制自定义的JPanel
1.4 Swing Java 2D的其他高级特性介绍
1.5 小结
[第2章 Java BufferedImage对象及其支持的API操作
2.1 BufferedImage对象的构成(https://yq.aliyun.com/articles/108957/)
2.1.1 Raster对象的作用与像素存储
2.1.2 图像类型与ColorModel
2.1.3 BufferedImage对象的创建与保存
2.1.4 一个完整的ImageBuffered读取例子
2.2 Java BufferedImageOp API
2.2.1 Java BufferedImageOp 接口介绍
2.2.2 BufferedImage对象像素的读写方法
2.2.3 常见问题举例
2.3 基于BufferedImageOp的图像滤镜演示
2.4 小结
[第3章基本Swing UI组件与图像显示
3.1 JPanel组件与BufferedImage对象的显示](https://yq.aliyun.com/articles/108988/)
3.2 JFrame组件与Main UI实现
3.3 JFileChoose文件选择框的使用
3.4 基本JButton事件响应
3.5 一个完整的Swing UI Demo
3.6 小结
第4章图像属性
4.1 失去的时光与回忆—老照片特效
4.2 图像属性
4.3 图像的亮度、对比度和饱和度
4.4 图像饱和度调整
4.5 图像亮度调整
4.6 图像对比度调整
4.7 综合应用—调整图像亮度、对比度和饱和度
4.8 小结

相关文章
|
13天前
|
Java 调度
Java并发编程:深入理解线程池的原理与实践
【4月更文挑战第6天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将从线程池的基本原理入手,逐步解析其工作过程,以及如何在实际开发中合理使用线程池以提高程序性能。同时,我们还将关注线程池的一些高级特性,如自定义线程工厂、拒绝策略等,以帮助读者更好地掌握线程池的使用技巧。
|
16天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
14天前
|
Java 程序员 调度
Java中的多线程编程:基础知识与实践
【4月更文挑战第5天】 在现代软件开发中,多线程编程是一个不可或缺的技术要素。它允许程序员编写能够并行处理多个任务的程序,从而充分利用多核处理器的计算能力,提高应用程序的性能。Java作为一种广泛使用的编程语言,提供了丰富的多线程编程支持。本文将介绍Java多线程编程的基础知识,并通过实例演示如何创建和管理线程,以及如何解决多线程环境中的常见问题。
|
10天前
|
Java 数据挖掘
java实践
【4月更文挑战第9天】java实践
12 1
|
1天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
1天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。
|
1天前
|
安全 Java API
函数式编程在Java中的应用
【4月更文挑战第18天】本文介绍了函数式编程的核心概念,包括不可变性、纯函数、高阶函数和函数组合,并展示了Java 8如何通过Lambda表达式、Stream API、Optional类和函数式接口支持函数式编程。通过实际应用案例,阐述了函数式编程在集合处理、并发编程和错误处理中的应用。结论指出,函数式编程能提升Java代码的质量和可维护性,随着Java语言的演进,函数式特性将更加丰富。
|
1天前
|
安全 Java 程序员
Java中的多线程并发编程实践
【4月更文挑战第18天】在现代软件开发中,为了提高程序性能和响应速度,经常需要利用多线程技术来实现并发执行。本文将深入探讨Java语言中的多线程机制,包括线程的创建、启动、同步以及线程池的使用等关键技术点。我们将通过具体代码实例,分析多线程编程的优势与挑战,并提出一系列优化策略来确保多线程环境下的程序稳定性和性能。
|
2天前
|
Java 测试技术 索引
滚雪球学Java(14):快速入门JavaSE-for循环语句,轻松掌握编程技巧
【4月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
16 1
滚雪球学Java(14):快速入门JavaSE-for循环语句,轻松掌握编程技巧
|
2天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。