《OpenCV计算机视觉》—— 图像金字塔

文章目录

  • 什么是图像金字塔?
    • 一、定义与基本原理
    • 二、主要类型
    • 三、构建过程
    • 四、应用领域
  • 图像金字塔中的下采样和上采样
    • 一、下采样(Downsampling)
    • 二、上采样(Upsampling)
    • 三、总结
  • 代码实现

什么是图像金字塔?

一、定义与基本原理

图像金字塔是一种将图像以多分辨率进行表达的结构,通常表现为一系列分辨率逐渐降低的图像集合,这些图像按照金字塔形状(自下而上)排列,因此得名。每一层图像都是对下一层图像进行下采样(或上采样)得到的,层级越高,图像越小,分辨率越低。

二、主要类型

  • 常见的图像金字塔有两种类型:

    • 高斯金字塔(Gaussian Pyramid):高斯金字塔通过不断地对图像进行高斯滤波下采样操作来构建。每一层图像都是对下一层图像进行高斯滤波后,再以一定的步长(通常是2)进行抽样得到的。高斯滤波的目的是为了去除图像中的高频信息,保留低频信息,从而在不同尺度上平滑图像
    • 拉普拉斯金字塔(Laplacian Pyramid):拉普拉斯金字塔是在高斯金字塔的基础上构建的。它通过对高斯金字塔的每一层图像进行上采样(与降采样相反的操作),然后使用原高斯金字塔的对应层图像减去上采样后的图像,得到每一层的拉普拉斯图像。拉普拉斯图像包含了高斯金字塔相邻两层之间的差异信息,即图像的高频细节。

三、构建过程

  • 以高斯金字塔为例,其构建过程通常包括以下几个步骤:

    • 读取原始图像:首先,需要读取待处理的原始图像。
    • 高斯滤波:对原始图像进行高斯滤波,以去除图像中的高频噪声和细节。
    • 下采样:对滤波后的图像进行降采样操作,即按照一定的步长(如2)选取图像中的像素点,从而得到分辨率较低的图像。
    • 重复操作:将上一步得到的低分辨率图像作为新的输入图像,重复进行高斯滤波和降采样操作,直到达到所需的金字塔层数或满足某个终止条件。
  • 拉普拉斯金字塔的构建过程则需要在高斯金字塔的基础上,对每一层图像进行上采样和求差操作。

    • 可以理解为拉普拉斯金字塔是由高斯金字塔向下采样时丢失的信息构成的
  • 可以结合下图来理解:
    在这里插入图片描述

四、应用领域

  • 图像金字塔在图像处理中有着广泛的应用,主要包括以下几个方面:

    • 图像压缩:利用图像金字塔可以对图像进行多尺度表达,从而在压缩过程中保留图像的重要信息,同时去除冗余信息,实现高效的图像压缩。
    • 图像融合:在图像融合过程中,可以利用图像金字塔将不同分辨率的图像进行融合,从而得到更加清晰、全面的图像信息。
    • 图像分割:在图像分割任务中,可以利用图像金字塔对图像进行多尺度分析,从而更加准确地提取出图像中的目标区域。
    • 机器视觉:在机器视觉领域,图像金字塔可以用于特征提取、目标识别等任务中,提高算法的鲁棒性和效率。
  • 总之,图像金字塔是图像处理中的一种重要技术,它通过多尺度的图像表达方法,为图像处理提供了更加灵活和高效的手段。

图像金字塔中的下采样和上采样

一、下采样(Downsampling)

  • 下采样,也称为降采样,是图像金字塔构建过程中的一个重要步骤。它的主要目的是减少图像的分辨率,通常是通过去除图像中的部分数据来实现的。下采样的过程大致可以分为以下两个步骤:

    • 滤波:首先,对图像进行滤波处理,以去除图像中的高频成分,减少图像细节,通常使用高斯模糊等方法。
    • 子采样:在滤波之后,对图像进行子采样,即按照一定的规则(如每隔一行或一列取一个像素)去除部分像素,从而降低图像的分辨率。
  • 在OpenCV中,下采样通常通过 pyrDown() 函数来实现。这个函数会首先对图像进行高斯模糊,然后去除偶数行和列,从而得到分辨率降低的图像。通过多次调用pyrDown()函数,可以构建出完整的图像金字塔。

  • 下采样的优点包括降低计算复杂度、去除噪声、减小内存消耗和加速特征检测等。然而,它也会带来信息损失和图像失真的问题。

二、上采样(Upsampling)

  • 上采样,也称为放大或插值,是下采样的逆过程,用于增加图像的分辨率。上采样的主要目的是通过某种方式填充图像中的空白区域,从而恢复或提高图像的分辨率

  • 在OpenCV中,上采样通常通过 pyrUp() 函数来实现。这个函数会首先通过插值(如双线性插值或双三次插值)在图像的行列之间插入新的像素值,然后对新生成的图像进行高斯模糊处理,以平滑插值过程中产生的锯齿状边缘。

  • 然而,需要注意的是,上采样并不能完全恢复下采样过程中丢失的信息,因此上采样后的图像在细节上可能无法与原始图像完全一致。此外,上采样还可能导致图像模糊和失真。

