Skip to main content

第二章 数字图形处理

可见光的类型

可见光属于电磁波

模拟图像和数字图像

模拟图像:二维空间和亮度值都是连续的图像
数字图像:二维空间和像素值都是离散(有限数字数值)表示的图像。

图像处理的概念

对图像信息加工,满足人的视觉或者应用需求。 数字图像处理指用计算机对数字图像进行处理。

图像处理的基本流程

图像1->图像处理系统->图像2。

图像分析

🔔

通过对图像中不同对象进行分割,来对图像中的目标进行分类和识别的技术。
图像1->图像分析系统->对图像描述的信息
图像分析的困难:图像的多义性、环境因素的影响、知识引导、大量数据。
(这是人脸还是蜡烛?)

image.png

图像处理涉及的领域

image.png

图像处理技术的研究内容

图像的获取和表示、图像增强图像恢复、图像压缩编码、图像的基本运算、图像特征提取、小波图像处理、图像表示和描述、彩色图像处理、视频图像处理、图像分割、图像变换、频率域图像处理、形态学图像处理。

图像处理的应用领域

生物医学、遥感技术、工业生产、军事技术、 通信技术、侦缉破案、气象预报、宇宙探索、考古 等,已经遍布国民经济的各个领域。

简单图象成像模型

一幅图像可以定义为二位函数f(x,y)。f值实质为图象源的辐射量。

🔔

图像的f(x,y)可以用照射到物体上所有光的总量和物体反射或折射的所有光的总量来表征
设i(x,y)表示照射到观察景物表面(x,y)处的白光强度,r(x,y)表示观察景物表面(x,y)处的平均反射(或透射)系数,则有:

f(x,y)=i(x,y)r(x,y)
0 < i(x,y) < A1,0 ≤ r(x,y) ≤ 1

对于消色光图像(单色光),f(x,y)表示图像在坐标点(x,y)处的灰度值I。
I=f(x,y) :::

图像数字化——采样

一个连续的图像在采样点进行数字化,这些点是在平面上排列的,他们的关系叫做栅格(grid)
数字图像是一个数据结构,通常是矩阵。栅格一般是方的或者正六边形。
image.png
一个无限小的采样点,称为像素,或者图像元素。实际上像素只是一个纯理论的概念,没有形状也没有尺寸,只存在于理论的计算之中。

图像数字化——量化

将采样的图像数值用一个数字表示。对一幅二维连续图像f(x,y)的幅值f的均匀量化,实质上就是将图像的灰度取值范围[0,Lmax]划分成L个等级(L为正整数,Lmax=L-1),并将二维图像平面上 M×N个网格的中心点的灰度值分别量化成与L个等级中最接近的那个等级的值。
image.png
矩阵是计算机处理图像的合理的数据结构。采样和量化越精细,矩阵长宽越大。

分辨率

屏幕分辨率:显示器屏幕上的最大显示区域,即水平与垂直方向的像素个数(heightwidth)。
图像分辨率:数字化图像的大小,即该图像的水平与垂直方向的像素总数(height
width)。

🌳

显示分辨率是指显示屏上能够显示的数字图像的最大像素行数和最大像素列数,取决于显示器上所能够显示的像素点之间的距离
图像分辨率反映了数字化图像中可分辨的最小细节,也即图像的空间分辨率。在这里将图像分辨率看成是图像阵列的大小(M×N)。
具有不同空间分辨率的数字图像在同一显示器上的显示分辨率相同。
当同一幅图像(或者空间分辨率相同的不同图像)在两个不同的显示器上显示的外观与尺寸与显示器的显示分辨率有关,显示分辨率越高,图像的外观尺寸越小,显示分辨率越低,外观尺寸越大。这个比较好理解,就是说相同的图像在越清楚的显示器上反而显得不那么清楚。

空间分辨率和灰度分辨率

空间分辨率是图像中 可分辨 的最小细节,主要由采样间隔值决定。对于一个同样大小的景物来说,对其进行采样的空间分辨率越高,采样间隔就越小,景物中的细节越能更好地在数字化后的图像中反映出来,也即反应该景物的图像的质量就越高

