【第16节】图像金字塔
目标
1、原理
一般情况下,我们要处理是一副具有固定分辨率的图像。但是有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理。比如,我们要在一幅图像中查找某个目标,比如脸,我们不知道目标在图像中的尺寸大小。这种情况下,我们需要创建一组图像,这些图像是具有不同分辨率的原始图像。我们把这组图像叫做图像金字塔(简单来说就是同一图像的不同分辨率的子图集合)。如果我们把最大的图像放在底部,最小的放在顶部,看起来像一座金字塔,故而得名图像金字塔。
有两类图像金字塔:高斯金字塔和拉普拉斯金字塔。
高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的。顶部图像中的每个像素值等于下一层图像中5个像素的高斯加权平均值。这样操作一次一个MxN的图像就变成了一个M/2xN/2的图像。所以这幅图像的面积就变为原来图像面积的四分之一。这被称为Octave。连续进行这样的操作我们就会得到一个分辨率不断下降的图像金字塔。我们可以使用函数CV2.pyrDown()和CV2.pyrUp()构建图像金字塔。函数CV2.pyrDown()从一个高分辨率大尺寸的图像向上构建一个金子塔(尺寸变小,分辨率降低)。
实例演示:
结果:

函数CV2.pyrUp()从一个低分辨率小尺寸的图像向下构建一个金字塔(尺寸变大,但分辨率不会增加)
你要记住的是是higher_ reso2和higher_ reso 是不同的。因为一旦使用CV2.pyrDown(),图像的分辨率就会降低,信息就会被丢失。下图就是从CV2.pyrDown()产生的图像金字塔的(由下到上)第三层图像使用函数CV2.pyrUp()得到的图像,与原图像相比分辨率差了很多。
结果:

拉普拉斯金字塔主要用于重建图像,拉普拉斯就是为了在放大图像的时候,可以预测残差,何为残差,即小图像放大的时候,需要插入一些像素值,在上文直接插入的是 0,拉普拉斯金字塔算法可以根据周围像素进行预测,从而实现对图像最大程度的还原。
学习到原理如下:用高斯金字塔的每一层图像,减去其上一层图像上采样并高斯卷积之后的预测图像,得到一系列的差值图像即为 LP 分解图像(其中 LP 即为拉普拉斯金字塔图像)。
拉普拉斯金字塔可以由高斯金字塔计算的来,公式如下:

或者这样写更容易理解:
实例演示:
结果:
