引言
图像金字塔(Image Pyramid)是计算机视觉中一种重要的多尺度表示方法,广泛应用于图像融合、目标检测、特征提取等任务。本文将详细讲解高斯金字塔和拉普拉斯金字塔,并提供Python OpenCV示例代码。
1. 什么是图像金字塔?
图像金字塔是将一幅图像按照不同分辨率从大到小(或从小到大)进行多尺度采样而形成的序列图像集合。 | | |
|---|
| | |
| 拉普拉斯金字塔 (Laplacian Pyramid) | | |
2. 高斯金字塔 (Gaussian Pyramid)
2.1 原理
高斯金字塔对图像进行高斯滤波,然后下采样,每一层图像分辨率减半,同时细节逐渐模糊。2.2 OpenCV-Python实现
import cv2读取图像img = cv2.imread('example.jpg')# 构建高斯金字塔G = img.copy()gp = [G]for i in range(3): # 构建3层 G = cv2.pyrDown(G) gp.append(G)# 显示结果for i, layer in enumerate(gp): cv2.imshow(f'Gaussian Level {i}', layer)cv2.waitKey(0)cv2.destroyAllWindows()
小贴士:cv2.pyrDown() 会先模糊再缩小,所以图像边缘不会出现锯齿。
3. 拉普拉斯金字塔 (Laplacian Pyramid)
3.1 原理
拉普拉斯金字塔用于记录图像的细节信息。每一层是高斯金字塔相邻层的差分:L_l = G_l - expand(G_{l+1})
3.2 OpenCV-Python实现
假设 gp 已经是高斯金字塔lp = []for i in range(len(gp)-1, 0, -1): GE = cv2.pyrUp(gp[i]) L = cv2.subtract(gp[i-1], GE) lp.append(L)# 显示结果for i, layer in enumerate(lp): cv2.imshow(f'Laplacian Level {i}', layer)cv2.waitKey(0)cv2.destroyAllWindows()
小贴士:拉普拉斯金字塔的每层都是“细节层”,适合图像融合和增强边缘。
4. 应用场景
5. 动手练习
将自己的照片构建成4层高斯金字塔,并观察图像变化。使用拉普拉斯金字塔提取边缘,尝试将不同层合成一张新图。改变 cv2.pyrDown() 和 cv2.pyrUp() 的次数,观察层数对图像效果的影响。
6. 总结