灰度分辨率(gray level resolution)是灰度分辨率是指在灰度级中可分辨的最小变化,通常把灰度级级数成为图像的灰度级分辨率,常有256、128、···、16、8、2。

image.png

🔔

一幅数字图像的阵列大小(简称为图像大小)通常用M×N表示。
在景物大小不变的情况下,采样的空间分辨率越高,获得的图像阵列M×N就越大;反之,采样的空间分辨率越低,获得的图像阵列M×N就越小
在空间分辨率不变的情况下,图像阵列M×N越大,图像的尺寸就越大;反之,图像阵列M×N越小,图像的尺寸就越小

举例:实际中的空间分辨率实例: image.png

🌳

由图中可看出,从现实景物到图像经历了一个从真实世界->矢量数据->栅格数据(像素点矩阵)的过程,真实世界中的10m*10m的格子被划分成一个像素。那么图像的分辨率就为10m。

采样数变化对图像视觉效果的影响

image.png

🔔

图(a)给出了一幅灰度级分辨率为256,空间分辨率为512×512的图像。
图(b)是从图(a)的512 ×512的图像中,每隔一行删去一行和每隔一列删去一列而得到的256×256的图像。图(c)、(d)、(e)、(f)的获得与上述方法类似。
原图对应的景物大小没有变化,对原图采样的“线对”宽度也没有变化,只是对同一景物图像的采样数目减少了。
由此说明:

  1. 在图像的空间分辨率不变(这里指线对宽度不变)的情况下,采样数越少,图像越小。
  2. 在景物大小不变的情况下,图像阵列M×N越小,图像的尺寸就越小。

空间分辨率对图像视觉效果的影响

image.png

🔔

图a给出了一幅灰度级分辨率为256,空间分辨率为512×512的图像。
图b、c、d、e、f 的灰度级分辨率仍为256,但空间分辨率依次降低为:256×256, 128×128,64×64,32×32,16×16(线对宽度宽了) 。
由此可见,随着空间分辨率的降低,图像中的细节信息在逐渐损失,棋盘格似的粗颗粒像素点变得越来越明显。由此也说明,图像的空间分辨率越低,图像的视觉效果越差。

灰度级分辨率对图像视觉效果的影响

image.png

🔔

图a给出了一幅灰度级分辨率为256,空间分辨率为512×512的图像。
图b、c、d、e、f 的空间分辨率与图a相同,但空间分辨率依次降低为:32、16、8、4、2。
由上图可见,随着灰度分辨率的降低,图像的细节信息在逐渐损失,伪轮廓信息在逐渐增加。图中由于伪轮廓信息的积累,图像已显现出了木刻画的效果。由此也说明:灰度分辨率越低,图像的视觉效果越差.

更多有关空间分辨率和灰度分辨率的知识,请参考:空间分辨率和灰度分辨率

图像深度与显示深度

  1. 图像深度:(也称图像灰度、颜色深度)表示数字位图图像中每个像素上用于表示灰度或颜色的二进制数字位数
  2. 显示深度:(也称显示灰度、显示颜色深度)表示图像在显示器上显示时,每个像素上用于表示灰度或颜色的二进制数字位数
    🔔

    若显示器的显示深度小于数字图像的深度,就会使数字图像颜色的显示失真。也就是说,显示器的深度不足以显示这幅图片,因此产生了失真。

图像的文件大小

用字节表示图像文件大小时,一幅未经压缩的数字图像的数据量大小计算如下:
::: center 图像数据量大小 = 像素总数×图像深度÷8 :::

练习1
一张分辨率为800×600的黑白图像需要多少的存储空间?(.bmp)

Details
首先bmp位图是没有压缩的图片,适用上述公式。 **黑白位图颜色深度为1** ,因此: 800✖600✖1/8=60000byte≈60kb (存储量=像素点的个数 × 每像素占用空间)

练习2
一张分辨率为800*600的256级灰度的图象要多少存储空间?(256级灰度.bmp)

Details
首先bmp位图是没有压缩的图片,适用上述公式。 256级灰度占用2进制位数为8,因此: 800✖600✖8/8=480000Byte (存储量=像素点的个数 × 每像素占用空间)

