opencv-图像金字塔
图像金字塔是一种图像处理技术,它通过不断降低图像的分辨率,形成一系列图像。金字塔分为两种类型:高斯金字塔和拉普拉斯金字塔。
- 高斯金字塔(Gaussian Pyramid):
高斯金字塔是通过使用高斯滤波和降采样(缩小)操作构建的。每一层的图像都是前一层图像的一部分。在OpenCV中,可以使用cv2.pyrDown()
和 cv2.pyrUp()
函数构建高斯金字塔。
cv2.pyrDown(src[, dst[, dstsize[, borderType]]])
: 通过高斯内核进行降采样,缩小图像。cv2.pyrUp(src[, dst[, dstsize[, borderType]]])
: 通过插值进行升采样,放大图像。
示例代码:
import cv2
# 读取图像
img = cv2.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg")
# 构建高斯金字塔
layer = img.copy()
gaussian_pyramid = [layer]
for i in range(6):
layer = cv2.pyrDown(layer)
gaussian_pyramid.append(layer)
# 显示原始图像和金字塔图像
cv2.imshow('Original Image', img)
for i in range(6):
cv2.imshow(f'Layer {i+1}', gaussian_pyramid[i])
# 等待用户按下任意键
cv2.waitKey(0)
cv2.destroyAllWindows()
- 拉普拉斯金字塔(Laplacian Pyramid):
拉普拉斯金字塔是由高斯金字塔构建而来的,每一层都是其高斯金字塔层与其扩展(上采样)版本的差。在OpenCV中,可以使用cv2.subtract()
函数构建拉普拉斯金字塔。
示例代码:
import cv2
# 读取图像
img = cv2.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg")
# 构建高斯金字塔
layer = img.copy()
gaussian_pyramid = [layer]
for i in range(6):
layer = cv2.pyrDown(layer)
gaussian_pyramid.append(layer)
# 构建拉普拉斯金字塔
laplacian_pyramid = [gaussian_pyramid[5]]
for i in range(5, 0, -1):
gaussian_expanded = cv2.pyrUp(gaussian_pyramid[i])
# Ensure the sizes match before subtraction
if gaussian_pyramid[i-1].shape[:2] == gaussian_expanded.shape[:2]:
laplacian = cv2.subtract(gaussian_pyramid[i-1], gaussian_expanded)
laplacian_pyramid.append(laplacian)
else:
print(f"Size mismatch in level {i}.")
break
# 显示原始图像、高斯金字塔和拉普拉斯金字塔
cv2.imshow('Original Image', img)
for i in range(min(6, len(laplacian_pyramid))): # Ensure loop doesn't go out of range
cv2.imshow(f'Laplacian Layer {i}', laplacian_pyramid[i])
# 等待用户按下任意键
cv2.waitKey(0)
cv2.destroyAllWindows()
这里构建了一个6层的高斯金字塔,然后使用高斯金字塔构建拉普拉斯金字塔。拉普拉斯金字塔的每一层都包含了对应层高斯金字塔的细节信息。金字塔的构建在图像处理中常用于图像融合、图像金字塔匹配等应用。