三、总结

  • 向上采样和向下采样是相反的两种操作。但是,由于向下采样会丢失像素值,所以这两种操作是不可逆的。也就是说,对一幅图像先向上采样、再向下采样,是无法恢复其原始状态的;同样,对一幅图像先向下采样、再向上采样也无法恢复到原始状态

代码实现

  • 代码如下:

    import cv2""" 下采样 """
    MB = cv2.imread('wechat.jpg')
    # 注意:下采样要求图片的宽高的值必须是偶数,且在第一次下采样后宽高的值任然是偶数
    # 这里我们将图片的大小微调一下
    MB = cv2.resize(MB, dsize=(1276, 876))
    # 第一次下采样
    MB_down_1 = cv2.pyrDown(MB)
    # 第二次下采样
    MB_down_2 = cv2.pyrDown(MB_down_1)# 显示图像
    cv2.imshow('MB', MB)
    cv2.imshow('MB_down_1', MB_down_1)
    cv2.imshow('MB_down_2', MB_down_2)
    cv2.waitKey(0)""" 上采样 """
    # 对下采样后图片进行上采样,图像便模糊,无法复原
    MB_down_1_up = cv2.pyrUp(MB_down_1)
    MB_down_2_up = cv2.pyrUp(MB_down_2)cv2.imshow('MB_down_1_up', MB_down_1_up)
    cv2.imshow('MB_down_2_up', MB_down_2_up)
    cv2.waitKey(0)""" 拉普拉斯金字塔 """# 第一层求差
    L0 = MB - MB_down_1_up
    # 第二层求差
    L1 = MB_down_1 - MB_down_2_up# 通过上采样后的结果 + 下采样损失的像素值 来实现复原成原始图像
    fuyuan = MB_down_1_up + L0# 显示图片
    cv2.imshow('L0', L0)
    cv2.imshow('L1', L1)
    cv2.imshow('fuyuan', fuyuan)
    cv2.waitKey(0)
    
  • 原图和下采样后的结果图如下:
    在这里插入图片描述

  • 对对下采样后图片进行上采样后的结果图如下:
    在这里插入图片描述

  • 将下采样的图片和将下采样后的图片在进行上采样的图片放在一起对比,如下

  • 可以发现上采样后的结果图会比较模糊,这就是因为下采样时一些像素点丢失了
    在这里插入图片描述

  • 下采样丢失的像素值图片如下:
    在这里插入图片描述

  • 复原后的图片
    在这里插入图片描述

  • 原图如下:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/424388.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux---压缩打包

