Computer Vision笔记01:图像处理


第一次在CSDN写博客。由于最近在学习计算机视觉 (CV) 课程,为了更系统性的梳理内容,所以整理了这份笔记。既然是计算机视觉课程,那么以图片这种更为直观的形式,可以大大降低理解的难度,因此我会在本篇笔记中多以图片的形式进行理解。

由于本人以冈萨雷斯的《数字图像处理(第三版)》作为辅助教材进行学习,因此会有很多来自于本书的图片

什么是图像处理(Image Processing)?

从图像处理到计算机视觉这个连续统一体内没有明确的界限。一种有用的范例是考虑三种典型的计算处理,即低级、中级、高级处理:

  1. 初级处理(Image Processing):比如降噪、对比度增强、图像锐化等图像预处理操作。主要的目的是抑制图像的畸变 (Distortion),增强图像的相关信息,为了后续的图像分析与解释做好准备。初级处理(Image Processing)的主要特征是输入和输出都是图像(Image)
  2. 中级处理(Image Analysis):涉及诸多任务,典型的有图像分割(Image Segmentation),即将一幅图像分为不同的区域和目标。中级处理(Image Analysis)的特征是输入是图像(Image),但是输出是从图像中提取出的特征(Features)
  3. 高级处理(Image Interpretation):涉及“理解”已识别的目标图像的总体,执行与人类视觉相关的认知功能,这也是计算机视觉(Computer Vision)的主要任务。高级处理(Image Interpretation)的特征是输入为图像(Image),输出是对图像的解释/理解(Interpretation)

由此可以明显地看出,图像处理(Image Processing)主要是针对图像自身属性的一系列操作,是为了在进行更深入的图像分析时,能有符合需求的图像而进行的预处理。

图像处理(Image Processing)的分类

图像处理(Image Processing)主要分为两类:

  1. 空间域操作(Spatial Domain Operation):空间域(Spatial Domain)指图像平面本身。这类图像处理方法直接以图像中的像素(Pixels)操作为基础。又可细分为两类:
    1. 点操作(Point Operation):在单个像素上进行的灰度变换 (intensity transformations on individual pixels),主要以对比度和阈值处理为目的。
    2. 邻域操作(Neighbourhood Operation):在一组像素上进行的空间滤波(spatial filtering on groups of pixels),是涉及改善性能的操作。
  2. 变换域操作(Transform Domain Operation):这里的变换域主要指的是傅里叶空间(Fourier Space),也就是我们常说的频域(Frequency Domain)。具体的操作为:首先要把图像变换到频域,在频域内进行处理,再用反变换把处理后的图像(Processed Image)返回到空间域(Spatial Domain)

下面,我们将首先从空间域的图像处理开始看起

空间域处理(Spatial Operation)

对于空间域的操作,我们可以用以下公式来表示:

在这里插入图片描述
在该公式中:
f(x, y) :输入图像(Input Image)
g(x, y) :处理后的图像(Processed Image)
T[ ] :在点 (x, y) 上定义的关于图像f 的算子

当然,我们也可以将上述的公式,以灰度级(Gray Level)的形式呈现:
在这里插入图片描述
此时:
sr 分别表示图像gf 在任意点 (x, y) 的灰度

基本的灰度变换(Intensity Transformation)

灰度反转(Intersity Inversion)

在这里插入图片描述
使用反转变换可以得到灰度范围为 [0, L-1] 的一幅图像的反转图像,即等效的照片底片。该变换特别适合用于增强嵌入在图片暗区域中的灰色/白色细节。

用图片直观的感受一下:
在这里插入图片描述

对数变换(Log Transformation)

在这里插入图片描述
其中c为常数。这一变换会把输入图像 (Input Image)中范围较窄的低灰度值映射为输出图像(Output Image)中较宽范围的灰度值,对高的输入灰度值进行相反操作。这一变换用于扩展图像中的暗像素的值,同时压缩更高灰度级的值。即压缩像素值变化较大的图像的动态范围。

