《数字图像处理 Java语言算法描述》 -Willhelm Burger Mark J.Burge著 黄华等译
数字图像处理 Java语言算法描述
看看前言也许会让你对数字图像处理更感兴趣
第一章 品位像素
在过去的很长一段时间里,只有少数能够接触到昂贵设备的专业人员才有机会使用计算机操作数字图像(即数字图像处理)。这种专业人员与设备的组合通常只会出现在一些研究性实验室,因此数字图像处理技术起源于学术领域。如今,台式计算机的处理能力已日益增强,而且几乎每个人都拥有一些获取数字图像的设备,例如手机摄像头、数码相机、扫描仪。这些设备产生了大量的数字图像,使得数字图像处理变得和文字处理一样普及。
如今,IT界的专业人员不能局限于简单地熟悉数字图像处理过程,而是要能够有理论深度地操作图像及相关的数字媒体。在医学和媒体以及其他所有领域的工作中,这已经成为工作流程中愈来愈重要的一环。同样,软件工程师和计算机科学家在开发程序、数据库以及相关系统时也越来越多地面临需要正确处理数字图像的情况。对图像处理实际经验的缺乏,加之对基础理论理解的模糊,以及对问题难度的低估,常常使我们的解决方案效率低下,甚至出现严重错误致使我们对图像处理失去信心。
1.1 图像编程
尽管术语“图像处理”和“图像编辑”经常可以交换使用,我们还是要引入下面更加精确的定义。数字图像编辑是指用已有的软件(如Photoshop、Corel Paint)来操作数字图像;而数字图像处理是指数字图像处理程序的概念、设计、开发以及增强。
现代编程环境以及它们所提供的广泛的API(应用程序接口)使非专用人员可以轻松获得几乎所有方面的计算处理功能,例如网络、数据库、图形、声音或者成像。开发一款能够深入图像、处理其内部独立元素的程序是很吸引人的。你会发现在正确的理论知识指导下,一幅图像最终会变为一个简单的数值矩阵;利用合适的工具,你可以对它做任何想要的操作。
相对于数字图像处理,计算机图形学致力于从诸如三维模型之类的几何描述中合成数字图像[31,37,103]。尽管图形学专家感兴趣的工作时虚拟现实场景,特别是电脑游戏中的快速渲染,该领域仍使用了大量源自图像处理的方法,比如图像变换(变形)、从图像数据完成三维模型重建以及基于图像的非真实渲染等等专业技术[77,104]。相似的,图像处理也利用了许多源自于计算几何和计算机图形学的思想,例如医学图像处理中的体模型。这两个领域可能在进行电影或视频的后期数字制作、创建特效的时候最为接近[105]。本书将全面介绍图像和图像序列(即视频)的有效处理方法。
1.2 图像分析和计算机视觉
第二章 数字图像
数学图像是本书的核心主题,与多年前不同,数学图像这个术语在当令已被普遍使用,因此我们没有必要再去深入地解释它。然而,本书并非针对所有数字图像类型,而是将注意力集中在那些由排列在规则矩形网络上的图像元素(通常被称为像素)构成的图像上。
2.1 数字图像的类型
人们每天都会接触到各种各样的数字光栅图像,例如人物和风景的彩色照片、打印文档的灰度扫描、建筑平面图、传真的文档、屏幕截图、诸如X射线和超声波之类的医学图像等(图2.1)。不论这些图像源自哪里,它们最终会以图像元素构成的矩形有序阵列的形式呈现。
2.2 图像获取
把真实场景变为数字图像的过程是复杂多样的,而且在大多数情况下你所处理的图像已经是数字格式的,因此在这里我们只略述这个过程中的核心步骤。因为大多数图像获取方法在本质上都是基于典型光学照相机的变种,所以我们将从详细考察光学照相机的成像过程开始。
2.2.1 针孔照相机模型
从13世纪起,针孔照相机作为最简单的照相机模型被广泛使用,那时它被称为“奥布斯古拉照相机”。尽管现在除了一些摄影爱好者以外已经没有人再用它了,但是针孔照相机模型对于理解简单照相机的核心光学组件仍然是十分有用的。
针孔照相机由一个密闭的盒子组成,在前侧面板上有一个小孔,光线透过这个孔在后侧面板上形成场景的缩小反转的像(图2.2)。
透视变换
针孔照相机的几何性质十分简单,光轴穿过针孔垂直交于图像平面。我们假设一个可见目标(图2.2中的仙人掌)位于与针孔水平距离为Z、与光轴垂直距离为Y的位置,它的投影的高度y取决于两个参数:照相机盒子的固定深度f和坐标系原点与目标之间的距离Z。通过比较,
随着像的比例而变化,且和盒子的深度即f成正比,这和日常照相机焦距变化相似。对于一幅固定尺寸的图像,小的f(即短焦距)会产生较小的像和较大的视角,就像使用了广角镜头一样;而增加焦距f会造成较大的像和较小的视角,正如使用了远距镜头的效果。公式(2.1)中的负号代表投影图像在水平方向和垂直方向经过了反转并且旋转了180度。公式(2.1)描述了今天普遍认可的投影变换关系,这个理论模型的两个重要性质是3D空间中的直线总是投影为2D直线,而3D空间中的圆投影为椭圆。
2.2.2 “薄”透镜
实际上,玻璃透镜或者光学透镜系统被用来代替针孔,它们具有多方面的优越性但同时也复杂得多。用图2.3中所示“薄透镜”代替针孔,它们具有多方面的优越性但同时也复杂得多。
2.2.3 数字化
投影在照相机像平面上的像,本质上是一种二维的、时间相关的、连续分布的光能量。
为了把这种像转换成计算机上的数字图像,需要经过以下三个主要步骤。
1.连接的光线分布必须被空间采样。
2.步骤1的采样结果必须在时间域被采样,以创建一幅图像。
3.最后,采样的值必须被量化到有限范围的整数,这样它们才能在计算机中被表示。
步骤1:空间采样
像的空间采样(即从连续信号到其离散形式的转换)依赖于图像获取设备(例如数码相机和摄像机)传感器单元的几何特征。各个传感器单元被排列在传感器平面(图2.4)上有序的行中,彼此之间几乎总是保持着合适的夹角。另外,可以在某些特殊的产品中发现一些具有六边形单元和圆形传感器结构的成像传感器。
步骤2:时域采样
时域采样是通过在均匀的时间间隔上测量每个独立传感器单元上的光入射量来完成的。数码相机中的CCD通过触发充电过程,然后测量指定时间内在CCD接受光照所积累的电荷数量来完成时域采样。
步骤3:量化像素值
为了让计算机上存储和处理图像中的数值,它们通常被转换为整数值(例如256=28或者4096=212)。在一些专业应用中(例如医学图像处理)偶尔会出现需要用到浮点型的情况。转换是通过使用一个模数转换器进行的,这个转换器通常被直接集成在传感器单元中(这样转换就发生在图像拍摄的过程中)或者通过专门接口硬件执行。
把图像看作离散函数
这三步的操作结果是以二维有序整数矩阵(图2.5)的形式对图像的描述。形式化表述为:一幅数字图像 I 是一个将整数坐标N * N映射到某个范围的图像值P的二维函数,使得
现在我们已经做好了把图像转移到计算机中的准备,因此图像可以被保存、压缩或者处理成我们所选择的文件格式。这时,图像源自何处对我们来说已经不重要了,因为现在它就是一个简单的二维数值数据矩阵。在继续讲解以前,我们需要了解一些更重要的定义。
2.2.4 图像尺寸和分辨率
后面我们将假设图像是矩形的,尽管这是一个相对安全的假设,但仍然存在例外。一幅图像的尺寸可以直接由图像矩阵 I 的宽度M(列数)和高度N(行数)确定。
一幅图像的分辨率指定了它在真实世界中的空间尺寸,以每个计量单位的图像元素数给出,例如印刷产品中使用的点每英寸(dpi)或者线每英寸(lpi),又如卫星图像中的像素每千米。在大多数情况下,图像分辨率在水平方向和垂直方向上是相同的,因为图像元素是方的。
除了一些处理几何运算的算法以外,一般没有必要了解一幅图像的空间分辨率。然而,在涉及几何元素的情况下精确的分辨率信息就变得非常重要了,例如要在图像上绘制圆或者测量图像中的某段距离。正因为此,大部分的图像格式和专业用途设计的软件系统都包含精确的分辨率信息。
2.2.5 图像坐标系统
为了确定图像上哪个位置对应哪个像素,我们需要引入一个坐标系。与数学上惯用的坐标系相反,图像处理中的坐标系在垂直方向经过了反转;也就是说y坐标自顶向下逐渐增大,原点位于左上角(图2.6)。尽管这种坐标系不论在理论上还是实际上都没有什么优越性,事实上它还使得几何变换描述起来更加困难,但这种坐标系几乎无一例外地在图像处理软件系统中被使用。此系统起源于电视电子学,图像中的各行随着电子束按照从屏幕顶部到底部的顺序被显示。我们让行和列的编号从0开始,因为Java中数组的下标是从0开始的。
2.2.6 像素值
一个图像元素中所含的信息取决于用来表示它的数据类型。像素值实际上总是长度为k的二进制字,因此一个像素可以表示2k种不同的值。k值由图像的位深度(或深度)决定,通常是处理器的字长。
一个单独像素的位数取决于图像的种类,例如二值图、灰度图、或者RGB彩色图。表2.1总结了常用图像类型。
灰度图像(强度图像)
一幅灰度图像的图像数据由代表图像强度、亮度或密度的单个通道构成。在大多数情况下,只有正的值才有意义,因为数字代表了光能量的强度,而这个强度不可能是负的,因此通常使用[0…2k-1]中的整数值。例如,一幅典型的灰度图像每个像素使用k=8位(1字节),即强度值。