练习3
一张分辨率为800*600的24位图象要多少存储空间?(24位真彩色.bmp)

Details
首先bmp位图是没有压缩的图片,适用上述公式。 800✖600✖24/8=800✖600✖3字节 (存储量=像素点的个数 × 每像素占用空间)

图像数字化——数字图像的表示

数字图像二维矩阵表示

为了描述上的方便,我们仍用f(x,y)表示数字图像。设x∈[0,M-1],y∈[0,N-1],f∈[0,L-1],则数字图像可表示成下式形式的一个M×N的二维数字阵列。
image.png 其中:每个(x,y)对应数字图像中的一个基本单元,称其为图像元素(picture element),简称为像素(pixel);且一般取M、N和的灰度级L为2的整次幂(M\N作为高宽不一定这样取值),即: ::: center M= 2^m
N= 2^n
L= 2^k
(m\n\k为正整数) ::: 因此,存储一副M×N的图像,需要的存储位数为b=M×N×K
由于数字图像的灰度级取值范围为[0,L-1],所以:
1. K=1 (2的一次)表示黑白图像 只能表示两种情况,即每个像素非黑即白。

⚠注意

黑白图像一定是2值图像,但2值图像不一定是0-黑和1-白两种值。

2. K=4,16灰度级图像
是指图像中每个像素的信息是一个量化了的灰度级的值,没有彩色信息;其值可以是{0,1,2,…,15}中的任一值。
3. K=256 图像中每个像素的灰度级值可以取{0,1,2,…,255}中的任一值。

image.png

数字图像的坐标表示

image.png

表示实例

image.png

图像数字化——颜色模型

彩色空间有多种不同的表示形式,常用的有红、绿、蓝(RGB)三基色模型、色度、饱和度、亮度(HSI)模型、欧洲定义的PAL制使用的YUV模型,以演播室质量标准为目标的彩色图象压缩方案中采用的YCbCr颜色模型和印刷业常用的CMY,CMYK颜色模型。
人眼的视觉过程是一个复杂的过程,可用亮度(灰度)、色调和饱和度这三个基本特征量来区分颜色。
色度、饱和度、亮度(HSI)彩色系统格式的设计反映了人类观察彩色的方式。如:红色又分为浅红和深红色等等。

HSI空间中的三个分量分别是色调(Hue)、饱和度(Saturation)、亮度(Intensity).

色调(Hue)

是指图像的相对明暗程度,在彩色图像上表现为颜色。色调是物体反射的光线中以哪种波长占优势来决定的,不同波长产生不同颜色的感觉,色调是颜色的重要特征,它决定了颜色本质的根本特征;
由角度表示。反映了该颜色最接近什么样的光谱波长(既彩虹中的那种颜色)0度为红色,120°为绿色,240°为蓝色。0°到240°覆盖了所有可见光谱的颜色,240°到300°是人眼可见的非光谱色(紫色)。

image.png

饱和度(Saturation)

为彩度除以明度,是指色彩的鲜艳程度;饱和度与色调的纯度有关; 表示颜色的深浅程度. 饱和度参数是色环的原点到彩色点的半径长度。在环的外围圆周是纯的或称饱和的颜色,其饱和度值为1。在中心是中性(灰)影调,即饱和度为0。
image.png

亮度(Intensity)

是指发光体(反光体)表面发光(反光)强弱的物理量;亮度与物体的反射率(或透射率)成正比;关心整体亮度,不关心颜色.
image.png

RGB颜色模型

国际照明委员会(CIE) 规定以700nm(红)、546.1nm (绿)、435.8nm (蓝)三个色光为三基色。又称为物理三基色。自然界的所有颜色都可以通过选用这三基色按不同比例混合而成。 彩色图像:彩色图像是指每个像素的信息由RGB三原色构成图像,其中RBG又是由不同亮度值来描述的。
在多媒体计算机中常用红、绿、蓝(RGB)彩色空间表示,计算机显示器的输入需要红、绿、蓝(RGB)三个彩色分量,通过这三个分量不同比例的组合, 在显示器屏幕上可以得到任意的颜色。

在多媒体系统中,不管采用什么形式的彩色空间表示,最后要求输出的都是用RGB彩色空间来表示的.

由于HSI格式反映了人类观察彩色的方式,较之RGB格式更接近人对彩色的认识和解释,因此采用HSI彩色空间表示图像的颜色能够减少彩色图象处理的复杂性,在图象处理中用HSI表示和处理图象的工作量比用RGB彩色空间要方便和简单.

🌳

HSI与RGB空间转换:

image.png :::

CMY颜色模型

青、品红、黄(CMY)彩色模型是彩色图象印刷行业使用的彩色空间,在CMY模型中,颜色是从白光中减去一定成分得到的,青、品红、黄是红、绿、蓝的补色,称为减色基,而红、绿、蓝称为加色基。

CMYK颜色模型

image.png
image.png

YUV颜色模型

电视信号在发射时,转换成YUV形式,接受时再还原成RGB三基色信号,由显像管显示。在这种表色系统中 ::: center Y:亮度
U,V:色差信号
::: 目的是为了彩色电视与黑白电视兼容,YUV适用于PAL制式的模拟电视图像的表示。

🌳

YUV与RGB空间转换:

image.png :::

图像数字化——调色板

真彩和伪彩

1.真彩色:图像深度为24,RGB各占用8位来表示各自基色分量的强度 2.伪彩色:图像每个像素值实际上是一个索引值或代码

调色板

是指在16色或256色显示系统中,将图像中出现最频繁的16 种或256种颜色组成一个颜色表,并将它们分别编号为0至 15或0至255,这样就使每一个4位或8位的颜色编号与颜色 表中的24位颜色值(对应一种颜色的R、G、B值)相对应。
这种4位或8位的颜色编号称为颜色的索引号,由颜色索引 号及其对应的24位颜色值组成的表称为颜色查找表(look up table,简称LUT),也称为调色板. image.png image.png

常用颜色的RGB组合

image.png

数字图像的性质——数字图像的度量和拓扑性质

一幅数字图像由有限大小的像素组成,像素反映图 像特定位置处的亮度信息。通常,我们假设像素按 照矩形采样的栅格布置。我们用二维矩阵来表示这 样的数字图像,矩阵元素是自然数,对应于亮度范 围的量化级别。

一 距离度量函数

对于在图像显示坐标系中坐标分别位于(x,y),(u,v)和(w,z)处的像素p、q和r,如果: ::: center (1)D(p,q)≥0(D(p,q)=0,当且仅当p=q,即p和q是指同一像素); (2)D(p,q)=D(q, p); (3)D(p,r) ≤D(p,q)+D(q,r)。 ::: 则D是距离度量函数。

距离的度量方式:

1.欧氏距离 经典几何学和日常经验中的欧氏距离(Euclidean distance)
image.png

2.街区距离 像素p和q之间的D4距离,也即街区(city-block)距离,定义为:
image.png 也可以表示为在数字栅格上从起点移动到终点所需的最少基本步数. 比如,那些与点(x,y)的街区距离小于2或等于2的像素组成了如下图所示的等距离轮廓。
image.png

3.棋盘距离
在数字栅格中如果允许对角线方向的移动,我们就得到了距离𝑫𝟖, 常称为“棋盘”距离,棋盘距离等于国王在棋盘上从一处移动到另一处所需的步数。
::: center 𝐷8[( i,𝑗) , (ℎ, 𝑘)] = max{|𝑖 − ℎ|,|j − 𝑘|} :::

各种距离的对比

D8:棋盘距离 D4:街区距离
DE:欧氏距离
image.png

🔔

如图,街区距离为 |4-0|+|2-0|=6
欧式距离为 根号[(4-0)^2+(4-2)^2]
棋盘距离为 max(4-2,4-0)=4

各种距离对比

灰度直方图

概念
灰度直方图(histogram)是灰度级的函数,描述的是图像中每种灰度级像素的个数,反映图像中每种灰度出现的频率。其中,横坐标是灰度级,纵坐标是灰度级出现的频率。

