Computer Vision笔记01:图像处理Part 1
- 什么是图像处理(Image Processing)?
- 图像处理(Image Processing)的分类
- 空间域处理(Spatial Operation)
第一次在CSDN写博客。由于最近在学习计算机视觉 (CV) 课程,为了更系统性的梳理内容,所以整理了这份笔记。既然是计算机视觉课程,那么以图片这种更为直观的形式,可以大大降低理解的难度,因此我会在本篇笔记中多以图片的形式进行理解。
由于本人以冈萨雷斯的《数字图像处理(第三版)》作为辅助教材进行学习,因此会有很多来自于本书的图片
什么是图像处理(Image Processing)?
从图像处理到计算机视觉这个连续统一体内没有明确的界限。一种有用的范例是考虑三种典型的计算处理,即低级、中级、高级处理:
- 初级处理(Image Processing):比如降噪、对比度增强、图像锐化等图像预处理操作。主要的目的是抑制图像的畸变 (Distortion),增强图像的相关信息,为了后续的图像分析与解释做好准备。初级处理(Image Processing)的主要特征是输入和输出都是图像(Image)
- 中级处理(Image Analysis):涉及诸多任务,典型的有图像分割(Image Segmentation),即将一幅图像分为不同的区域和目标。中级处理(Image Analysis)的特征是输入是图像(Image),但是输出是从图像中提取出的特征(Features)
- 高级处理(Image Interpretation):涉及“理解”已识别的目标图像的总体,执行与人类视觉相关的认知功能,这也是计算机视觉(Computer Vision)的主要任务。高级处理(Image Interpretation)的特征是输入为图像(Image),输出是对图像的解释/理解(Interpretation)
由此可以明显地看出,图像处理(Image Processing)主要是针对图像自身属性的一系列操作,是为了在进行更深入的图像分析时,能有符合需求的图像而进行的预处理。
图像处理(Image Processing)的分类
图像处理(Image Processing)主要分为两类:
-
空间域操作(Spatial Domain Operation):空间域(Spatial Domain)指图像平面本身。这类图像处理方法直接以图像中的像素(Pixels)操作为基础。又可细分为两类:
1. 点操作(Point Operation):在单个像素上进行的灰度变换 (intensity transformations on individual pixels),主要以对比度和阈值处理为目的。
2. 邻域操作(Neighbourhood Operation):在一组像素上进行的空间滤波(spatial filtering on groups of pixels),是涉及改善性能的操作。 - 变换域操作(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)的形式呈现:
此时:
s 和 r 分别表示图像g 和 f 在任意点 (x, y) 的灰度
基本的灰度变换(Intensity Transformation)
灰度反转(Intersity Inversion)
使用反转变换可以得到灰度范围为 [0, L-1] 的一幅图像的反转图像,即等效的照片底片。该变换特别适合用于增强嵌入在图片暗区域中的灰色/白色细节。
用图片直观的感受一下:
对数变换(Log Transformation)
其中c为常数。这一变换会把输入图像 (Input Image)中范围较窄的低灰度值映射为输出图像(Output Image)中较宽范围的灰度值,对高的输入灰度值进行相反操作。这一变换用于扩展图像中的暗像素的值,同时压缩更高灰度级的值。即压缩像素值变化较大的图像的动态范围。
具体的效果展示会放在之后的频域变换中,这里我们只给出对数变换的的曲线:
幂律(伽马)变换(Power Transformation)
这里给出幂律变换的曲线:
可以与对数变换 (Log Transformation) 类似,部分 γ 值的幂律变换会把较窄的暗色域映射为较宽的输出值,对输入的高灰度级值也成立。但是,随着 γ 值的增大,曲线会发生变化。
简单的来说,当 γ < 1 时生成的曲线的效果与 γ > 1 时完全相反,而当 γ = 1 时,就是一个恒等变换。
对于幂律变换的作用,这里有几个需要特别说明:
-
伽马 (γ) 校正:用于显示、打印等的各种设备根据幂律产生响应,用于校正这些幂律响应的处理即为伽马校正。比如,某个设备的响应是一个指数为2.5的幂函数。这时,该设备显示的图像比输入的图像偏暗,因此我们在图像输入到该设备之前,进行预处理,即进行
此时输入到相同设备,输出的图像接近原图。γ 要根据不同的设备进行设定。 -
对比度增强:对比度增强需要根据图像本身的特点来进行操作。我们要铭记当 γ > 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聚类算法
具体的实现步骤:
- 选择一个任意的初始化阈值t
- 对应阈值计算两个类别的均值 ????0 和 ????1
- 根据均值的均值更新 t : t = ( ????0 + ????1 )/ 2
- 若在3中,t 的值被改变,则回到2,继续
直到 t 收敛 (Convergence),阈值就是两个类别的均值的中点 (Midway)
分段对比度拉伸(Piecewise Contrast Stretching)
这一操作的具体形式实际上和普通的对比度拉伸(Contrast Stretching)类似,我们从曲线图就可以很直观的了解:
用于增加图像灰度级的动态范围 (Dynamic Range of gray level)
一般用于显示设备或录制介质以覆盖全范围
灰度级分层(Gray-level Slicing)
用于突出图像中特定范围的灰度级
有两种分层方式:
- 一部分灰度全部分为高值,一部分全部分为低值,因此会生成一幅二值图
注意:并不是像阈值化一样全部分为黑白 - 亮化一部分想要的灰度,同时保留背景和其他部分的灰度级
比特平面分层(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 的像素个数。若用 M 和 N 表示图像的行和列的维数,那么归一化后的灰度直方图由 p(rk) = nk / MN 给出,其中 k = 0, 1, …, L-1,p(rk) 是灰度级 rk 在图像中出现的概率的一个估计,且所有p之和为1。
所以归一化后的灰度直方图,即为概率函数。(Normalized Histogram = Probability Function)
灰度直方图的处理主要分为两类:
-
直方图均衡 (Histogram equalization)
直方图均衡的目的,是为了得到一幅在整个灰度范围内,灰度级均匀分布的图像
(To get an image with equally distributed intensity levels over the full intensity range) -
直方图匹配/规定化 (Histogram matching/Histogram specification)
直方图匹配是为了得到一幅具有指定的直方图形状(灰度分布)的图像
(To get an image with a specified intensity distribution, determined by the shape of the histogram)
接下来将对这两种处理方法进行介绍。
直方图均衡(Histogram Equalization)
首先,我们要知道为什么要进行直方图均衡,先来看以下四幅图像及其灰度直方图:
从以上一系列图片,我们很容易得到以下结论:
- 在暗图像中,直方图的分量主要集中在灰度级的低(暗)端,即横坐标左边
- 在亮图像中,直方图的分量主要集中在灰度级的高(亮)端,即横坐标右边
- 低对比度的图像具有较窄的直方图,且集中在灰度级的中部
- 高对比度的图像,直方图的分量覆盖了很狂的范围,且分布的很均匀
因此我们可以得到一个结论:若一幅图像的像素倾向于覆盖所有可能的灰度级,且分布均匀,那么会有高对比度的外观且表现出灰度的鲜明变化。这也是我们想要使用直方图均衡的原因。
接下来,我们来看直方图均衡的具体原理:
首先,我们回顾之前提到的图像灰度级的变换公式:
这里我们先考虑连续灰度值,r 的取值范围为 [0, L-1]
假设该公式满足以下两个条件:
- T( r ) 在 [0, L-1] 上严格单调递增
- 当 0 ≤ r ≤ L - 1 时,0 ≤ T( r ) ≤ L - 1
因为之后的解释中,我们需要使用反变换:
所以,条件1是为了保证在从s反变换到r时,是一对一映射,不会有一对多的情况;条件2是为了保证输入灰度级与输出灰度级范围相同。这里用一张图就能直观理解:
对于连续随机变量 r 和 s,我们可以用它们的概率密度函数 (PDF) 来进行描述。
令pr( r ) 和 ps( s ) 分别表示 r 和 s 的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
因为这些值都是用概率值求和得到,所以都是小数,而灰度值是整数,所以要把这些值近似为最接近的整数:
这就是直方图均衡的整个过程,最后,我们再用图的形式体现一遍: