一、概念
图像金字塔是由一幅图像的多个不同分辨率的子图所构成的图像集合。这个图像集合是由原图像不断下采样;产生的,最底层是原图像,该层的上层图像是该层图像下采样产生,因此,图像的大小就是 : NN —N/2N/2----…一直到顶点1*1。
根据下采样前使用的卷积核操作的不同,图像金字塔可以分为高斯金字塔、拉普拉斯金字塔等等。下采样的一般步骤为:先将图片滤波,然后将滤波后的图像去掉其偶数行和偶数列,在滤波器的选择上我们有多种方式,cv包中使用的默认滤波器为高斯滤波器。
由于采样后的图像将越来越小,因此可以通过上采样来对图像进行尺寸扩大,每经历一次上采样,图像的大小都将扩大二倍。由于上采样需要我们创造原来没有的像素点,因此该像素点值的填充有多种方式,比如最近邻插值法、零填充法等等。使用零填充法就是将新创建的周围像素点的像素值填充为0, 然后再使用高斯滤波进行平滑处理。
拉普拉斯金字塔:
上面方法创建的金字塔称为高斯金字塔,高斯金字塔是通过对一幅图像进行一系列大的下采样产生。而有时候我们想要得到小图像中的大尺寸清晰图像,这个时候就要用到拉普拉斯金字塔。其公式为:
L_IMG = IMG - pyrUp(img + 1)
拉普拉斯金字塔的作用在于能够恢复高分辨率的图像,由于使用下采样操作,会使原图像中的一部分特征(像素点)丢失,因此即使是上采样后的图像也不能与原图保持特征一致。但使用拉普拉斯金字塔可以做到恢复高分辨率,实现步骤见下代码。
二、程序中的实现
1、下采样实现函数:
img_down = cv.pyrDown(img1)
2、上采样实现的函数
img_up = cv.pyrUp(img)
3、创建一层拉普拉斯金字塔图像
img1 = cv.imread("car_red.jpg", cv