【计算视觉算法与应用】金字塔,下采样Gaussian Pyramid. 上采用 Laplacian Pyramid (code: py)

金字塔(Pyramid)在图像处理中主要用于多尺度分析和图像压缩。常见的图像金字塔有两种:

  1. 高斯金字塔(Gaussian Pyramid):用于下采样图像,生成分辨率逐渐降低的图像序列。
  2. 拉普拉斯金字塔(Laplacian Pyramid):通过高斯金字塔生成,用于图像重建和细节增强。

以下是金字塔在图像处理中的作用以及代码实现和可视化:


1. 高斯金字塔

高斯金字塔通过不断下采样(减小分辨率),产生一系列从高分辨率到低分辨率的图像。

代码实现
复制代码
import cv2
import matplotlib.pyplot as plt

# 加载图像
image = cv2.imread('image.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # 转换为RGB
levels = 4  # 金字塔层数

# 构建高斯金字塔
gaussian_pyramid = [image]
for i in range(levels):
    image = cv2.pyrDown(image)  # 下采样
    gaussian_pyramid.append(image)

# 可视化
plt.figure(figsize=(12, 8))
for i, img in enumerate(gaussian_pyramid):
    plt.subplot(1, levels + 1, i + 1)
    plt.imshow(img)
    plt.title(f"Level {i}")
    plt.axis('off')
plt.show()

2. 拉普拉斯金字塔

拉普拉斯金字塔由高斯金字塔生成,通过将高斯金字塔中的图像与上采样后的低分辨率图像相减,得到细节信息。

代码实现
复制代码
import cv2
import matplotlib.pyplot as plt

# 加载图像
image = cv2.imread('image.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # 转换为RGB
levels = 4  # 金字塔层数

# 构建高斯金字塔
gaussian_pyramid = [image]
for i in range(levels):
    image = cv2.pyrDown(image)  # 下采样
    gaussian_pyramid.append(image)

# 构建拉普拉斯金字塔
laplacian_pyramid = []
for i in range(levels, 0, -1):
    gaussian_expanded = cv2.pyrUp(gaussian_pyramid[i])  # 上采样
    # 确保尺寸一致,避免大小差异引发的错误
    gaussian_expanded = cv2.resize(gaussian_expanded, (gaussian_pyramid[i - 1].shape[1], gaussian_pyramid[i - 1].shape[0]))
    laplacian = cv2.subtract(gaussian_pyramid[i - 1], gaussian_expanded)  # 相减得到细节
    laplacian_pyramid.append(laplacian)

# 可视化高斯金字塔
plt.figure(figsize=(12, 8))
for i, img in enumerate(gaussian_pyramid):
    plt.subplot(2, levels + 1, i + 1)
    plt.imshow(img)
    plt.title(f"Gaussian Level {i}")
    plt.axis('off')

# 可视化拉普拉斯金字塔
for i, img in enumerate(laplacian_pyramid):
    plt.subplot(2, levels + 1, levels + 2 + i)
    plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    plt.title(f"Laplacian Level {i}")
    plt.axis('off')

plt.tight_layout()
plt.show()

金字塔在图像处理中的作用

  1. 多尺度特征提取:在不同分辨率下提取图像的局部特征。
  2. 图像压缩:金字塔结构可以用较少的数据表示图像的主要信息。
  3. 图像融合:通过拉普拉斯金字塔对图像进行融合,保留不同图像的细节信息。
  4. 对象检测:在金字塔的不同尺度上搜索目标,检测大小变化的对象。
  5. 图像重建:利用拉普拉斯金字塔将低分辨率的图像逐步还原为高分辨率。

3. 图像融合示例

基于拉普拉斯金字塔的图像融合,适用于不同曝光的图像组合。

代码实现
复制代码
import cv2
import matplotlib.pyplot as plt

# 加载两张图像(大小相同)
image1 = cv2.imread('image1.jpg')
image2 = cv2.imread('image2.jpg')

# 构建金字塔
gp_image1 = [image1]
gp_image2 = [image2]

for i in range(levels):
    gp_image1.append(cv2.pyrDown(gp_image1[-1]))
    gp_image2.append(cv2.pyrDown(gp_image2[-1]))

lp_image1 = [gp_image1[-1]]
lp_image2 = [gp_image2[-1]]

for i in range(levels - 1, 0, -1):
    lap1 = cv2.subtract(gp_image1[i - 1], cv2.pyrUp(gp_image1[i]))
    lap2 = cv2.subtract(gp_image2[i - 1], cv2.pyrUp(gp_image2[i]))
    lp_image1.append(lap1)
    lp_image2.append(lap2)

# 合并金字塔
pyramid_combined = []
for lap1, lap2 in zip(lp_image1, lp_image2):
    rows, cols, _ = lap1.shape
    lap_combined = np.hstack((lap1[:, :cols // 2], lap2[:, cols // 2:]))
    pyramid_combined.append(lap_combined)

# 重建图像
reconstructed_image = pyramid_combined[0]
for i in range(1, len(pyramid_combined)):
    reconstructed_image = cv2.pyrUp(reconstructed_image)
    reconstructed_image = cv2.add(reconstructed_image, pyramid_combined[i])

# 显示融合结果
plt.imshow(cv2.cvtColor(reconstructed_image, cv2.COLOR_BGR2RGB))
plt.title("Fused Image")
plt.axis('off')
plt.show()

通过上述代码和可视化,我们可以清晰地看到金字塔的应用和效果,同时能够理解其在多尺度分析和图像处理中的重要作用。

相关推荐
PixelBai5 小时前
图片格式转换与 Base64 编码:JPG/PNG/WebP 选型与前端场景
图像处理
matlab代码18 小时前
基于matlab模板匹配的手写体数字识别【源码78期】
人工智能·计算机视觉
AiNightVision20 小时前
AI-ISP微光全彩夜视技术深度解析:如何在0.001Lux下实现全彩成像
人工智能·计算机视觉·车载系统·自动驾驶·无人机·智能家居·智能硬件
岁月蹉跎的一杯酒20 小时前
ISP 黑电平校正(BLC, Black Level Calibration/Correction)
论文阅读·图像处理·isp
JAI科研21 小时前
YOLO 完全指南(七):YOLO识别工程化 (上)
人工智能·深度学习·神经网络·yolo·目标检测·计算机视觉·transformer
程序猿编码21 小时前
扔掉 Python!纯 C++ 本地跑扩散 TTS,GGML 加持,支持 RK3588 NPU 加速
c++·计算机视觉·大模型·transformer·rk3588·推理·ggml
JarmanYuo1 天前
YOLO 涨点研究(十二):具身 CV 进阶篇——Sim2Real 域随机化与真机部署
人工智能·pytorch·python·yolo·计算机视觉
YOLO数据集集合1 天前
渔船船只检测数据集 | 船只检测 渔船识别 拖船检测 海事监管 目标检测 YOLO格式 深度学习数据集 计算机视觉9076期
人工智能·深度学习·yolo·目标检测·计算机视觉
AI人工智能+1 天前
了一种融合OCR与大模型的文档抽取系统,解决传统OCR“识字不识意”的痛点
深度学习·计算机视觉·语言模型·自然语言处理·ocr·文档抽取
Tp_jh1 天前
AMD 395本地部署Qwen3.8-Flash-Next实测,端侧AGI时代也要来了
图像处理·人工智能·opencv·语言模型·自然语言处理·千问