1. 图像金字塔基础概念解析
在计算机视觉领域,图像金字塔是一种多尺度表示方法,通过不同分辨率下的图像集合来描述同一场景。就像古埃及金字塔由底部到顶部逐渐缩小一样,图像金字塔从底层(原始图像)开始,每向上一层图像尺寸就缩小一定比例。
OpenCV中实现的金字塔主要分为两类:
- 高斯金字塔(Gaussian Pyramid):用于图像降采样
- 拉普拉斯金字塔(Laplacian Pyramid):用于图像重建
1.1 高斯金字塔工作原理
高斯金字塔的构建过程包含两个核心步骤:
- 高斯平滑:使用5×5高斯核对图像进行卷积处理
- 降采样:删除所有偶数行和偶数列
这个过程的数学表达式可以表示为:
Gₙ = Downsample(GaussianBlur(Gₙ₋₁))
其中Downsample表示下采样操作,GaussianBlur表示高斯模糊处理。
注意:OpenCV的pyrDown函数内部已经整合了这两个步骤,开发者无需手动实现
1.2 拉普拉斯金字塔的补充作用
拉普拉斯金字塔保存的是不同层级之间的差异信息,其构建公式为:
Lₙ = Gₙ - UpSample(Gₙ₊₁)
这解释了为什么简单的pyrUp操作无法完全恢复降采样前的图像——因为高频细节信息已经丢失。在实际应用中,拉普拉斯金字塔常用于图像压缩和图像融合等场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 采样操作核心实现详解
2.1 基础代码实现优化版
以下是经过优化的完整实现代码,增加了错误处理和结果保存功能:
python复制import cv2
import numpy as np
import os
def image_pyramid_ops(input_path):
# 增强型图像读取
if not os.path.exists(input_path):
raise FileNotFoundError(f"输入图像路径不存在: {input_path}")
src = cv2.imread(input_path)
if src is None:
raise ValueError("图像读取失败,请检查文件格式")
# 创建输出目录
os.makedirs("output", exist_ok=True)
# 上采样操作
upsampled = cv2.pyrUp(src)
cv2.imwrite("output/upsampled.jpg", upsampled)
# 降采样操作
downsampled = cv2.pyrDown(src)
cv2.imwrite("output/downsampled.jpg", downsampled)
# 可视化对比
comparison = np.hstack((src, upsampled, downsampled))
cv2.imshow("Original vs Upsampled vs Downsampled", comparison)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == "__main__":
image_pyramid_ops("input.jpg")