具体的效果展示会放在之后的频域变换中,这里我们只给出对数变换的的曲线:
在这里插入图片描述

幂律(伽马)变换(Power Transformation)

在这里插入图片描述
这里给出幂律变换的曲线:

在这里插入图片描述

可以与对数变换 (Log Transformation) 类似,部分 γ 值的幂律变换会把较窄的暗色域映射为较宽的输出值,对输入的高灰度级值也成立。但是,随着 γ 值的增大,曲线会发生变化。

简单的来说,当 γ < 1 时生成的曲线的效果与 γ > 1 时完全相反,而当 γ = 1 时,就是一个恒等变换。

对于幂律变换的作用,这里有几个需要特别说明:

  1. 伽马 (γ) 校正:用于显示、打印等的各种设备根据幂律产生响应,用于校正这些幂律响应的处理即为伽马校正。比如,某个设备的响应是一个指数为2.5的幂函数。这时,该设备显示的图像比输入的图像偏暗,因此我们在图像输入到该设备之前,进行预处理,即进行在这里插入图片描述
    此时输入到相同设备,输出的图像接近原图。γ 要根据不同的设备进行设定。在这里插入图片描述

  2. 对比度增强:对比度增强需要根据图像本身的特点来进行操作。我们要铭记当 γ > 1γ < 1 时,产生的效果是完全不同的。这里给两个例子来体会一下:在这里插入图片描述
    在这里插入图片描述

分段线性变换(Piecewise Linear Transformations)

对比度拉伸(Contrast Stretching)

为了生成有更高对比度的图片;
将输入图像 (Input Image) 中低于L的灰度值,在输出图像 (Output Image) 中全部设为黑(灰度值为0);
将输入图像 (Input Image) 中高于H的灰度值,在输出图像 (Output Image) 中全部设为白(灰度值为255);
将输入图像 (Input Image) 中L到H之间的灰度值,进行线性缩放 (Linearly Scale);

在这里插入图片描述

对比度阈值化(Intensity Thresholding)

极限情况的对比度拉伸 (Intensity Stretching);
生成二值化的灰度图 (Binary Image);
低于阈值 (Thresholding) 的灰度值全部置为黑 (0);
大于等于阈值 (Thresholding) 的灰度值全部置为白 (255);
常用于图像分割 (Image Segmentation) ;
仅用于目标 (Object) 和背景 (Background) 相差巨大的情况;
在这里插入图片描述
在这里介绍2种经典的自动灰度阈值化 (Automatic Intensity Thresholding)

大津算法 (Otsu’s Method):
大津算法的思想是通过穷举搜索 (Exhaustively Search) 寻找一个阈值 (Thresholding) 以:

最小化类内方差 (intra-class variance)
在这里插入图片描述
最大化类间方差 (inter-class variance)
在这里插入图片描述
p0 是小于阈值的像素的比例(class 0)
p1 是da于阈值的像素的比例(class 1)
所以 p0 + p1 = 1
𝜇0𝜇1 是class 0 和 class 1 像素的平均灰度值
𝜎02𝜎12 的灰度方差

大津算法的核心思想就是让同一类更接近,不同类之间更有区分度
在这里插入图片描述
Iso-data聚类算法
具体的实现步骤:

  1. 选择一个任意的初始化阈值t
  2. 对应阈值计算两个类别的均值 𝜇0𝜇1
  3. 根据均值的均值更新 tt = ( 𝜇0 + 𝜇1 )/ 2
  4. 若在3中,t 的值被改变,则回到2,继续

直到 t 收敛 (Convergence),阈值就是两个类别的均值的中点 (Midway)
在这里插入图片描述

分段对比度拉伸(Piecewise Contrast Stretching)

这一操作的具体形式实际上和普通的对比度拉伸(Contrast Stretching)类似,我们从曲线图就可以很直观的了解:
在这里插入图片描述
用于增加图像灰度级的动态范围 (Dynamic Range of gray level)
一般用于显示设备或录制介质以覆盖全范围

