首页 > 代码库 > OpenCV笔记(十)——图像金字塔

OpenCV笔记(十)——图像金字塔

图像金字塔(Image Pyramids)可以用来处理图像的缩放。

有两种广为使用的图像金字塔:高斯金字塔和拉普拉斯金字塔。

这里介绍高斯金字塔。

高斯金字塔有两种操作:upsample和downsample,可以理解为图像的放大和缩小。

以下图为例:

 

图像如果downsample,则col和row均变成之前的1/2,图像的面积也为之前的1/4。等价于金字塔的层数升高一层,面积为先前的四分之一。

如果是upsample,则col和row均是之前的2倍,则图像面积为之前的4倍。等价于金字塔下降一层。

高斯金字塔中的downsample的步骤:

1. 将图像与一个高斯核做卷积。高斯核可以是如下的规模:

\frac{1}{256} \begin{bmatrix} 1 & 4 & 6 & 4 & 1  \\ 4 & 16 & 24 & 16 & 4  \\ 6 & 24 & 36 & 24 & 6  \\ 4 & 16 & 24 & 16 & 4  \\ 1 & 4 & 6 & 4 & 1 \end{bmatrix}

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)

 

OpenCV笔记(十)——图像金字塔