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

news2024/9/22 5:30:55

文章目录

  • 什么是图像金字塔?
    • 一、定义与基本原理
    • 二、主要类型
    • 三、构建过程
    • 四、应用领域
  • 图像金字塔中的下采样和上采样
    • 一、下采样(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.coloradmin.cn/o/2122698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[进阶]面向对象之多态(二)

文章目录 多态调用成员的特点多态的优势和弊端 多态调用成员的特点 变量调用:编译看左边,运行也看左边方法调用:编译看左边,运行看右边 多态的优势和弊端 优势: 在多态形式下,右边对象可以实现解耦合,便于扩展和维护定义方法的时候&…

【MySQL】查询表中重复数据、模糊查询列信息、快速copy表数据(1)

一、SQL查询重复的数据: 1、SQL格式: Select * From 数据表 Where 重复记录字段 in ( select 重复记录字段 From 数据表 Group By 重复记录字段 Having Count(重复记录字段)>1) 2、举例: 在这个patient_member_info表中,我们…

kkFileView PDF Image Mode Preview BUG

kkFileView PDF & Image Mode Preview BUG lazyload.js officePicture.ftl pdf.ftl kkFileView getCorsFile?urlPath 会触发SSRF漏洞 kkFileView SSRF-CSDN博客 commonHeader.ftl initWaterMark() 修改代码的工作量,主要是先部署项目,解…

2023年408真题计算机网络篇

https://zhuanlan.zhihu.com/p/6954228062023年网络规划设计师上午真题解析TCP流量计算_哔哩哔哩_bilibili 1 1在下图所示的分组交换网络中,主机H1和H2通过路由器互联,2段链路的数据传输速率为100 Mb/s、时延带宽积 (即单向传播时延带宽&am…

计算机毕业设计 家校互联管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【Linux实践】实验一:Linux系统安装与启动

【Linux实践】实验一:Linux系统安装与启动 实验目的实验内容实验步骤及结果1. 下载VMware2. 下载 Linux 操作系统3. 在VMware中安装Ubuntu系统4. 配置Ubuntu系统5. 关机 实验目的 1.掌握Linux系统的安装过程和简单配置方法。 2.掌握与Linux相关的多操作系统的安装方…

centos挂载fat32和ntfs文件系统u盘

centos挂载u盘 一、 挂载fat32文件系统u盘1. 查看u盘的文件系统2. 查看系统是否识别到u盘3. 挂载fat32文件系统u盘 二、挂载ntfs文件系统u盘1. 检查u盘文件系统(忽略)2. 查看系统是否识别到u盘3. 挂载ntfs文件系统3.1. 下载ntfs-3g组件3.2. 挂载u盘 一、…

嵌入式day42

framebuffer:帧缓冲、帧缓存 Linux内核为显示提供的一套应用程序接口(驱动内核支持) 分辨率:像素点的总和 像素点: 显示屏:800*600(横向有800个像素点,纵向有600个像素点&#x…

【笔记】1.1 拉伸力-伸长(延伸)曲线和应力-应变曲线

文章目录 拉伸力-伸长(延伸)曲线低碳钢的拉伸力-伸长(延伸)曲线公称应力公称应变真应力真应变公称应力和真应力、公称应变和真应变的关系 应力-应变曲线公称应力-公称应变曲线真应力-真应变曲线 拉伸力-伸长(延伸&…

Unity1 Prefab

修改预设体 进入预设体面板来改 在Hierarchy中可以给预制体添加对象 第一种方法:添加了之后把Hierarchy中的预制体拖到Project中的预制体上 就可以修改原本的预制体 第二种方法:添加了之后在inspector中 点revert 就是重置所有预制体 添加的就没有…

Docker基本管理--Dockerfile镜像制作(Docker技术集群与应用)

容器端口映射; 容器间通信; 容器数据卷; DockerFile; 容器端口映射: 实验环境:紧接着之前的快照,将该文件夹拉取进去; 然后执行导入的脚本,会将该目录下所有打包好的镜像文件导入进入。 然后进…

containerd二进制安装

文章目录 安装版本(截止2024年9月10日)方式1:yum安装(不推荐)设置主机名设置IP获取阿里YUM源查询containerd安装验证与启动服务测试命令 方式2:二进制安装(推荐)安装之前先了解conta…

游戏创作的梦想之地!EE GAMES 创作者社区上线,VipSkill产学研结合迈开重大步伐

EE GAMES 官网 EE GAMES创作者社区 是一个怎样的平台? EE GAMES 创作者社区,是专注于链接每一位游戏创作者,提供全方位服务的游戏领域垂类社区。 这里不仅…

信号完整性仿真中关于铜箔粗糙度的三篇文献

首先放文献: Paul G. Huray. "Surface Roughness", in The Foundations of Signal Integrity. John Wiley & Sons, Inc., Hoboken, New Jersey. 2009. Paul G. Huray. "Impact of Copper Surface Texture on Loss: A model That Works", …

算法工程师重生之第三天( 链表理论基础 移除链表元素 设计链表 反转链表 )

参考文献 代码随想录 一、 链表理论基础 什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向nu…

关于粒子滤波的解析

粒子滤波流程 基本原理:随机选取预测域的 N NN 个点,称为粒子。以此计算出预测值,并算出在测量域的概率,即权重,加权平均就是最优估计。之后按权重比例,重采样,进行下次迭代。 初始状态&#x…

抖音评论区截流脚本软件详细使用教学,抖音私域获客引流的五种方法。

1.先说下什么是抖音截流玩法,截流顾名思义就是在别的博主的视频下面去截流评论潜在流量,然后用评论文案的形式或者其它方式吸引用户加我们的私域~ 玩截流一定不是主动去私信别人,这个就不叫截流了,且一个账号私信多了一定会降权和…

MIT6.824 课程-MapReduce

MapReduce:在大型集群上简化数据处理 概要 MapReduce是一种编程模型,它是一种用于处理和生成大型数据集的实现。用户通过指定一个用来处理键值对(Key/Value)的map函数来生成一个中间键值对集合。然后,再指定一个reduce函数, 它用…

OpenCV-模板匹配

文章目录 一、简介1.定义与原理2.算法与方法3.参数解释 二、代码实现1.读取数据2.检查图像是否成功加载3.获取模板的高度和宽度4.模板匹配5.计算匹配区域坐标6.显示图像7.全部代码 三、总结 一、简介 在OpenCV中,模型匹配(或称为模板匹配)是…

机器学习-逻辑回归原理及其公式

逻辑回归(Logistic Regression)是一种广泛应用于分类任务的统计学方法,尤其是在二分类问题中表现尤为突出。尽管它的名字中包含“回归”,但实际上逻辑回归是一种分类算法。逻辑回归的目标是预测一个样本属于某一类别的概率&#x…