linux打包和压缩文件和目录: 归档(打包)命令:tar 归档就是将多个文件或者目录打包成为一个文件,存放再磁盘中,方便文件或者目录丢失时,可以恢复。 归档文件名使用相对路径 (注意区分归档文件和被归档文…

一家电子元件企业终止,业绩规模小,疑似通过收购调节收入利润

贝特电子终止原因如下:首先,报告期内贝特电子营收较低,收购东莞博钺股权可能构成重大资产重组,且假如扣除报告期内来自东莞博钺的净利润,贝特电子的净利润恐怕不符合深交所上市标准;其次,交易所…

QT之QML学习五:添加自定义Qml组件,以及组件管理

开发环境: 1、Qt 6.7.2 2、Pyside6 3、Python 3.11.4 4、Windows 10 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!! 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!! 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!!…

第四天旅游线路预览——从换乘中心到喀纳斯湖

第四天:从贾登峪到喀纳斯风景区入口,晚上住宿贾登峪; 换乘中心有4 路车,喀纳斯①号车,去喀纳斯湖,路程时长约5分钟; 将上面的的行程安排进行动态展示,具体步骤见”Google earth stu…

List<Map<String, Object>>汇总统计排序

开发环境&#xff1a;jdk 1.8 需求一&#xff1a; 1、统计每个小时(升序)不同事件的产品产量 2、统计不同事件&#xff08;OK 、NG&#xff09;的总产量 public static void main(String[] args) {//数据源List<Map<String, Object>> list new ArrayList<Map…

使用 PyCharm 新建 Python 项目详解

使用 PyCharm 新建 Python 项目详解 文章目录 使用 PyCharm 新建 Python 项目详解一 新建 Python 项目二 配置环境1 项目存放目录2 Python Interpreter 选择3 创建隔离环境4 选择你的 Python 版本5 选择 Conda executable 三 New Window 打开项目四 目录结构五 程序编写运行六 …

多人开发小程序设置体验版的痛点

抛出痛点 在分配任务时,我们将需求分为三个分支任务,分别由前端A、B、C负责: 前端A: HCC-111-实现登录功能前端B: HCC-112-实现用户注册前端C: HCC-113-实现用户删除 相应地,我们创建三个功能分支: feature_HCC-111-实现登录功能feature_HCC-112-实现用户注册feature_HCC-1…

uView使用心得

说实话我不爱用这个库&#xff0c;感觉很鸡肋&#xff0c;坑很多&#xff0c;可能没用习惯 picker选择器 绑定默认值是通过设置index&#xff0c;并且这个index需要通过api设置进去&#xff0c;设置defalutindex绑定值无效&#xff08;只有初始化可以&#xff0c;后面动态改变…

半导体制造技术中的沉积和驱入(Deposition and drive-in)过程

来源&#xff1a;半导体制造技术导论——萧宏 沉积和驱入过程 图5.34 硼掺杂工艺高温扩散炉系统示意图 图5.35 扩散掺杂工艺流程 图5.36 扩散工艺在超浅结深&#xff08;USJ&#xff09;上的应用

【物联网技术大作业】设计一个智能家居的应用场景

前言&#xff1a; 本人的物联网技术的期末大作业&#xff0c;希望对你有帮助。 目录 大作业设计题 &#xff08;1&#xff09;智能家居的概述。 &#xff08;2&#xff09;介绍智能家居应用。要求至少5个方面的应用&#xff0c;包括每个应用所采用的设备&#xff0c;性能&am…

【GPU版】Windows下PyTorch入门深度学习环境安装与配置

如果电脑有NVIDIA GPU显卡&#xff0c;看【GPU版本】&#xff1b;否则&#xff0c;看【CPU版本】 聊聊PyTorch和Tensorflow 它们都是python的库/包 pip3是给python3使用的&#xff0c;由于现在用的python基本上都是3以上版本&#xff0c;所以pip和pip3没有区别 聊聊Anacond…

Python爬虫使用实例-wallpaper

1/ 排雷避坑 &#x1f95d; 中文乱码问题 print(requests.get(urlurl,headersheaders).text)出现中文乱码 原因分析&#xff1a; <meta charset"gbk" />解决方法&#xff1a; 法一&#xff1a; response requests.get(urlurl,headersheaders) response.en…

F12抓包12:Performance(性能)前端性能分析

课程大纲 使用场景: ① 前端界面加载性能测试。 ② 导出性能报告给前端开发。 复习&#xff1a;后端(接口)性能分析 ① 所有请求耗时时间轴&#xff1a;“网络”&#xff08;Network&#xff09; - 概览。 ② 单个请求耗时&#xff1a;“网络”&#xff08;Network&#xf…

【LLM多模态】CogVideoX文生视频模型结构和训练过程

note 通过两阶段训练3D VAE&#xff0c;对视频进行压缩编码 第一阶段&#xff1a;在较低分辨率和较少帧数的视频上进行训练&#xff0c;学习压缩和重建视频的基本能力第二阶段&#xff1a;在更长的视频上训练&#xff0c;提高模型处理长视频的能力&#xff0c;同时保持帧与帧之…

[进阶]面向对象之 包 final

文章目录 包什么是包包名的规则:什么时候需要导包 final常量 包 什么是包 包就是文件夹。用来管理各种不同功能的Java类&#xff0c;方便后期代码维护。 包名的规则: 公司域名反写包的作用&#xff0c;需要全部英文小写&#xff0c;见名知意。使用其他类时&#xff0c;需要…

idea连接数据库大避雷!!!

再跟着黑马学习的时候&#xff0c;用黑马的资料安装的数据库&#xff0c;命令行能正常启动&#xff0c;SQLyog也能正常连接&#xff0c;就是tmd idea连接不了。不论是原始的jdbc,还是其它方式都不行&#xff0c;一直报错&#xff1a; 然后就各种搜&#xff0c;有的说数据库驱动…

react18基础教程系列--安装环境及packagejson文件分析

一个React项目中&#xff0c;默认会安装: react:React框架的核心react-dom:React 视图渲染的核心「基于React构建WebApp(HTML页面)J—>react-native:构建和渲染App的react-scripts: 脚手架为了让项目目录看起来干净一些&#xff0c;把webpack打包的规则及相关的插件/LOADER…

51单片机 - DS18B20实验1-读取温度

上来一张图&#xff0c;明确思路&#xff0c;程序整体裤架如下&#xff0c;通过单总线&#xff0c;单独封装一个.c文件用于单总线的操作&#xff0c;其实&#xff0c;我们可以把点c文件看成一个类操作&#xff0c;其属性就是我们面向对象的函数&#xff0c;也叫方法&#xff0c…

Vue.nextTick 的工作机制

Vue.nextTick 是异步执行的&#xff0c;它使用了微任务&#xff08;microtasks&#xff09;或宏任务&#xff08;macrotasks&#xff09;&#xff0c;具体使用哪种取决于 JavaScript 环境的支持情况。具体来说&#xff0c;Vue 优先选择使用微任务&#xff0c;如 Promise.then&a…

重生奇迹MU 浅析那些极具魔幻色彩的职业装备

沉稳厚重的剑士职业装备 剑士是所有喜欢近战作战方式的玩家首选的职业。作为来自勇者大陆的最强战士&#xff0c;剑士所穿戴的职业装备都偏向沉稳和厚重&#xff0c;通常全身覆盖重甲。这是因为剑士需要冲向敌人战斗&#xff0c;没有过硬的装备护身&#xff0c;他们很难承受住…