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

ops/2024/11/30 11:26:14/

金字塔(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.shapelap_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()

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


http://www.ppmy.cn/ops/137911.html

相关文章

攻防世界GFSJ1193 cat_theory

题目编号:GFSJ1193 附件下载后是一个jpg文件和一个sage文件(python): 1. 分析图片(.jpg文件) 这个交换图展示的是一个加密系统的 同态加密 性质,其核心思想是:加密前的操作与加密后…

2017 NHOI小学(C++)

A. 吃西瓜(2017 NHOI小学 1) 问题描述: 炎热的夏天来的可真快,小花猫和编程兔决定去买一个又大又甜的西瓜。可是小花和编程兔是两只非常奇怪的动物,都是偶数的爱好者,它们希望把西瓜切成两半后,每一部分的…

Vue 3 的双向绑定原理

Vue 3 的双向绑定原理是基于 响应式系统 和 数据劫持 技术来实现的。在 Vue 3 中,双向绑定通常是通过 v-model 指令来完成的,它本质上是数据的双向同步:当数据改变时,视图自动更新,反之,视图的修改也会更新…

小程序 - 婚礼邀请函

小程序页面和样式练习 - 婚礼邀请函小程序开发笔记 目录 婚礼邀请函 准备工作 加载静态资源 项目初始化 标签栏的配置 各页面导航栏标题配置 全局导航栏样式配置 公共样式的编写 项目内容 邀请函页面内容 邀请函页面样式 照片页面内容 照片墙页面样式 美好时光页…

Ubuntu桥接模式设置静态IP

目录 关于 NAT VS 桥接 为桥接模式配置静态IP 编辑虚拟机设置 虚拟网络编辑器 选择要桥接的网络适配器 固定桥接该网络适配器 确定静态IP与网关 虚拟机内更改 桌面可直接更改设置 非桌面版可以更改配置文件 关于Windows网络适配器(可以改)…

信创改造 - Redis -》TongRDS 安装方式之单节点模式安装

安装前准备 安装 JDK 参考链接:安装 JDK 8【Linux】 语雀 创建用户 # 用户名可以自己起 useradd rds 上传安装包到服务器 单节点模式是由两个部署单元组成:1 个RDS 服务节点,1 个 RDS 中心节点。 上传到 /home/rds 用户文件夹&#xff0…

解析类的泛型参数 Spring之GenericTypeResolver.resolveTypeArgument

GenericTypeResolver 是 Spring 的一个实用类,提供了在运行时解析泛型类型信息的能力。它包含了若干静态方法,可以用于解析类的泛型参数。GenericTypeResolver.resolveTypeArgument 方法可以用于解析一个具体类实现指定的泛型接口时,实际的泛…

Git 的使用

Git 初始 个人本机使用:Git 基础命令和概念 多人共享使用:团队开发同一个项目的代码版本管理 Git 安装 检验安装是否成功: 打开 bash 终端(git 专用) 命令:git -v(查看版本号)…