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

server/2024/11/30 18:20:12/

金字塔(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/server/146216.html

相关文章

ESP32/ESP8266通过ESP-MESH无线组网协议通信

ESP32/ESP8266通过ESP-MESH无线组网协议通信 简介painlessMesh LibraryESP-MESH广播通信示例ESP-MESH通信验证总结 简介 Wi-Fi Mesh 是一种能够大幅提高 Wi-Fi 信号覆盖范围的无线网络系统。乐鑫基于 Wi-Fi 协议推出了 Wi-Fi Mesh 组网方案 ESP-Mesh-Lite,支持分布…

积鼎科技携手西北工业大学动力与能源学院共建复杂多相流仿真联合实验室

11月26日,复杂多相流仿真联合实验室揭牌仪式及技术研讨活动在西北工业大学动力与能源学院成功举办。复杂多相流仿真联合实验室是由西北工业大学动力与能源学院牵头,携手上海积鼎信息科技有限公司与三航铸剑(西安)科技发展有限公司…

速盾:介绍一下高防cdn的缓存响应事什么功能?

高防CDN(Content Delivery Network)是一种基于分布式缓存技术的网络加速服务,能够提供强大的缓存响应功能。它的缓存响应功能主要包括缓存加速和智能缓存两个方面。 首先,高防CDN的缓存加速功能是指通过在全球范围内部署大量的缓…

图像处理里的傅里叶变换:原理与代码实现

简介:本文围绕傅里叶变换在图像处理中的应用展开。先是以通俗易懂的方式详细阐释了傅里叶变换的核心理论,涵盖为何选用正弦和余弦、空间域到频率域的转换以及幅度图像和相位图像的含义等内容,帮助读者理解其原理。接着通过具体代码示例&#…

mybatis02——Mapper代理开发

以上配置完后在mybatis-config.xml文件里改resources&#xff08;见后面&#xff1a;可以直接将整个mapper包导进来&#xff09; <mappers><mapper resource"com/test/mapper/UserMapper.xml"/></mappers> 在接口&#xff08;与xxxMapper.xml文件…

Linux xattr 命令详解

简介 Linux 中的 xattr 命令用于管理文件的扩展属性。扩展属性存储标准属性中未包含的附加元数据&#xff08;如权限、所有者和时间戳&#xff09;。它们通常由特定的应用程序或文件系统&#xff08;例如&#xff0c;acl、SELinux 标签&#xff09;使用。 关键概念 扩展属性&…

【docker】docker的起源与容器的由来、docker容器的隔离机制

Docker 的起源与容器的由来 1. 虚拟机的局限&#xff1a;容器的需求萌芽 在 Docker 出现之前&#xff0c;开发和部署软件主要依赖虚拟机&#xff08;VMs&#xff09;&#xff1a; 虚拟机通过模拟硬件运行操作系统&#xff0c;每个应用程序可以运行在自己的独立环境中。虽然虚…

26届JAVA 学习日记——Day17

2024.11.29 周五 今天把苍穹外卖的项目做完啦&#xff0c;准备开始做新的AI项目&#xff0c;今天的时间主要在修改简历&#xff0c;超级简历现在要收费&#xff0c;自己Word慢慢改真的很耗时间。 八股 今日暂无该内容学习。 算法 今日暂无该内容学习。 项目 苍穹外卖-完结…