当前位置: 首页 > article >正文

《Opencv》图像金字塔与采样

目录

一、简介

二、图像金字塔简介

三、上采样与下采样的原理

1. 下采样(Downsampling)

2. 上采样(Upsampling)

四、代码实现

五、结果展示

​编辑 ​编辑

六、代码解析

1. 图像读取

2. 下采样

3. 上采样

4. 结果显示

七、核心知识点

1. 下采样的作用

2. 上采样的作用

3. 插值算法

八、应用场景

九、总结


一、简介

在图像处理中,图像金字塔是一种多尺度表示方法,通过对图像进行上采样和下采样,可以生成一系列不同分辨率的图像。这种技术广泛应用于图像缩放、图像融合、目标检测等领域。本文将介绍上采样和下采样的基本原理,并通过一个实际的代码示例,展示如何使用OpenCV实现图像的上下采样。


二、图像金字塔简介

图像金字塔是一种以多分辨率表示图像的结构,通常包括两个方向的操作:

  1. 下采样(Downsampling):将图像的分辨率降低,生成更小的图像。

  2. 上采样(Upsampling):将图像的分辨率提高,生成更大的图像。

图像金字塔可以分为两种类型:

  • 高斯金字塔(Gaussian Pyramid):通过对图像进行高斯平滑和下采样生成。

  • 拉普拉斯金字塔(Laplacian Pyramid):通过对高斯金字塔的每一层进行上采样和差分生成。

在本文中,我们主要关注高斯金字塔中的上采样和下采样操作。


三、上采样与下采样的原理

1. 下采样(Downsampling)

下采样是通过降低图像的分辨率来生成更小的图像。OpenCV中的 cv2.pyrDown 函数实现了这一操作。其具体步骤如下:

  1. 高斯平滑:对图像进行高斯模糊,以减少高频信息。

  2. 降采样:将图像的宽度和高度分别减半,删除偶数行和偶数列。

下采样后的图像尺寸为原图像的1/4(宽度和高度各减半)。

2. 上采样(Upsampling)

上采样是通过提高图像的分辨率来生成更大的图像。OpenCV中的 cv2.pyrUp 函数实现了这一操作。其具体步骤如下:

  1. 插值:将图像的宽度和高度分别加倍,新增的像素值通过插值算法(如双线性插值)计算。

  2. 高斯平滑:对插值后的图像进行高斯模糊,以平滑新增的像素。

上采样后的图像尺寸为原图像的4倍(宽度和高度各加倍)。


 

四、代码实现

以下是使用OpenCV实现图像上下采样的完整代码:

import cv2

# 读取灰度图像
img = cv2.imread('./images/img_2.png', 0)

# 显示原始图像
cv2.imshow('img', img)
cv2.waitKey(0)

# 第一次下采样
img_down_1 = cv2.pyrDown(img)
cv2.imshow('img_down_1', img_down_1)
cv2.waitKey(0)

# 第二次下采样
img_down_2 = cv2.pyrDown(img_down_1)
cv2.imshow('img_down_2', img_down_2)
cv2.waitKey(0)

# 第一次上采样
img_up_1 = cv2.pyrUp(img)
cv2.imshow('img_up_1', img_up_1)
cv2.waitKey(0)

# 第二次上采样
img_up_2 = cv2.pyrUp(img_up_1)
cv2.imshow('img_up_2', img_up_2)
cv2.waitKey(0)

# 关闭所有窗口
cv2.destroyAllWindows()

五、结果展示

 


六、代码解析

1. 图像读取

  • 使用 cv2.imread 读取灰度图像,0 表示以灰度模式加载图像。

2. 下采样

  • 使用 cv2.pyrDown 对图像进行下采样,生成分辨率更低的图像。

  • 第一次下采样后,图像的尺寸减半;第二次下采样后,图像的尺寸再次减半。