灰度级分层(Gray-level Slicing)

用于突出图像中特定范围的灰度级
有两种分层方式:

  1. 一部分灰度全部分为高值,一部分全部分为低值,因此会生成一幅二值图
    注意:并不是像阈值化一样全部分为黑白
  2. 亮化一部分想要的灰度,同时保留背景和其他部分的灰度级

在这里插入图片描述

比特平面分层(Bit-plane Slicing)

这个技术实际上很好理解。像素 (Pixel) 是由比特组成的数字。比如我们常用的256级灰度图,每个像素的灰度由8bits组成,因此这时候就有8个比特平面:
在这里插入图片描述
比特平面分层用以凸显出特定比特对于图像整体的贡献度;
对于图像压缩 (Image Compression) 很有用。
在这里插入图片描述

直方图处理(Histogram Processing)

在计算机视觉中,灰度直方图 (Histogram of pixel intensity) 是一个即极为重要的概念。

简单的来说,对于一幅图像中所有可能的灰度级,我们统计每个灰度级,有多少像素拥有这个灰度值,最后根据结果绘制出的图就是灰度直方图。

用正式一些的语言来定义,即为:
灰度范围为 [0, L-1] 的数字图像的直方图是离散函数 h(rk) = nk ,其中 rk 是第k级灰度值, nk 是图像中灰度为 rk 的像素个数。若用 MN 表示图像的行和列的维数,那么归一化后的灰度直方图p(rk) = nk / MN 给出,其中 k = 0, 1, …, L-1p(rk) 是灰度级 rk 在图像中出现的概率的一个估计,且所有p之和为1。

所以归一化后的灰度直方图,即为概率函数。(Normalized Histogram = Probability Function)

在这里插入图片描述
灰度直方图的处理主要分为两类:

  1. 直方图均衡 (Histogram equalization)
    直方图均衡的目的,是为了得到一幅在整个灰度范围内,灰度级均匀分布的图像
    (To get an image with equally distributed intensity levels over the full intensity range)
  2. 直方图匹配/规定化 (Histogram matching/Histogram specification)
    直方图匹配是为了得到一幅具有指定的直方图形状(灰度分布)的图像
    (To get an image with a specified intensity distribution, determined by the shape of the histogram)

接下来将对这两种处理方法进行介绍。

直方图均衡(Histogram Equalization)

首先,我们要知道为什么要进行直方图均衡,先来看以下四幅图像及其灰度直方图:
在这里插入图片描述
从以上一系列图片,我们很容易得到以下结论:

  1. 在暗图像中,直方图的分量主要集中在灰度级的低(暗)端,即横坐标左边
  2. 在亮图像中,直方图的分量主要集中在灰度级的高(亮)端,即横坐标右边
  3. 低对比度的图像具有较窄的直方图,且集中在灰度级的中部
  4. 高对比度的图像,直方图的分量覆盖了很狂的范围,且分布的很均匀

因此我们可以得到一个结论:若一幅图像的像素倾向于覆盖所有可能的灰度级,且分布均匀,那么会有高对比度的外观且表现出灰度的鲜明变化。这也是我们想要使用直方图均衡的原因。

接下来,我们来看直方图均衡的具体原理:
首先,我们回顾之前提到的图像灰度级的变换公式:

在这里插入图片描述
这里我们先考虑连续灰度值,r 的取值范围为 [0, L-1]
假设该公式满足以下两个条件:

  1. T( r )[0, L-1]严格单调递增
  2. 0 ≤ r ≤ L - 1 时,0 ≤ T( r ) ≤ L - 1

因为之后的解释中,我们需要使用反变换:

在这里插入图片描述
所以,条件1是为了保证在从s反变换到r时,是一对一映射,不会有一对多的情况;条件2是为了保证输入灰度级与输出灰度级范围相同。这里用一张图就能直观理解:
在这里插入图片描述
对于连续随机变量 rs,我们可以用它们的概率密度函数 (PDF) 来进行描述。
pr( r )ps( s ) 分别表示 rs 的PDF。
由基本的概率论我们可以得到一个结论,T( r )pr( r ) 已知,同时 T( r ) 是连续且可微的,则映射后的变量 s 的PDF可由下式得到:

