圖像金字塔是一種圖像處理技術,它通過不斷降低圖像的分辨率,形成一系列圖像。金字塔分為兩種類型:高斯金字塔和拉普拉斯金字塔。
- 高斯金字塔(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 subtractionif 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 rangecv2.imshow(f'Laplacian Layer {i}', laplacian_pyramid[i])# 等待用戶按下任意鍵
cv2.waitKey(0)
cv2.destroyAllWindows()
這里構建了一個6層的高斯金字塔,然后使用高斯金字塔構建拉普拉斯金字塔。拉普拉斯金字塔的每一層都包含了對應層高斯金字塔的細節信息。金字塔的構建在圖像處理中常用于圖像融合、圖像金字塔匹配等應用。