数字图像处理与Python实现(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-05 15:54:31

点击下载

作者:岳亚伟

出版社:人民邮电出版社有限公司

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

数字图像处理与Python实现

数字图像处理与Python实现试读:

前言

本书试图用通俗易懂的语言把数字图像信号处理中的原理和方法传递给读者,即便读者半路出家,依然能够有所收获。本书在介绍理论知识的同时,利用Python语言对算法进行了实现。为了锻炼读者的实战能力,也为了避免喧宾夺主,书中有些算法的实现只给出了部分代码,若读者感兴趣,可根据书中向导对剩余代码进行实现,这一过程必定能够加深读者对相关知识的理解。

本书内容安排如下。

第1章数字图像处理基础知识,简要介绍数字图像处理涉及的一些基本概念、基本运算、基本类型,以及如何通过Python对数字图像进行读取和简单操作。

第2章彩色图像处理初步,以彩色图像为例对数字图像处理的基本操作进行介绍,引导读者熟悉数字图像处理的基本过程。本章内容主要包括颜色空间的基本概念、伪彩色图像处理操作、彩色图像处理简单操作等。

第3章空间滤波,瞄准在空间域中对图像进行增强,介绍空间滤波的机理、基本概念以及使用的基本技术。本章内容包括空间滤波基本概念、基于空间滤波的图像平滑处理、基于空间滤波的锐化操作以及混合空间增强。

第4章频域滤波,从频域角度入手对图像处理及增强方法展开介绍。因为频域滤波所需要的数学知识较多,所以本章采用由浅入深的策略,首先介绍一维傅里叶变换,其次介绍二维傅里叶变换和快速傅里叶变换,最后介绍图像频域滤波中出现的各种技术,其大体可分为低通滤波和高通滤波两大类。

第5章图像特征提取,从全局特征提取和局部特征提取两方面入手,分别介绍了颜色特征、纹理特征、形状特征、边缘特征、点特征的提取方法。本章内容目前是机器视觉和图像处理领域的学者关注较多的内容,通过穿插较多的示例,帮助读者理解图像特征提取的基本技术。

第6章图像压缩,瞄准如何减少图像传输及存储数据大小,介绍主要使用的压缩技术,包括有损压缩、无损压缩等,并使用JPEG压缩技术串讲全章知识点。

第7章图像小波变换与多分辨率,主要介绍图像的小波域表示及多分辨率表示。

附录介绍了Python开发环境配置及基本语法。

本书第1、4、5、6、7章内容及附录由岳亚伟完成,第2、3章内容由薛晓琴完成。

由于时间所限,本书仅介绍了一些比较典型的图像处理技术。另外,本书对某些代码进行了简化处理,以便读者通过自行完善代码实现编程能力的提升。

在此,编者由衷感谢参与本书编校工作的人民邮电出版社的各位编辑,也感谢Arm公司教育部产学合作平台提供的支持。岳亚伟2019年12月chapter 01 数字图像处理基础知识

一图胜千言,图像为人类了解客观世界提供了大量的信息,为人类的想象力提供了不可或缺的载体。图像处理是指对图像进行的一系列操作,旨在优化图像或从图像中抽取某些有用信息。图像处理是信号处理的一种,其输入为一幅图像,输出是优化后的图像或抽取出的图像特征。作为机器视觉的基础,图像处理受到了越来越多的关注。

按照图像信号类型的不同,图像处理可以分为数字图像处理与模拟图像处理两种类型。模拟图像处理是指在模拟介质(如胶片)中通过模拟成像器件(如相机镜头)对连续模拟信号进行处理。数字图像处理是指以离散数字图像信号为处理对象,通过计算机对图像进行处理,以帮助人类更好地从图像中获得信息。

本章介绍了数字图像的一些基础知识和基本概念,包括:数字图像处理基本原理及常见方法、图像的采样和量化、图像的表示和可视化、图像中像素间的关系、黑白图像与灰度图像的概念。1.1 数字图像简介“图”是客观世界物体反射或透射光的分布,是客观世界的反映;而“像”则是人类视觉系统对图的响应,是人的大脑对图的印象或认识,是人的一种感觉。图像(image)是图和像的有机结合,既反映物体的客观存在,又体现人的感知因素。图像处理旨在针对特定任务,提升图像的可理解性。对光的操作可理解为对图的处理,如拍照时的闪光灯补光操作、单反相机的镜头滤镜等。对成像结果的处理可理解为对像的操作,如大家常用的美颜相机软件内的各种操作。本书讲述的内容均属于对像的处理,为与主流教材保持一致,统称为图像处理。

一幅图像可表示成一个范围有限二维空间内幅值有限的函数,其数学表达为:其中x,y表示图像中的空间坐标,I=f(x,y)表示图像某个位置的响应值,x和x表示图像在水平方向上的边界,y和y表示图像在垂直startendstartend方向上的边界,I和I分别表示响应幅值的最小值和最大值。如果minmax图像空间坐标x,y连续,且响应值f(x,y)连续,则图像为模拟图像。数字图像指的是空间坐标及响应值均不连续的图像。针对数字图像所进行的图像优化或信息抽取称为数字图像处理。典型的数字图像表示如图1-1所示。图1-1 典型数字图像表示

在图1-1中,左上为原图,右上为进行了第一次放大操作后所得的图,左下为进行了第二次放大操作后所得的图,右下为对应的数字图像计算机内部表示。多次放大之后我们可以发现图像有了明显的锯齿状边缘,由此可知数字图像的空间分布和响应值均不连续。

数字图像由二维元素组成,每个元素包含一个坐标(x,y)和一个响应值f(x,y),每个元素也称为数字图像的一个像素。数字图像是由像素组成的二维排列,如图1-1所示,其可以用像素构成的二维矩阵表示。对于灰度图像而言,每个像素可用一个整数值来表示,其范围通常为0~255,其中0表示最低亮度(黑),255表示最高亮度(白),其他值表示中间灰度。彩色图像则由红、绿、蓝三元组矩阵来表示,三元组的每个数值的范围通常也是0~255。彩色图像及其红色分量、绿色分量、蓝色分量图像如图1-2所示。图1-2 彩色图像及其红、绿、蓝分量图像1.1.1 数字图像处理的目的

数字图像处理是指借助计算机强大的运算能力,运用去噪、特征提取、增强等技术对以数字形式存储的图像进行加工、处理。数字图像处理的目的主要有以下3点。

1. 提升图像的视觉感知质量

通过亮度、彩色等变换操作,抑制图像中某些成分的表现力,提升图像中特定成分的表现力,以改善图像的视觉感知效果。

2. 提取图像中的感兴趣区域或特征

我们从图像中提取的感兴趣区域或特征可以作为图像分类、分割、语义标注等的依据,为计算机图像分析提供进一步的便利。按照表示方式的不同,提取的特征可以分为空间域特征和频域特征两大类。按照所表达的图像信息的不同,提取的特征可以分为颜色特征、边界特征、区域特征、纹理特征、形状特征及图像结构特征等。

3. 方便图像的存储和传输

为了减少图像的存储空间,降低图像在网络传输中的耗时,可首先使用各类编码方法对图像进行编码,然后使用如JPEG、BMP等压缩标准对图像进行压缩。

不管是何种目的的图像处理,都需要由计算机和图像专用设备组成的图像处理系统对图像数据进行输入、加工和输出。1.1.2 数字图像处理的应用

数字图像处理是指将图像转化为离散数字信号,并利用计算机对其进行处理。数字图像最早应用于报纸行业,即将英国和美国之间原本需要7天才能传输完成的报纸图像在3个小时内传输完成。数字图像处理作为一门独立的学科成形于20世纪60年代早期,其最早的目的是为了改善图像的视觉感知质量,以人为对象,通过对图像的处理,使得图像中的目标更加清晰可辨。数字图像处理的最早的成功应用案例出现在美国喷气推进实验室,该实验室对由航天器采集的数千张月球图片进行了处理,借助计算机的计算能力成功完成了月面地图的绘制,为后续的数次成功登月奠定了一定的基础。电子计算机断层扫描(Computed Tomography,CT)是数字图像处理应用在医学领域中的一个早期典型成功案例。英国EMI公司的工程师于1972年发明了专门用于颅腔诊断的X射线诊断装置(即CT装置),CT装置通过X射线产生人类身体部件的投影,并通过计算机对投影截面进行重建,为医生进行进一步的疾病诊断提供依据。CT诊断技术发明人于1972年获得了诺贝尔生理学或医学奖,CT诊断技术也在随后的数年内推广到了全世界,为人类生命质量的提升做出了巨大的贡献。随着数字图像处理技术的进一步发展,以及人工智能、计算机科学相关技术的进一步成熟,数字图像处理技术可以向更高层次、更广领域做更深入的发展,计算机视觉相关理论也开始逐步从理论走向大规模应用。20世纪70年代末,马尔(Marr)教授首先提出较为完整的计算机视觉理论,其成为计算机视觉领域的指导理念,以马尔命名的“马尔奖”迄今为止还是计算机视觉领域的最高奖项。计算机视觉关注如何借助计算机系统对图像做出相应解释,可以让计算机对外部世界产生类似于人的理解能力。近年来随着深度学习理论的不断发展以及计算机硬件尤其是GPU计算能力的不断提升,计算机视觉的理解能力和水平迈上了一个新的台阶,在许多领域达到甚至超过了人类。

数字图像处理在国民经济领域存在诸多现实应用,比较具有代表性的是遥感图像分析技术的广泛应用。农业部门通过对遥感图像进行分析,可以了解作物的播种、生长、病害情况,有助于做到大范围地估产及病虫害防治。水利部门通过对采集到的遥感图像进行评估分析,可以做到对水害灾情变化的实时检测,配合气象部门的卫星云图分析,可以对水旱灾害情况进行较为及时与准确的预测。国土测绘机构使用航测或卫星可获得地貌信息及地面设施布置等资料,通过对其进行进一步分析即可获知国土使用情况。

互联网的发展为数字图像提供了广泛的应用场景,数字图像处理的相关技术在社会中也发挥着更大的作用,如基于数字图像识别的身份认证系统,可通过快速比对被检测身份图像与原始身份图像完成被检测人员的身份认证,该系统在门禁、出入境以及金融支付等领域得到了广泛应用。再如种类繁多的美图软件及丑图软件已经作为必备模块集成到了社交媒体中,通过物体识别、高斯模糊等简单图像处理方法实现了图像快速美化或丑化,为人们的生活增添了不少乐趣。为了适应互联网应用中大量图像传输需要,减小图像传输带宽要求,各类图像压缩算法也得到了大规模应用,如JPG、PNG等格式的压缩图像编码算法已经被视为图像编码的即成标准。光学字符识别是数字图像处理技术应用的又一重要领域,其首先利用图像分割得到单个字符图像,其次通过特征提取得到单个字符特征,最后经过图像识别算法提取出图像中的文本内容,进而形成文本文档。1.1.3 数字图像处理特点

与模拟图像处理相比,数字图像处理具有以下特点。

1. 可再现能力强

数字图像存储的基本单元是由离散数值构成的像素,其一旦形成不容易受图像存储、传输、复制过程的干扰,即不会因为这些操作而退化。与模拟图像相比,数字图像具有较好的可再现能力。只要图像在数字化过程中对原景进行了准确的表现,所形成的数字图像在被处理过程中就能保持图像的可再现能力。

2. 处理精度高

将图像从模拟图像转化为数字图像,中间不免会损失一些细节信息。但利用目前的技术,我们几乎可以将一幅模拟图像转化为任意尺寸的数字图像,数字图像可以在空间细节上任意逼近真实图像。现代数字图像获取技术可以将每个像素基元的灰度级量化到32位甚至更多位数,这样可以保证数字图像在颜色细节上满足真实图像颜色分辨率的要求。

3. 适用范围广

利用数字图像处理技术可以处理不同来源的图像,也可以对不同尺度客观实体进行展示,如即可以展示显微图像等小尺度影像,也可以展示天文图像、航空图像、遥感影像等大尺度图像。这些图像不论尺度大小、来源各异,在进行数字图像处理时,均会被转化为由二维数组编码的图像形式,因而均可以由计算机进行处理。

4. 灵活性高

数字图像处理算法中不仅包括线性运算,也包括各类可用的非线性运算。现代数字图像处理可以进行点运算,也可以进行局部区域运算,还可以进行图像整体运算。通过空间域与频域的转换,我们还可以在频域进行数字图像的处理。上述运算和操作都为数字图像处理提供了高度的灵活性。1.1.4 常见的数字图像处理方法

数字图像处理的方便性和灵活性,以及现代计算机的广泛普及,使得数字图像处理技术成为图像处理技术的主流。数字图像处理的一般步骤为:图像信息的获取、图像信息的存储、图像信息的处理、图像信息的传输、图像信息的展示等环节。目前常见的数字图像处理方法包括:图像的数字化、编码、增强、恢复、变换、压缩、存储、传输、分析、识别、分割等。

1. 图像变换

由于图像矩阵很大,直接在空间域中进行处理,计算量较大,因此需要采用合适的变换方法对图像进行转换,将图像从空间域转换到其他领域进行处理,如傅里叶变换、离散余弦变换等频域变换技术。通过图像变换可以大幅减少图像处理过程的计算量,同时有助于应用更有效的图像处理技术(如图像的频域滤波)。

2. 图像压缩编码

图像压缩编码技术的主要目标是减少描述图像所需的数据量,以便减小图像在传输、处理过程中所占的存储空间。目前的压缩技术可分为有失真和无失真压缩两大类别。编码技术是压缩中最重要的步骤,在图像处理中是发展较早且较为成熟的技术,如JPEG编码技术等。

3. 图像增强和复原

图像增强的主要目的是提升图像质量,以获得更好的观感,如图像去噪、去模糊等。图像增强过程中并不考虑图像质量下降的原因,其主要目的是突出图像中感兴趣的部分。例如,提升频域图像的高频分量,可以提升图像中的细节,使得图像中的对象轮廓更加清晰。提升图像中的低频分量则可减少噪声对图像的影响。图像复原的目的也是提升图像质量,而与图像增强不同,图像复原要求提前了解引起图像质量下降的原因,一般需要根据质量下降原因建立“质降模型”,再根据该模型采用滤波方法对图像进行恢复或重建。

4. 图像分割

图像分割技术是当代数字图像信号处理中的关键技术之一。图像分割的主要目的是将图像分解为若干有意义的部分。图像分割技术可以作为图像识别、分析和理解技术的基础。在图像分割的基础上,形成图像的区域、边缘特征描述,借助模式识别相关技术,完成图像的语义分析和理解。虽然已研究出多种边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。因此,对图像分割的研究还在不断深入中,是图像处理领域中的研究热点之一。

5. 图像描述

图像描述是通过一系列属性或特征对图像进行描述,是图像识别和图像分类的必要前提。简单的二值图像可以通过其几何特性(如形状描述、边界描述、区域描述等)进行描述。对比较有规律的图像可以通过纹理特征进行描述。随着图像处理技术的发展,现在也可以通过体积描述、表面描述、广义圆柱体描述等方法对三维图像或模型进行描述。

6. 图像分类(识别)

图像分类(识别)是模式识别领域中的重要技术之一,其主要目标是对图像的类型进行判别或者对图像中出现的物体进行检测和识别。图像分类(识别)的一般步骤是:首先进行图像特征提取和描述,然后使用模式识别相关技术进行分类器或检测器的训练,最后对目标图像进行分类和识别。近年来,随着深度学习的发展,将图像特征提取和分类的过程进行了整合,在进行图像描述的同时,完成分类器或检测器的训练。深度学习的最新研究结果显示,在某些类型的图像处理上,应用深度学习进行图像识别的准确率已经超越人类。1.2 图像采样和量化

如前所述,数字图像有两个重要属性:空间位置(x,y)以及响应值I(x,y)。数字图像中像素的空间位置x、y以及响应值I均为离散值,而传感器的输出是连续电压波形信号。为了产生一幅数字图像,需要把连续的数据转换为离散的数字化形式。图像的数字化是将连续的模拟图像转换为计算机可处理的离散数字图像的过程,该过程包括两种操作:采样和量化。采样是图像空间坐标的离散化,决定了图像的空间分辨率。量化是图像响应幅值的离散化,决定了图像的灰度分辨率。采样和量化是将模拟图像转换为数字图像的两个最重要的操作。1.2.1 图像采样

图像采样是将一幅在空间上连续分布的模拟图像分割成M×N的网格,每个网格称为一个像素,M×N称为图像的空间分辨率。根据香农采样定理,只要采样的频率大于被采样信号最高频率的2倍,就可以由采样信号对原始信号的形态进行完整恢复。图像采样可以看作是对原始图像信号的一种数字化逼近。对咖啡杯图像进行不同频率采样后所得结果如图1-3所示。图1-3 图像采样结果

图像采样是对图像空间位置的数字化,采样需要确定水平和垂直方向上分割出像素的数量,该数量又称为图像的分辨率。首先沿垂直方向按一定间隔从上到下顺序地沿水平方向直线扫描,取出各水平线上灰度值的一维扫描。然后再对一维扫描线信号按一定间隔采样得到离散信号,即按先沿垂直方向采样,再沿水平方向采样这两个步骤完成采样操作。一般而言,采样间隔越大,所得图像像素数越少,空间分辨率低,图像质量差,严重时出现马赛克效应;采样间隔越小,所得图像像素数越多,空间分辨率高,图像质量好,但数据量较大。

按照采样方式,可以将采样分为均匀采样与不均匀采样两类。均匀采样是现在最常用的采样方式。均匀采样根据所需分辨率M×N,将图像均匀地分为M×N个块,然后对每个图像块Δ,使用采样函数S,ij求得其采样结果值S(Δ)。比较常用的采样函数是求区域平均值。不ij均匀采样则是在需要体现细节的位置增加采样频率,而在图像变化较小的区域,相应减小采样频率。数字图像采样如图1-4所示,首先是二维空间连续分布函数,经过采样之后变成空间上不连续的函数。采样过程可看作将图像平面划分成规则网格,每个网格中心点的位置由一对笛卡儿坐标(m,n)决定。其中,m是M中的整数,n是N中的整数。图1-4 数字图像采样示意映射到离散坐标

使用求均值方法进行图像模拟采样的代码如下。使用求均值方法对图像进行采样如图1-5所示。from skimage import datafrom matplotlib import pyplot as pltimport numpy as np # 导入所需类包image=data.coffee() #载入测试图像print(image.shape) #显示图像原始大小print(type(image)) #显示图像类型ratio=20 #设置采样比率image1=np.zeros((int(image.shape[0]/ratio), int(image.shape[1]/ratio),image.shape[2]),dtype='int32') #设置采样后的图像大小for i in range(image1.shape[0]): for j in range(image1.shape[1]): for k in range(image1.shape[2]): #对图像进行遍历 delta=image[i*ratio:(i+1)*ratio,j*ratio:(j+1)*ratio,k] #获取需要采样的图像块 image1[i,j,k]=np.mean(delta) #计算均值,并存入结果图像plt.imshow(image1) #打印采样后的图像plt.show()图1-5 使用求均值方法对图像进行采样

除使用求均值方法进行图像采样外,也可以使用求最大值方法进行图像采样,只将代码image1[i,j,k]=np.mean(delta)修改为image1[i,j,k]=np.max(delta)即可。使用求最大值法对图像进行采样,如图1-6所示。图1-6 使用求最大值法对图像进行采样

读者可以尝试修改代码中采样比率(ratio)的值,体验采样频率对图像空间分辨率的影响。一般情况下,采样间隔越大,所得图像像素数越少,空间分辨率低,图像质量差,严重时出现像素呈块状的国际棋盘效应;而采样间隔越小,所得图像像素数越多,空间分辨率高,图像质量好,但数据量较大。

图像采样的理论基础是采样定理,频率范围为(0,max)Hz的连续信号如果以大于或等于2×max Hz的采样频率对该信号进行采样,则可由采样所得信号无失真地恢复原始信号。由采样定理可知,若想无失真地恢复一幅图像,采样频率应该大于图像模拟信号最高频率的2倍。如果采样频率低于原信号最高频率的2倍,则恢复的信号中会包含原信号中不存在的低频成分,称为混淆,它会对信号造成干扰。针对图像理解或图像识别,更高的分辨率可以表示更多的信息。但是,对于人类而言,分辨率只要达到或接近人眼的辨识率即可,近年来提出的视网膜屏或者高清屏的概念均是针对人眼分辨率,而非图像信号频率。1.2.2 图像量化

模拟图像经过采样后,在空间上实现了离散化,并形成像素。但采样所得的像素值(即灰度值)依旧是连续量。采样后所得的各像素的灰度值从连续量到离散量的转换称为图像灰度的量化。图像的像素值(响应值)I(x,y)的数字化被称为图像的量化,即将图像响应值I(x,y)从I到I的实数域映射为有限级别的离散数值。图像采样将图minmax像的空间域限定为有限的离散坐标,而图像量化则将图像的响应值限定为有限的离散数值,如图1-7所示(对应图1-4)。与图像量化相关的度量为灰度级。灰度级(灰度层次)是表示像素明暗程度的整数量。例如,像素的取值范围为0~255,就称该图像为256个灰度级的图像。图像数据的实际灰度层次越多,视觉效果越好。图1-8为对灰度图像分别进行256级灰度量化、64级灰度量化、16级灰度量化的结果,对比图像可以发现256级灰度的细节呈现能力远高于其他两种灰度级。图1-7 数字图像量化示意(映射到离散响应值)图1-8 不同数量灰度级量化对图像质量的影响

图像量化的部分模拟的Python代码如下。from skimage import datafrom matplotlib import pyplot as pltimage=data.coffee() # 载入测试图像ratio=128 #设置量化比率for i in range(image.shape[0]): for j in range(image.shape[1]): for k in range(image.shape[2]): image[i][j][k]=int(image[i][j][k]/ratio)*ratio #对图像中的每个像素进行量化plt.imshow(image) #打印采样后的图像plt.show()

该代码将256级灰度的彩色图像量化到仅有2级灰度的彩色图像,结果如图1-9所示。图1-9 图像量化结果

图像的量化比率决定了图像的颜色精细程度。目前的一般做法是从图像响应最大值到响应最小值进行均匀量化,划分为若干量化层n级。目前常见的量化级数一般为2,如256或者65536。最小的量化级数为2,即灰度图像转变为二值图像,量化后的图像仅有0和1两种灰度取值。除均匀量化方法外,也存在非均匀量化。非均匀量化即在灰度级变化剧烈的区域用细粒度量化,而在灰度级比较平滑的区域用粗粒度量化。

量化等级越多,所得图像层次越丰富,灰度分辨率高,图像质量好,但数据量较大;量化等级越少,图像层次欠丰富,灰度分辨率低,可能会出现假轮廓现象,图像质量变差,但数据量较小。然而,在极少数情况下固定图像大小,减少灰度级能改善质量,产生这种情况的可能原因是减少灰度级一般会增加图像的对比度。例如,对细节比较丰富的图像数字化,可能会减少图像中用户不感兴趣的一些细节,增加感兴趣区域与背景图像的对比度。1.3 图像的表示和可视化

经过采样和量化之后,图像I已经成为空间位置和响应值均离散的数字图像。图像上的每个位置(x,y)以及其对应量化响应值称为一个像素,如图1-10所示。图1-10 数字图像表示1.3.1 图像的表示

通过采样和量化,原本连续的图像I=f(x,y)转换为一个二维阵列f(x,y),该阵列具有M行N列,其中(x,y)是离散坐标。

一般地,直接用二维矩阵A表示量化后的图像更方便。

二维矩阵是表示数字图像的重要数学形式。一幅M×N的图像可以表示为矩阵,矩阵中的每个元素称为图像的像素。每个像素都有它自己的空间位置和值,值是这一位置像素的颜色或者强度。

与图像表示相关的重要指标是图像分辨率。图像分辨率是指组成一幅图像的像素密度。对同样大小的一幅图,组成该图的图像像素数目越多,说明图像的分辨率越高,看起来越逼真。相反,像素越少,图像越粗糙。图像分辨率包括空间分辨率和灰度级(响应幅度)分辨率。空间分辨率是图像中可辨别的最小空间细节,取样值多少是决定图像空间分辨率的主要参数。灰度级分辨率是指在灰度级别中可分辨的最小变化。灰度级数通常是2的整数次幂。通常把大小为M×N、灰度为L级的数字图像称为空间分辨率为M×N像素、灰度级分辨率为L级的数字图像。

按照图像矩阵包含元素的不同,大致可以分为二值图像、灰度图像、彩色图像3类。二值图像也称单色图像或1位图像,即颜色深度为1的图像。颜色深度为1表示每个像素点仅占1位,一般用0表示黑,1表示白。典型二值图像及其矩阵表示如图1-11所示。图1-11 典型二值图像及其矩阵表示

灰度图像是包含灰度级(亮度)的图像,每个像素由8位组成,其值的范围为0~255,表示256种不同的灰度级。与二值图像相比,灰度图像可以呈现出图像的更多细节信息。彩色图像与灰度图像类似,每个像素也会呈现0~255共256个灰度级。与灰度图像不同的是,彩色图像每个像素由3个8位灰度值组成,分别对应红、绿、蓝3个颜色通道。

图像在计算机内以文件的形式进行存储,图像文件内除图像数据本身外,一般还有对图像的描述信息,以方便读取、显示图像。文件内图像表示一般分为矢量表示和栅格表示两类。矢量表示中,图像用一系列线段或线段的组合体表示。矢量文件类似程序文件,里面有一系列命令和数据,执行这些命令可根据数据画出图案。常用的工程绘图软件如AutoCAD、Visio都属于矢量图应用。栅格图像又称为位图图像或像素图像,使用矩阵或离散的像素点表示图像,栅格图像进行放大后会出现方块效应,常见的图像格式BMP是栅格图像的典型代表。1.3.2 图像的格式

图像数据文件的格式有很多,不同的系统平台和软件常使用不同的图像文件格式。常用的图像数据文件格式有BMP图像格式、JPEG图像格式、GIF图像格式等。

1. BMP图像格式

该格式是微软公司为Windows环境设计的一种图像标准,全称是Microsoft设备独立位图(Device Independent Bitmap,DIB),也称位图(bitmap),现已成为较流行的常用图像格式。位图文件由3部分组成:位图头部分、位图信息部分、位图数据部分。位图头部分定义了位图文件的类型、位图文件的占用存储大小、位图文件的数据起始位置等基础信息,用于位图文件的解析。位图信息部分定义了图像的水平宽度、垂直高度、水平分辨率、垂直分辨率、位图颜色表等信息,主要用于图像显示阶段。位图数据部分按照从上到下、从左到右的方式对图像中的像素进行记录,保持图像中的每个位置的像素值。

2. JPEG图像格式

JPEG(Joint Photographic Experts Group)是由国际标准化组织(ISO)旗下的联合专家小组提出的。该标准主要针对静止灰度图像或彩色图像的压缩,属于有损压缩编码方式。由于其对数字化照片和表达自然景观的色彩丰富的图片具有非常好的处理效果,已经是图像存储和传输的主流标准,目前大部分数字成像设备都支持这种格式。由于该标准针对的图像为压缩图像,所以在进行图像显示和处理中一般要经过压缩和解压过程。

3. GIF图像格式

GIF(Graphics Interchange Format)图像是另外一种压缩图像标准,其主要目的是为了方便网络传输。GIF格式图像中的像素用8位表示,所以最多只能存储256色,在灰度图像的呈现中表现效果较好。由于GIF文件中的图像数据均为压缩过的数据,且GIF文件可以同时存储多张图像,所以该格式常被用于动态图片的存储。1.3.3 图像的基本属性

图像的基本属性包括:图像像素数量、图像分辨率、图像大小、图像颜色、图像深度、图像色调、图像饱和度、图像亮度、图像对比度、图像层次等。

1. 图像像素数量

图像像素数量是指在位图图像的水平和垂直方向上包含的像素数量。单纯增加像素数量并不能提升图像的显示效果,图像的显示效果由像素数量和显示器的分辨率共同决定。

2. 图像分辨率

图像分辨率是指图像在单位打印长度上分布的像素的数量,主要用以表征数字图像信息的密度,它决定了图像的清晰程度。在单位大小面积上,图像的分辨率越高,包含的像素点的数量越多,像素点越密集,数字图像的清晰度也就越高。

3. 图像大小

图像大小决定了存储图像文件所需的存储空间,一般以字节(B)进行衡量,计算公式为:字节数=(位图高×位图宽×图像深度)/ 8。从计算公式可以看出,图像文件的存储大小与像素数目直接相关。

4. 图像颜色

图像颜色是指数字图像中具有的最多数量的可能颜色种类,通过改变红、绿、蓝三原色的比例,可以非常容易地混合成任意一种颜色。

5. 图像深度

图像深度又称为图像的位深,是指图像中每个像素点所占的位数。图像的每个像素对应的数据通常可以用1位或多位字节表示,数据深度越深,所需位数越多,对应的颜色表示也就越丰富。

6. 图像色调

图像色调指各种图像颜色对应原色的明暗程度(如RGB格式的数字图像的原色包括红、绿、蓝3种),日常所说的色调的调整也就是对原色的明暗程度的调节。色调的范围为0~255,总共包括256种色调,如最简单的灰度图像将色调划分为从白色到黑色的256个色调。RGB图像中则需要对红、绿、蓝3种颜色的明暗程度进行表征,如将红色调加深图像就趋向于深红,将绿色调加深图像就趋向于深绿。

7. 图像饱和度

图像饱和度表明了图像中颜色的纯度。自然景物照片的饱和度取决于物体反射或投射的特性。在数字图像处理中一般用纯色中混入白光的比例衡量饱和度,纯色中混入的白光越多,饱和度越低,反之饱和度越高。

8. 图像亮度

图像亮度是指数字图像中包含色彩的明暗程度,是人眼对物体本身明暗程度的感觉,取值范围一般为0%~100%。

9. 图像对比度

图像对比度指的是图像中不同颜色的对比或者明暗程度的对比。对比度越大,颜色之间的亮度差异越大或者黑白差异越大。例如,增加一幅灰度图像的对比度,会使得图像的黑白差异更加鲜明,图像显得更锐利。当对比度增加到极限时,灰度图像就会变成黑白两色图像。

10. 图像层次

在计算机设计系统中,为更加便捷有效地处理图像素材,通常将它们置于不同的层中,而图像可看作由若干层图像叠加而成。利用图像处理软件,可对每层进行单独处理,而不影响其他层的图像内容。新建一个图像文件时,系统会自动为其建立一个背景层,该层相当于一块画布,可在上面做一些其他图像处理工作。若一个图像有多个图层,则每个图层均具有相同的像素、通道数及格式。1.3.4 图像可视化模块

本节介绍如何使用Python对图像进行可视化,使用的工具是Python 3.7和skimage工具包。skimage的全称为Scikit-Image,Scikit-Image是基于Python的一款图像处理包,它将图片作为数组进行处理。它对scipy.ndimage进行了扩展,提供了更多的图片处理功能,由scipy社区开发和维护。与Opencv相比,skimage更容易安装和使用,对像素的操作和图像整体的操作更符合科学计算要求,所以这里选择使用skimage作为图像可视化工具包。下面从skimage模块结构、图像读取、图像显示、图像基本操作几个方面对skimage使用进行简单介绍。

1. skimage模块结构

在Python中要使用某个模块,需要首先对模块进行导入。导入可以通过以下语句进行。from skimage import data

skimage中包含若干功能模块,覆盖了图像信号处理所需的绝大部分功能,并且很方便,在此基础上进行功能扩展和二次开发。skimage主要模块及功能描述见表1-1。表1-1 skimage主要模块及功能描述

导入skimage的基本模板的语句如下。from skimage import 模块名

2. 图像读取

图像读取将图像从磁盘读入内存。skimage通过io模块对图像文件进行读取,读入内存之后的图像放入一个numpy格式的数组内。例如,在当前目录下有一个名为coffee.jpg的图片,读入该图片的代码如下。#导入对应模块from skimage import io#定义文件路径file_name='coffee.jpg'#将图片读入数组image内image=io.imread(fname=file_name)

以上代码将文件名为coffee.jpg的图片读入内存,并存放在数组image内,其中imread()函数用于文件的读取,其输入为图像路径,输出为一个名为image的numpy类型对象。可以通过对image进行操作,从而实现对图像的各种处理。

通过numpy类型对象的shape属性可以查看数组的形状,代码如下所示。print(image.shape)

以上代码的输出结果为(400, 600, 3)。由此可见,所读入的图片大小为400×600,包含红、绿、蓝3个颜色通道。

对图像进行显示的代码如下所示。from matplotlib import pyplot as plt #导入绘图模块plt.imshow(image)#进行图片绘制plt.show()#显示绘制图像

3. 索引操作

通过索引操作可以选择数组内指定位置的元素。Python语言中,一维数组索引下标的取值范围为[0~(数组元素个数-1)]。

索引包括单个元素索引和多个元素索引两种类型。单个元素索引指定要选择元素的确定行、列、通道位置,取出单个元素。一维数组单个元素索引操作可以通过数组名[索引位置]形式,取出对应位置元素。二维矩阵单个元素索引操作通过数组名[行索引x,列索引y]形式,取出矩阵第x行第y列元素。同理,三维数组元素索引方式为数组名[行索引x,列索引y,通道索引z]形式。对一维、二维数组进行元素索引的示例代码如下。import numpy as np #导入numpy工具包array=np.array([2,3,4,5,6]) #定义一维数组arrayprint(array[0]) # 打印第0 个元素print(array[1]) #打印第1 个元素#定义二维数组array2array2=np.array( [[1,2,3], [2,3,4], [4,5,6]])print(array2[1,0]) #打印第1 行,第0 列元素print(array2[1,2]) #打印第1 行,第2 列元素

多个元素索引可以一次取多个元素,一维数组多个元素索引通过数组名[索引起始位置:索引结束位置]形式取出从索引起始位置到索引结束位置的元素。二维数组多个元素索引通过数组名[起始行:结束行,起始列:结束列]形式取出开始行到结束行,起始列到结束列范围之间的元素。三维数组多个元素索引可通过数组名[起始行:结束行,起始列:结束列,起始通道:结束通道]形式取出起始行到结束行,起始列到结束列,起始通道到结束通道范围之间的元素。对一维、二维数组进行多个元素索引的示例代码如下。import numpy as np #导入numpy工具包array=np.array([2,3,4,5,6]) #定义一维数组arrayprint(array[0:3]) # 打印第0 个到第3 个元素#定义二维数组array2array2=np.array( [[1,2,3], [2,3,4], [4,5,6]])print(array2[1:2,1:2])

代码运行结果为[2 3 4][[3]]

从代码运行结果可以发现,多个元素索引时,索引区间是一个前闭后开区间,并不包含结束索引位置的元素。使用多个元素索引可以对图像进行裁剪操作,取出图像的第20到200行,第30到200列的子图像,并进行显示。使用多元素索引对图像进行裁剪的示例代码如下。from skimage import datafrom matplotlib import pyplot as pltimage=data.coffee()image1=image[20:200,30:200,:]plt.imshow(image1)plt.show()1.4 像素间的关系

像素间的关系主要对像素与像素之间的关联进行描述,基本关系包括像素间的邻域关系、连通性、像素之间的距离。

1. 邻域关系

邻域关系用于描述相邻像素之间的相邻关系,包括4邻域、8邻域、D邻域等类型。其中像素位置(x,y)的4邻域是(x-1,y)、(x+1,y)、(x,y-1)、(x,y+1),分别对应像素位置(x,y)的上、下、左、右4个像素。一般用符号N4(x,y)表示像素位置(x,y)的4邻域。如图1-12(a)所示,深色部分表示像素(x,y),浅色部分表示其4邻域,也可以称为边邻域。图1-12 像素邻域关系示意

像素的D邻域又可以称为像素的对角邻域。像素位置(x,y)的D邻域为(x-1,y-1)、(x-1,y+1)、(x+1,y-1)、(x+1,y+1)。一般使用符号ND(x,y)表示位置(x,y)的D邻域,如图1-12(b)所示,深色部分表示像素(x,y),浅色部分表示其D邻域。8邻域为4邻域和D邻域的合集,常用N(x,y)表示。8

2. 连通性

连通性是描述区域和边界的重要概念。两个像素连通的必要条件是:两个像素的位置满足相邻关系且两个像素的灰度值满足特定的相似性准则。像素间的连通性可分为4连通、8连通和m连通。如果像素q在像素p的4邻域内,则像素p和像素q是4连通的。如果像素q在像素p的8邻域内,则像素p和像素q是8连通的。m连通又称为混合连通,像素p与像素q的m连通需要满足以下两个条件:①像素p和像素q具有相同的像素响应值V;②像素q在像素p的4邻域内。若像素q在像素p的D邻域内,则要求像素p和像素q的4邻域的交集为空(没有响应值为V的元素)。

3. 像素之间的距离

对于像素p、q和z,坐标分别为(x,y)、(s,t)和(u,v),如果函数D满足距离三要素,即①非负性,D(p,q)≥0,当且仅当p=q时,D(p,q)=0;②对称性,D(p,q)=D(q,p);③三角不等式,D(p,z)≤D(p,q)+D(q,p);则称函数D为有效距离函数或度量。常用的像素间距离度量包括欧式距离、D距离(城市距离)及D距离(棋盘距离)。48

像素p与像素q的欧式距离定义如下:与像素p的欧式距离小于某一阈值r的像素形成一个以像素p为中心的圆。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载