公式1:在这里插入图片描述
由此我们可知,输出灰度变量 s 的PDF由输入灰度变量 r 的PDF和变换函数决定
我们选择变换公式
公式2:在这里插入图片描述
公式的右边为随机变量 r 的累积分布函数 (CDF)。由于PDF总为正,积分表现为函数曲线下方的面积,因此变换公式满足条件1。该等式上限为 r = L - 1 此时的积分值为1,这时 s 的值为 L -1,因此也满足条件2。
为了求得相应变换的 ps( s ) ,我们需要使用公式1,因此我们需要知道 dr/ds。根据莱布尼茨准则我们知道,关于上限的定积分的导数等于被积函数在该上限的值,因此:

在这里插入图片描述
将该式代入公式1,我们可得到:

在这里插入图片描述
显然,这是一个均匀概率密度函数 (uniform distribution)。简而言之,我们证明了,执行公式2的灰度变换函数,得到的随机变量 s 由一个均匀PDF表征。

对于离散值,我们处理其概率(归一化后的灰度直方图的值)与求和来代替连续变量处理中的PDF和积分,则:
在这里插入图片描述
公式3:在这里插入图片描述
这样输出图像 (Outpt Image) 通过上式将输入图像中灰度值为 rk 的各像素映射到输出图像中灰度值为 sk 的对应像素。

我们用一个例子来具体感受一下:
在这里插入图片描述
由题目可知,该图像的灰度级 L = 23 = 8,因此灰度级范围为 [0, 7]。同时 M = N = 64,所以 MN = 4096.

直方图均衡的输出由公式3可以计算得到:
在这里插入图片描述
在这里插入图片描述
以及 s2 = 4.55, s3 = 5.67, s4 = 6.23, s5 = 6.65, s6 = 6.86, s7 = 7.00
因为这些值都是用概率值求和得到,所以都是小数,而灰度值是整数,所以要把这些值近似为最接近的整数:
在这里插入图片描述
这就是直方图均衡的整个过程,最后,我们再用图的形式体现一遍:
在这里插入图片描述

直方图匹配(Histogram Matching)

直方图均衡 (Histogram Equalization) 能够自动确定变换函数,该函数寻求产生有均衡直方图的输出图像。但有时,我们希望处理后的图像具有规定的直方图形状,能够让输出图像具有指定形态的直方图的操作叫做 直方图匹配/直方图规定化

下面我们重新再次回到连续型随机变量(连续性灰度值)rz 来进行考虑。

依然令pr( r )pz( z ) 分别表示 rz 的PDF, rz 分别是输入和输出图像的灰度级。pr( r ) 可由给定的输入图像得到, pz( z ) 是我们希望输出图像具有的指定的PDF。

接下来,我们令 s 是一个具有以下特性的随机变量:

公式4:在这里插入图片描述
可以很明显地看到,该式子即为之前直方图均衡 (Histogram Equalization) 的公式2,即直方图均衡的变换公式。

接着,我们定义具有如下特性的随机变量 z

公式5:在这里插入图片描述
由以上两个公式,我们可以得到 G( z ) = T( r ) ,因此 z 满足以下条件:

公式6:在这里插入图片描述
一旦从输入图像估计出 pr( r ) ,就可以利用公式4得到变换函数 T( r ),同样,因为 pz( z ) 由我们指定,那么变换函数 G( z ) 就可由公式5得到。

从以上公式4公式6的过程,我们可以看出,经过以下步骤,可由一幅给定图像,得到一幅灰度级具有指定PDF的新图像:

  1. 由输入图像得到 pr( r ),并由公式4得到 s
  2. 使用公式5中指定的PDF,得到 G( z )
  3. 求得反变换函数:z = G-1 (s) 。因为 z 是由 s 得到的,所以该处理是从 sz 的映射,而后者就是我们要得到的值。
  4. 首先对输入图像 (Input Image) 进行直方图均衡 (Histogram Equalization) ,此时该图像的像素为 s 值。对均衡后的图像中的每个像素执行反映射 z = G-1 (s) ,得到输出图像 (Output Image) 中的相应像素。所有像素处理完后,输出图像的PDF即为我们指定的PDF。

现在,我们再考虑实际情况,即图像灰度级为离散值的情况,我们根据公式4也就是直方图均衡变换的连续形式,再次得到如下的离散公式:
在这里插入图片描述
与之前一样, MN 是图像的像素总数,nj 是具有灰度值 rj 的像素数,L 是图像中可能的灰度级数。类似的 ,给定一个规定的 sk 值,公式5的离散形式涉及计算变换函数:

公式7:在这里插入图片描述
对一个 q 值,有:
在这里插入图片描述
其中,pz(zi) 是规定的直方图的第 i 个值。与前面一样,我们用反变换找到期望的值zq
在这里插入图片描述
换句话说,该操作对每一个s值给出一个z值,形成一个从sz的映射。
我们要记得,sk 是图像进行直方图均衡后的值,因此,我们最终可以把直方图匹配总结为以下步骤:

  1. 计算给定输入图像的直方图 pr( r ) ,并对它进行直方图均衡,得到 sk
  2. 公式7q = 0, 1, 2, … , L - 1 计算变换函数 G 的所有值,其中 pz(zi) 是规定的直方图的值。把 G 的值四舍五入为 [0, L - 1] 内的整数,并存储于表中。
  3. 对均衡后的图像中每一个值 skk = 0, 1, 2, … , L - 1 ,使用步骤2中存储的 G 的值寻找对应的 zq 值,以使 G(zq) 最接近 sk ,并存储这些从 sz 的映射。当满足给定 sk 对应的 zq 不唯一时(即映射不唯一时),选择最小的值。
  4. 首先对输入图像进行均衡化,然后使用步骤3找到的映射关系,将图像均衡后的每个像素值 sk 映射为直方图匹配后的图像中的相应的 zq 值,形成直方图规定化后的图像。正如连续情况那样,均衡输入图像的中间步骤是概念上的。

下面还是来看一个具体的例子:
在这里插入图片描述
与之前直方图均衡使用的例子一样,图像的灰度级依然是 L = 23 = 8,因此灰度级范围为 [0, 7]。同时 M = N = 64,所以 MN = 4096. (第三列的值来自最后的计算结果,这里我们先不看,只看前两列)

首先,我们要进行直方图均衡,因为使用的例子一样,因此我们可以直接使用之前的结果:

在这里插入图片描述
接着,我们用公式7来计算 G 的所有值:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一次类推,我们可以得到 G(z4) = 2.45, G(z5) = 4.55, G(z6) = 5.95, G(z7) = 7.00
和之前一样,进行四舍五入,取 [0, L - 1] 内的整数:

在这里插入图片描述
将结果存于下表中:

在这里插入图片描述
最后,我们寻找 zq 的最小值,以使 G(zq) 最接近 sk
比如 s0 = 1G(z3) = 1,这是完美的匹配,因此得到映射关系: s0 → z3,即均衡化后的图像中每个值为1的像素映射为直方图规定化后的图像中(相应位置上)的值为3的像素。
再举一个例子,s1 = 3,此时最接近它的 G(zq) = 2 对应的 zq 就是 z4,所以有映射关系:s1 → z4。因此可以得到如下的表格:

在这里插入图片描述
在看这张表时,我们要注意,sk 表示的是 s 的值域。即 s = 1 映射为 z = 3

以曲线的方式来表示整个过程,即为:
在这里插入图片描述
而在直方图匹配之后,实际上取得各灰度值的像素占据所有像素数量的比例,和我们的设定上会有一些误差,这就是题干表格第三列的由来。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值