3. 上采样

  • 使用 cv2.pyrUp 对图像进行上采样,生成分辨率更高的图像。

  • 第一次上采样后,图像的尺寸加倍;第二次上采样后,图像的尺寸再次加倍。

4. 结果显示

  • 使用 cv2.imshow 显示原始图像、下采样图像和上采样图像,并通过 cv2.waitKey 等待用户按下任意键继续。


七、核心知识点

1. 下采样的作用

  • 降低计算复杂度:通过减少图像的像素数量,可以加快后续图像处理算法的速度。

  • 多尺度分析:在目标检测和图像识别中,下采样可以生成不同尺度的图像,用于检测不同大小的目标。

2. 上采样的作用

  • 图像放大:将低分辨率图像放大到高分辨率,用于图像超分辨率重建。

  • 图像融合:在拉普拉斯金字塔中,上采样用于将低分辨率图像与高分辨率图像融合。

3. 插值算法

  • 上采样过程中,新增的像素值通过插值算法计算。常用的插值算法包括:

    • 最近邻插值:简单快速,但效果较差。

    • 双线性插值:计算相邻像素的加权平均值,效果较好。

    • 双三次插值:计算更多相邻像素的加权平均值,效果更好但计算量较大。


八、应用场景

上采样和下采样在图像处理中有广泛的应用,例如:

  1. 图像缩放:将图像缩放到目标分辨率。

  2. 图像金字塔:生成多尺度图像,用于目标检测和图像融合。

  3. 超分辨率重建:通过上采样和深度学习技术,将低分辨率图像重建为高分辨率图像。


九、总结

本文介绍了上采样和下采样的基本原理,并通过一个实际的代码示例展示了如何使用OpenCV实现图像的上下采样。下采样通过降低图像分辨率减少计算量,而上采样通过插值算法提高图像分辨率。这两种操作在图像处理中有着广泛的应用,是图像金字塔和多尺度分析的基础。


http://www.kler.cn/a/508168.html

相关文章:

  • RPA赋能内容创作:打造小红书入门词语图片的全自动化流程
  • 32单片机综合应用案例——物联网(IoT)环境监测站(四)(内附详细代码讲解!!!)
  • 将Docker运行中的容器保存为镜像并导出导入
  • 使用python+pytest+requests完成自动化接口测试(包括html报告的生成和日志记录以及层级的封装(包括调用Json文件))
  • 【c++继承篇】--继承之道:在C++的世界中编织血脉与传承
  • 【WPS】【WORDEXCEL】【VB】实现微软WORD自动更正的效果
  • 【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)
  • Elasticsearch:Jira 连接器教程第二部分 - 6 个优化技巧
  • Unsloth 大模型微调工具与 llama.cpp 量化推理库简介及其预训练操作方法
  • 20250118 Flink中的延迟执行机制和数据处理的逻辑拓扑结构(向圖)
  • 基于 Spring Boot、Vue 实现的调问开源问卷系统
  • Linux操作命令之云计算基础命令
  • 安卓端使用线程下载文件卡滞
  • 基于javaweb的SpringBoot景区旅游管理系统设计和实现(源码+文档+部署讲解)
  • Biotin sulfo-N-hydroxysuccinimide ester ;生物素磺基-N-羟基琥珀酰亚胺酯;生物素衍生物;190598-55-1
  • [Azure] 如何解决个人账号无法直接登录的问题:利用曲线救国方法访问Speech Studio
  • 利用爬虫获取某学习软件的考试题库(带源码)
  • LLM(大语言模型)支撑下的传统工作流转型发展为AI工作流
  • linux的用户管理和权限设置相关命令
  • 工业视觉5-工业视觉选型
  • C++(二十一)
  • DNS服务学习
  • 基于微信小程序教学辅助系统设计与实现(LW+源码+讲解)
  • ChatGPT升级AI私人助理功能:新增定时播报全网热点与定制每日学习健身计划
  • Spring Boot中Tomcat配置
  • AF3 TriangleMultiplicativeUpdate类代码解读