🌳

1.统计灰度级中每个像素在整幅图像中的个数
2.计算每个灰度级占图像中的概率分布
3.计算累计分布概率
4.计算均衡化之后的灰度值
5.映射回原来像素的坐标的像素值

下面是使用python实现的灰度直方图计算

Details
import cv2 as cv
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.ticker import MultipleLocator # 设置坐标系

img = cv.imread('1.jpg', 0) # 读取图片,第二个参数为0表示灰度图像,为1表示原图


def my_histogram(img):
imgwh = img.shape
width = imgwh[0] # 图像的宽
height = imgwh[1] # 图像的高
print(width)
print(height)
print(img.size) # 打印图片信息
img_pixel = [0] * 256 # 存储像素出现次数的list

for i in range(width):
for j in range(height):
img_pixel[img[i, j]] += 1 # 统计某个灰度值出现的次数

x_distance = MultipleLocator(50)
# 把x轴的刻度间隔设置为50

dataframe = pd.DataFrame({'freq': img_pixel}) # 告知绘图器数据
# print(dataframe) #打印表格中的数据
axis = dataframe.plot.bar(width=1.1, rot=0) # width:每根柱子宽度 rot:x轴标签旋转角度
axis.xaxis.set_major_locator(x_distance) # 把x轴的主刻度设置为50的倍数
plt.xlim((0, 260)) # 设置坐标系范围
plt.suptitle('Image histogram') # 设置图像名称
plt.show() # 显示图像


my_histogram(img) # 调用函数

🔔

灰度直方图的性质:
1.反应图像的数理统计信息
2.不表示图像的空间信息
3.任一特定图像都有唯一直方图,反之不成立(无法通过直方图描述的信息来判断两幅图像是否相同)

🔔

灰度直方图的应用:
1.边界阈值选择 image.png
2.图像质量获取与评价
image.png

直方图距离
1.较暗的直方图
image.png
2.较亮的直方图
image.png
3.对比度较低(直方图较集中)
image.png
4.对比度较高(直方图较均衡)
image.png

直方图均衡化

对在图像中像素个数多的灰度级进行展宽,而对像素个数少的灰度级进行缩减,从而达到清晰图像的目的。

1.设f和g分别是源图像和处理后的图像,求f的直方图h.
image.png
2.计算某个灰度级的像素在整个图像中所占的百分比 hs(i).
image.png
3.计算图像各灰度级的累积分布hp. image.png
4.求出新图形g的灰度值.
image.png
image.png
处理结果:
image.png

位图与矢量图

位图

点阵图,栅格图像
使用彩色网格及像素来表现图像;每个像素都有特定的位置和颜色值
可操作性每个像素,超过其最佳分辨率时,容易出现锯齿
常用处理软件:PS、美图秀秀

矢量图

绘图图像、矢量图
以数学向量方式记录图像,内容以线条和色块为主
轮廓的形状更容易修改和控制,和分辨率无关;
需要用专业软件进行处理:Adobe Illustrator、CorelDRAW
矢量图可以比较方便地转换为位图

图像文件的格式

图像文件的格式有很多种,如:bmp、jpg、png、gif等,这些格式都是图像文件的一种,但是他们的特点不同,如下:

