Java数字图像处理:编程技巧与应用实践
读者评价
这本书学不了Java也学不了图像处理。
很多和Java 2D相关的API,说明少的可怜。真是还不如直接看Java Doc。
关键是代码部分,丑陋到想吐。
书里的代码,前后文不搭。 变量一会是g,一会儿又写成g2。
方法的protected修饰,书里有写成大写的Protected。
明明是 Graphics 类,书里写成了 Grahpics。
我反正是看不下去了。翻了翻,图像很少,文字很少,大段大段没有注释的代码。
内容介绍
本书首先通过一个简单JAVA图像处理程序勾勒出用JAVA来实现图像处理的基本步骤,介绍JAVA在操作图像方面的几个重要的API类如ImageIO,BufferedImageOP等,并对图像文件的保存与读写做较为深入细致的讲解。从第二章开始介绍图像的像素操作同时还会用实例讲解如何通过这些简单的像素操作实现图像的色彩特效。接下来会学习图像的直方图,演示如何直方图均衡化的实际应用,会基于直方图实现一种图像搜索算法,接下来学习图像处理中最重要与常见的如何调整图像的亮度,对比度与饱和度实现图像的基本调整。然后逐步深入介绍图像的模糊与锐化,首先学习图像卷积模糊算法,然后介绍快速模糊算法盒子模糊,细节保留的高斯模糊与双边模糊,以及各种不同方向的对图像实现模糊的技术,从而实现不同的处理效果。
目录
- 前言
- 第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
NASA(美国国家宇航局)的火星探索机器人所拍摄的照片,都是通过Java处理的,说明Java在数字图像处理上还是很强大的.可我在网络上没有找到实用的Java图像开发包,都是些零碎的代码和绘图,表的代码库.特别是一些高级点的算法,如图像分割的几种实现,找了好久都没有.而对于做数字图像处理所流行的VC++和Matlab,有Intel IPL, OpenCV,Gandalf等多种软件开发包可以使用. 而且各种算法基本上网上都能找到源码. 太不公平了..难道大家全用Java开发B/S去了?
一个BufferedImage的像素数据储存在Raster中,ColorModel里面储存颜色空间,类型等 信息,当前Java只支持一下三种图像格式- JPG,PNG,GIF,如何向让Java支持其它格式,首 先要 完成Java中的图像读写接口,然后打成jar,加上启动参数- Xbootclasspath/p newimageformatIO.jar即可。 Java中如何读写一个图像文件,使用ImageIO对象即可。读图像文件的代码如下: File file = new File("D:\\test\\blue_flower.jpg"); BufferedImage image = ImageIO.read(file); 写图像文件的代码如下: File outputfile = new File("saved.png"); ImageIO.write(bufferedImage, "png",outputfile); 从BufferedImage对象中读取像素数据的代码如下: int type= image.getType(); if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB ) return (int [])image.getRaster().getDataElements(x, y, width, height, pixels ); else return image.getRGB( x, y, width, height, pixels, 0, width );