目录
图像金字塔
图像金字塔介绍
图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效且概念简单的结构。简单来说,图像金字塔是同一图像不同分辨率的子图集合(有800×800、480×640…)
图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐渐降低、且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。
金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低
高斯金字塔固定了缩放比,即如果你是800×800的图,无法缩放成500×500
我们将要学习用什么方法,如何去生成这些图像金字塔
常见两类图像金字塔:
- 高斯金字塔(Gaussian pyramid):用来向下/降采样(分辨率减小,图片变小,向上走),是主要的图像金字塔;
- 拉普拉斯金字塔(Laplacian pyramid):用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也就是预测残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用
高斯金字塔(Gaussian pyramid)
高斯金字塔是通过高斯平滑和亚采样(一个图形中取出一小块)获得的一系列下采样图像
向下采样
原理非常简单:如下图所示
原始图像分辨率M*N
——> 处理图像后分辨率M/2 * N/2
;即每次处理后,结果是原来的1/4(不要求是偶数,会自动四舍五入)
注意:向下采样(分辨率减小,在上图中表现为方向向上
)会丢失信息
关键API:cv2.pyrDown(src[, dst[, dstsize[, borderType]]])
其中:
src
:需要操作的图片dst
:返回值,不用写,我们用一个参数接受即可dstsize
:返回图片的大小- 图片会变成原来的1/4
# 高斯金字塔 ——> 向下采样
import cv2
import numpy as np
img = cv2.imread('./lena.png')
# 分辨率减小的操作:下采样
dst = cv2.pyrDown(img)
# 还可再变化多次
dst2 = cv2.pyrDown(dst)
# 展示
cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.imshow('dst2',dst2)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:
其实清晰度几乎没变,这就是图像金字塔的厉害之处:虽然丢掉了偶数行和偶数列,但是经过了高斯核函数卷积后,相当于把一个像素点匀到周围了,因此变化不大
向上采样
向上采样是向下采样的相反过程,指图片从小变大的过程
- 将图像在每个方向扩大为原来的两倍,新增的行和列以0填充
- 使用先前同样的内核(乘以4)于放大后的图像卷积,获取近似值 ——> 假设四个一组,相当于把有数值的地方向周围三个0的位置填充**(以左上角为例,相当于把10分成四份,一份2.5;但是由于整体值变小了,图像会偏暗,为了解决这个问题,我们乘4,相当于“复制”四份)**
操作和向下采样一样!
关键API:cv2.pyrUp(src[, dst[, dstsize[, borderType]]])
其中:
src
:需要操作的图片dst
:返回值,不用写,我们用一个参数接受即可dstsize
:返回图片的大小- 图片会变成原来的4倍
# 高斯金字塔 ——> 向上采样
import cv2
import numpy as np
img = cv2.imread('./Hello.jpeg')
# 分辨率减小的操作:下采样
dst = cv2.pyrUp(img)