• BMP格式:位图文件(Bitmap File)是一种Windows采用的点阵式图像文件格式。
• GIF格式:图形交换格式(Graphics Interchange Format),以数据块为单位来存储图像的相关信息.
• PNG格式:便携网络图形(Protable Network Graphic)
• JPEG格式:由联合图像专家组(Joint Photographic Experts Group)开发,后缀为.jpg或.jpeg
• TIFF格式:标签图像文件格式(Tag Image File Format,TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像,扩展名为.tif

bmp格式

BMP图像的文件主要由:

位图文件的组成部分各部分的标识名称各部分的作用与用途
位图文件头BITMAPFILEHEADER说明文件的类型和位图数据的起始位置等,共14个字节。
位图信息头BITMAPINFORMATION说明位图文件的大小、位图的高度和宽度、位图的颜色格式和压缩类型等信息。共40个字节。
位图调色板RGBQUAD由位图的颜色格式字段所确定的调色板数组,数组中的每个元素是一个RGBQUAD结构,占4个字节。
位图数据BYTE位图数据,位图的压缩格式确定了该数据阵列是压缩数据或是非压缩数据。

1. 位图文件头(Bitmap File Header) BITMAPFILEHEADER
说明文件的类型和位图数据的起始位置等,共14个字节。

typedef struct{
WORD bfType; //文件类型
DWORD bfSize; //文件大小
WORD bfReserved1; //保留字1,约定0
WORD bfReserved2; //保留字2,约定0
DWORD bfoffBits; //位图阵列偏移量
}BITMAPFILEHEADER;

图2.21给出了256×256的256灰度级lena图像的位图文件头中14个字节的排列情况及含义。
其中:⑴ 2个字节构成1个字。每个字的前一个字节是低位字节,后一个字节高位字节。
⑵ 4个字节的是32位的双字。每个双字的前一个字是该双字的低16位,后一个字是该字的高16位。
image.png
比如,对于双字36 04 01 00来说,4个字节从高到低依次为00 01 04 36,其十进制值应为:
image.png

2. 位图信息头(Bitmap Information Header)BITMAPINFORMATION 说明位图文件的大小、位图的高度和宽度、位图的颜色格式和压缩类型等信息。共40个字节。

typedef struct{
DWORD biSize; //信息头大小
DWORD biWidth; //位图宽度
DWORD biHeight; //位图高度
WORD biPlane; //图像平面数,约定1
WORD biBitCount; //指定每个象素的位数
DWORD biCompression; //指定压缩格式,0,1,2
DWORD biSizeImage; //位图数据占用字节数
DWORD biXPelsPerMeter; //目标设备水平分辨率
DWORD biYPelsPerMeter; //目标设备垂直分辨率
DWORD biClrUsed; //位图中实际用到的颜色数
DWORD biClrImportant; //位图中重要的颜色数
}BITMAPINFOHEADER;

biBitCount用于指定表示每个像素所需的比特位数,其值是1、4、8或24之一。
为1时,说明位图文件表示的是一幅二色黑白图像。
为4时,说明位图文件表示的是一幅16色图像。
为8时,说明位图文件表示的是一幅256色图像。
为24时,说明位图文件表示的是一幅最多有2^24=16777216种颜色的图像。位图数据阵列中的每3个字节表示一个像素.


biSizeImage用于指定实际的位图数据占用的字节数。
由于要求对应于位图阵列的每行的字节数必须是4的倍数,
所以其值也可由下式求得:
image.png
且:是为了使图像的宽度biWidth的值占用的字节数为大于 且最接近于biWidth的4 的整倍数,从而满足位图阵列的每 行的字节数必须是4 的倍数的要求。


biClrUsed用于指定位图中实际用到的颜色数。当 biClrUsed的值不为0时,其值即是调色板中的颜色数;当 biClrUsed的值为0时,调色板中的颜色数由式(2.16)确 定。 image.png


image.png
3. 位图调色板(Bitmap Palette)RGBQUAD 由位图的颜色格式字段所确定的调色板数组,数组中的每个元素是一个RGBQUAD结构,占4个字节。

typedef struct{
BYTE rgbBlue; 蓝色分量
BYTE rgbGreen; 绿色分量
BYTE rgbRed; 红色分量
BYTE rgbReserved;保留字,约定为0
}RGBQUAD;

4. 位图数据(Bitmap Data)BYTE 位图数据,位图的压缩格式确定了该数据阵列是压缩数据或是非压缩数据。
BMP位图文件的第4部分是实际的图像数据。 对于具有调色板的位图,图像数据就是该像素在 调色板中的索引值。 对于2色黑白图像,每个字节可以表示8个像素; 对于16色图像,每个字节可以表示2个像素; 对于256色图像,每个字节可以表示一个像素。 对于没有调色板部分的真彩色图像,图像数据就 是实际的B、G、R值,也即3个字节表示一个像素。 图像的位图数据表示的图像共有 biWidth×biHeight个像素。
image.png

更多BMP结构

😴