图像预处理(3)-图像金字塔
6. 图像金字塔
图像金字塔实际上是一张图片在不同尺度下的集合,即原图的上采样和下采样。常见的图像金字塔包括高斯金字塔和拉普拉斯金字塔,但是也有一些其他算法衍生的金字塔,并不一定要高斯模糊,可以根据自身的应用场景来进行定义。
图像金字塔时图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。图像金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才会停止采样。金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。
6.1 高斯金字塔(Gaussion pyramid)
高斯金字塔是最基本的图像塔。
- 首先将原图像作为最底层图像
(高斯金字塔的第0层),利用高斯核对其进行卷积操作即高斯模糊。 - 对卷积(高斯模糊)后的图像进行下采样,即去除偶数行和偶数列,得到上一层图像
- 再将
作为输入重复进行1,2的操作,迭代多次
这样就形成一个金字塔型的图像数据结构,即高斯金字塔。
这里总结一下高斯核函数:
- 二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的,一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向比另一个方向需要更多的平滑,旋转对称性意味着高斯滤波在各个方向上没有偏倚。
- 高斯函数是单值函数。这表明,高斯滤波器用像素邻域的加权平均值来代替该点的像素值,而每一个邻域像素点权值是随该点与中心点的距离单调递减的。因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真。
- 高斯函数的傅里叶变换频谱是单瓣的。这一性质是高斯函数傅里叶变换等于高斯函数本身这一事实的直接推论。图像常被不希望的高频信号所污染(噪声和细纹理)。而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量。高斯函数傅里叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号。
- 高斯滤波器宽度(决定着平滑程度)是由参数
表征的,而且 和平滑程度的关系是非常简单的, 越大,高斯滤波器的频带就越宽,平滑程度就越好。通过调节平滑程度参数 ,可在图像特征过平滑和欠平滑之前折中选择。 - 由于高斯函数的可分离性,大高斯滤波器可以得以有效地实现。二维高斯函数卷积可以通过两步来进行实现。首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积。因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长。
上采样
高斯金字塔的上采样过程:
将图像在每个方向扩大为原来的两倍,新增的行和列以0填充。
比如原来的图像为:
那扩大为原来的两倍并以0填充之后则为:
之后呢再使用先前使用的高斯核(乘以4)与放大之后的图像卷积,获得近似值即完成了上采样。
6.2 拉普拉斯金字塔(Laplacian pyramid)
我们先来看Laplacian pyramid第
式中的
将降采样之后的图像再进行上采样操作,然后与之前还没降采样的原图进行做差得到残差图,为还原图像信息做准备。也就是说,拉普拉斯金字塔是通过源图像减去先缩小后再放大的一系列图像构成的,保留下来的是残差。
6.3 DOG金字塔(Different of Gaussian)
DOG金字塔是在高斯金字塔的基础上构建起来的,其实生成高斯金字塔的目的就是为了构建DOG金字塔。DOG金字塔的第一层是由高斯金字塔的第二层减去第一层得到的。以此类推,逐组逐层生成每一个差分图像,所有差分图像构成了差分金字塔。
6.4 图像金字塔的代码实现
6.4.1 高斯金字塔
我们在此的代码使用如下图例进行示范(图片缩小了50%):
#高斯金字塔的上采样和下采样在cv2中有了已经写好的命令
#读取图片,并展示图片
img = cv2.imread('img/AM.png')
cv_show(img) #cv_show已经在第一次使用时定义了
#上采样
up = cv2.pyrUp(img)
cv_show(up)
#下采样
down = cv2.pyrDown(img)
cv_show(down)
#先下采样再上采样
down_up=cv2.pyrUp(down)
cv_show(down_up)
输出结果为(图片大小由坐标来观察):
原图:
上采样:
下采样:
先下采样再上采样:
6.4.2 拉普拉斯金字塔
#这里只展示一层拉普拉斯金字塔
down = cv2.pyrDown(img)
down_up=cv2.pyrUp(down)
l_1 = img-down_up
cv_show(l_1)
输出结果为: