图像金字塔(Image Pyramids)可以用来处理图像的缩放。
有两种广为使用的图像金字塔:高斯金字塔和拉普拉斯金字塔。
这里介绍高斯金字塔。
高斯金字塔有两种操作:upsample和downsample,可以理解为图像的放大和缩小。
以下图为例:
图像如果downsample,则col和row均变成之前的1/2,图像的面积也为之前的1/4。等价于金字塔的层数升高一层,面积为先前的四分之一。
如果是upsample,则col和row均是之前的2倍,则图像面积为之前的4倍。等价于金字塔下降一层。
高斯金字塔中的downsample的步骤:
1. 将图像与一个高斯核做卷积。高斯核可以是如下的规模:
2. 移除偶数的行和偶数的列。
相似地,高斯金字塔中的upsample的步骤:
1. 将图像每隔一行、每个一列插入一个新行、新列,新像素初始化为零。
2. 将扩大后的图像与一个高斯核做卷积。这个高斯核是downsample的4倍,以补偿新像素带来的信息损失。
OpenCV中给出了pyrDown和pyrUp函数,用来实现downsample和upsample的功能:
void pyrDown(InputArray src, OutputArray dst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT )
参数dstsize一般为Size(src.cols/2, src.rows/2)
void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT )
参数dstsize一般为Size(src.cols * 2, src.rows * 2)