3.5 图像金字塔
图像金字塔可以理解为不同尺寸的图像叠在一起,对一张输入图像不断下采样得到一系列的图片就是高斯金字塔,而通过上采样产生的金字塔为拉普拉斯金字塔。
3.5.1 案例10:使用高斯金字塔
生成高斯金字塔需要先对图像进行模糊处理,后进行下采样生成采样图片,在下采样时图像的尺寸逐步缩小,生成的图像金字塔包含多个尺度的图像。
高斯金字塔的最底层为原始图像,上一层缩小为下一层尺寸的一半,也可以根据实际需求调整缩放比例。若每次下采样时尺寸缩减为原来的一半,则图像缩小的速度会非常快,因而金字塔尺寸不宜过大。
OpenCV提供了高斯金字塔的函数pyrDown()。
C++版本对应的函数如下:
Python版本对应的函数如下:
pyrDown函数对应的参数及其含义如表3.13所示。
表3.13
接下来通过案例展示pyrDown的调用效果,代码如下:
对如图3.22所示的夜景图运行一次高斯金字塔的结果如图3.27所示。
图3.27
因为源图像的尺寸较大,所以下采样后图3.23和图3.27显示的差异不明显,但执行高斯金字塔之后图像的尺寸由2000×1136变为1000×568。在本次调用的基础上再调用3次下采样的结果如图3.28~图3.30所示。
图3.28
图3.29
图3.30
图3.22、图3.27~图3.30的图像尺寸分别为2000×1136、1000×568、500×284、250×142、125×71,这5张图放在一起展示了一个倒立的图像金字塔,如图3.31所示。
图3.31
3.5.2 案例11:使用拉普拉斯金字塔
拉普拉斯金字塔与高斯金字塔正好相反,拉普拉斯金字塔是通过上采样上层小尺寸的图像构建下层大尺寸的图像。
OpenCV提供了拉普拉斯金字塔的函数pyrUp()。C++版本对应的函数如下:
Python版本对应的函数如下:
pyrUp函数对应的参数及其含义如表3.14所示。
表3.14
接下来通过案例展示pyrUp的调用效果,使用的源图像是如图3.30所示的高斯金字塔的最终采样结果,代码如下:
对如图3.30所示的图像采用上采样后得到的最终结果如图3.32~图3.35所示。
图3.32
图3.33
图3.34
图3.35
图3.30、图3.32~图3.35的图像尺寸分别为125×71、250×142、500×284、1000×568、2000×1136,这5张图放在一起展示了一个正立的图像金字塔,如图3.36所示。因为图3.33、图3.34、图3.35尺寸较大,所以这3张图显示的尺寸差异不明显。
图3.36