机器学习:opencv--图像金字塔

目录

一、图像金字塔

1.图像金字塔是什么?

2.有哪些常见类型

3.金字塔的构建过程

4.图像金字塔的作用

二、图像金字塔中的操作

1.向下采样

2.向上采样

3.注意--无法复原

三、代码实现

1.高斯金字塔向下采样

2.高斯金字塔向上采样

3.无法复原

4.拉普拉斯金字塔


一、图像金字塔

1.图像金字塔是什么?

  1. 是由一幅图像的多个不同分辨率的子图构成的图像集合
  2. 是通过一个图像不断的降低采样率产生的,最小的图像可能仅仅有一个像素点。
  3. 图像金字塔的底部是待处理的高分辨率图像(原始图像),而顶部则为其低分辨率近似图像

 

2.有哪些常见类型?

<1> 高斯金字塔

        通过逐层应用高斯滤波下采样,生成不同分辨率的图像以表示多尺度信息。        

<2> 拉普拉斯金字塔

        拉普拉斯金字塔是由高斯金字塔向下采样丢失信息构成

 

3.金字塔的构建过程

<1> 高斯金字塔

  1. 初始图像:导入原始图像。
  2. 高斯滤波:对图像应用高斯滤波。
  3. 下采样:将图像尺寸减半,生成下一级图像。
  4. 重复:重复高斯滤波和下采样步骤,直到达到所需的层数或图像尺寸过小。

<2> 拉普拉斯金字塔

  1. 生成高斯金字塔:先创建高斯金字塔。
  2. 上采样:将高斯金字塔的每层图像上采样到前一层的尺寸。
  3. 计算细节:用前一层的高斯图像减去上采样后的图像,得到拉普拉斯细节图像。
  4. 最后一层:拉普拉斯金字塔的最后一层即为高斯金字塔的最后一层。

 

4.图像金字塔的作用

<1> 特征点提取

  • 图像金字塔允许在不同尺度下检测特征点,提高特征点检测的尺度不变性

<2> 模板匹配

  • 图像金字塔帮助处理不同尺度的模板匹配问题,提高匹配的准确性

<3> 光流跟踪

  • 通过在不同尺度层中估计光流,图像金字塔帮助处理大范围的运动,提高光流估计的精度

 

二、图像金字塔中的操作

1.向下采样

        向金字塔顶部移动时,图像的尺寸和分辨率都不断地降低。通常情况下,每向上移动一级,图像的宽和高都降低为原来的1/2

<1> 步骤

  1. 高斯滤波(减少高频噪声)         
  2. 删除其偶数行和偶数列(所以所用图像一般高宽都是偶数)

<2> 图示

 

2.向上采样

        通常将图像的宽度和高度都变为原来的2倍。这意味着,向上采样的结果图像的大小是原始图像的4倍。因此,要在结果图像中补充大量的像素点。对新生成的像素点进行赋值的行为,称为插值

<1> 步骤

  1. 插值         
  2. 高斯滤波(减少由于插值产生的人工边界和不自然的过渡)

<2> 图示

 

3.注意--无法复原

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

 

三、代码实现

1.高斯金字塔向下采样

  • 使用cv2.pyrDown()函数实现向下采样
import cv2  # opencv读取的格式是BGR2# 高斯金字塔操作中的向下采样
# 下采样 是一种减小图像尺寸的方法,它通常涉及到降低图像的分辨率,即减少图像中像素的数量,从而使图像看起来更小
# 上釆样 是一种增大图像尺寸的方法,它通过插值和滤波技术来恢复图像的分辨率和细节,通常用于图像放大或者与下采样后的图像进行比较。
# resize函数 是一种通用的图像尺寸调整方法,它可以按照指定的目标尺寸来缩放图像,不涉及金字塔结构或者特定的滤波操作。
# dst = cv2.pyrDown(src [,dst, dstsize [, borderType] ])
# dst:目标图像
# src:原始图像
# dstsize:目标图像的大小
face = cv2.imread('face.jpg')  # G0
face = cv2.resize(face, (400, 400))
cv2.imshow('face', face)
cv2.waitKey(0)# 向下采样
face_down_1 = cv2.pyrDown(face)  # 下采样G1
cv2.imshow('face_down_1', face_down_1)
cv2.waitKey(0)
face_down_2 = cv2.pyrDown(face_down_1)  # G2
cv2.imshow('face_down_2', face_down_2)
cv2.waitKey(0)

输出:

  • 可以看出来图像的宽高逐层减半

 

2.高斯金字塔向上采样

  • 使用cv2.pyrUp()函数实现向上采样
  • 默认双线性插值法
import cv2  # opencv读取的格式是BGR2# 高斯金字塔操作中的向上采样
# dst = cv2.pyrUp(src [,dst, dstsize [, borderType] ])
# dst:目标图像
# #src:原始图像
# dstsize:目标图像的大小
face = cv2.imread('face.jpg')  # G0
face = cv2.resize(face, (400, 400))
cv2.imshow('face', face)
cv2.waitKey(0)
face_up_1 = cv2.pyrUp(face)
cv2.imshow('face_up_1', face_up_1)  # G1
cv2.waitKey(0)
face_up_2 = cv2.pyrUp(face_up_1)
cv2.imshow('face_up_2', face_up_2)  # G2
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

  • 可以看到向上采样之后的图像宽高逐层变成2倍

 

3.无法复原

# 对下采样后图像进行上采样,图像变模糊,无法复原
# 对上采样后图像进行下采样,图像变模糊,无法复原
face_down_1_up = cv2.pyrUp(face_down_1)  # 下采样G1
face_up_1_down = cv2.pyrDown(face_up_1)  # 上采样G1
cv2.imshow('yuantu', face)
cv2.imshow('down_1_up', face_down_1_up)
cv2.imshow('up_1_down', face_up_1_down)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

  • 可以看到两种操作之后的图像大小与原图一样
  • 但是清晰度却比原图差了不少

 

4.拉普拉斯金字塔

# 拉普拉斯金字塔
face_down_2_up = cv2.pyrUp(face_down_2) 
L0 = face - face_down_1_up
L1 = face_down_1 - face_down_2_up
fuyuan = face_down_1_up + L0
cv2.imshow('L0', L0)
cv2.imshow('L1', L1)
cv2.imshow('fuyuan', fuyuan)
cv2.waitKey(0)

输出:

  • 可以看到拉普拉斯金字塔的复原效果还是不错的
  • 我这里使用的是彩色图片,所以拉普拉斯图像是彩色的
  • 如果使用的图片是灰度图,那么就是黑白的

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

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

相关文章

基于SpringBoot+Vue+MySQL的志愿服务管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着社会对志愿服务需求的日益增长&#xff0c;传统的志愿服务管理方式已难以满足高效、透明、精准的管理需求。为提升志愿服务组织的运营效率&#xff0c;优化资源配置&#xff0c;增强志愿者参与度和满意度&#xff0c;开发基…

LinuxC高级作业1

1.已知网址www.hqyj.com截取出网址的每一个部分 2.整理思维导图 3.将配置桥接网络的过程整理成文档 i)) 保证虚拟机提供了桥接模式 菜单栏中 ----> 虚拟机 -----> 设置 -----> 网络适配器 ii) 保证虚拟机可以设置桥接网络 菜单栏中 ----> 编辑 -----> 虚拟网…

linux第一课(操作系统核心)

一.关于linux (1)linux是一款开源的操作系统(是多用户&#xff0c;多任务&#xff0c;多线程)。 (2)一般所说的linux指的是linux核心&#xff0c;即对计算机硬件资源负责调度管理&#xff0c;主要职责是进程管理&#xff0c;内存管理文件系统&#xff0c;设备驱动&#xff0c…

禹神3小时快速上手typescript

一、TypeScript简介 TypeScript 由微软开发&#xff0c;是基于 JavaScript 的⼀个扩展语⾔。TypeScript 包含了 JavaScript 的所有内容&#xff0c;即&#xff1a; TypeScript 是 JavaScrip t 的超集。TypeScript 增加了&#xff1a;静态类型检查、接⼝、 泛型等很多现代开发特…

(计算机毕设)基于SpringBoot+Vue的“乐锄”农产品销售网站的设计与实现

毕业设计&#xff08;论文&#xff09; 博主可接毕设&#xff01;&#xff01;&#xff01; 基于SpringBootVue的“乐锄”农产品销售网站的设计与实现 摘 要 传统的农资采购销售模式&#xff0c;造成农业生产的效率和质量低&#xff0c;人们对食品安全问题关注不断增加&#x…

golang 字符串浅析

go的字符串是只读的 测试源代码 package mainimport ("fmt""unsafe" )func swap(x, y string) (string, string) {return y, x }func print_string(obj *string, msg string) {string_ptr : (*[2]uintptr)(unsafe.Pointer(obj))first_obj_addr : string_…

前后端分离,使用MOCK进行数据模拟开发,让前端攻城师独立于后端进行开发

mock是什么 Mock生成随机数据,拦截Ajax 请求&#xff0c;前后端分离&#xff0c;让前端攻城师独立于后端进行开发。 增加单元测试的真实性 通过随机数据,模拟各种场景。 在实际开发过程中&#xff0c;前端是通过axios来请求数据的&#xff0c;很多时候前端开发者就是通过写固定…

1.Seata 1.5.2 seata-server搭建

一&#xff1a;Seata基本介绍 Seata是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 详见官网链接&#xff1a;https://seata.apache.org/zh-cn/ 1.历史项目里的使用经验&#xff1a; 之前公司里的oem用户对应的App…

C# 修改项目类型 应用程序程序改类库

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

Docker学习笔记(四)单主机网络

简介 Docker从容器中抽象除出了底层的主机连接网络&#xff0c;使得程序不用关心运行时的环境。连接到Docker网络的容器将获得唯一的地址&#xff0c;其他连接到同一Docker网络的容器也可以根据该IP找到目标容器并发送消息。   但是容器内运行的软件没法方便的确定主机IP地址…

SEGGERS实时系统embOS推出Linux端模拟器

SEGGER 发布了两个新的 embOS 仿真模拟器&#xff1a;embOS Sim Linux 和 embOS-MPU Sim Linux。 通过模拟 Linux 主机系统上的硬件&#xff0c;取代物理硬件&#xff0c;为开发人员提供了一种无缝的方式来构建原型和测试应用程序。 embOS Sim Linux 端口支持 32 位和 64 位系…

网络安全产品认证证书大全(持续更新...)

文章目录 一、引言二、《计算机信息系统安全专用产品销售许可证》2.1 背景2.2 法律法规依据2.3 检测机构2.4 检测依据2.5 认证流程2.6 证书样本 三、《网络关键设备和网络安全专用产品安全认证证书》3.1 背景3.2 法律法规依据3.3 检测机构3.4安全认证和安全检测依据标准3.5 认证…

费用管理系统如何优化企业年报台账归集流程?

随着企业规模的扩大和业务的复杂化&#xff0c;财务管理工作的重要性日益凸显。其中&#xff0c;年报台账归集作为财务管理的重要环节&#xff0c;不仅关乎企业财务数据的准确性和完整性&#xff0c;更直接影响到企业决策的科学性和合理性。面对海量的财务数据和复杂的归集要求…

下载 llama2-7b-hf 全流程【小白踩坑记录】

1、文件转换 在官网 https://ai.meta.com/llama/ 申请一个账号&#xff0c;选择要下载的模型&#xff0c;会收到一个邮件&#xff0c;邮件中介绍了下载方法 执行命令 git clone https://github.com/meta-llama/llama.git​ &#xff0c;然后执行 llama/download.sh&#xff0c…

[数据集][目标检测]车窗状态检测车窗开关检测数据集VOC+YOLO格式299张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;299 标注数量(xml文件个数)&#xff1a;299 标注数量(txt文件个数)&#xff1a;299 标注类别…

【零成本】七日杀 服务器搭建 异地联机 无需公网IP、服务器

主要内容 什么是七日杀 搭建前需要准备什么 详细步骤 1.Steam中下载七日杀服务器工具 2.修改七日杀服务配置文件 3.启动七日杀服务器应用 4.运行 MoleSDN 进行异地联机 5.小伙伴打开游戏加入 鼠鼠的服务器 什么是七日杀 《七日杀》是一款沙盒生存恐怖游戏&#xff0c;…

海外云手机怎么实现TikTok多账号防关联?

TikTok多账号运营&#xff0c;作为众多用户选择的引流策略&#xff0c;旨在通过多账号的协同作用&#xff0c;更快速、高效地推动主账号的流量增长。然而&#xff0c;这一策略面临着一个关键难题——TikTok账号防关联。本文将简要介绍海外云手机如何解决这一问题。 在TikTok多账…

携手科大讯飞丨云衔科技为企业提供全栈AI技术解决方案

作为智能时代的核心驱动力&#xff0c;人工智能不仅重塑了传统行业的面貌&#xff0c;更开辟了全新的经济增长点。科大讯飞以其深厚的技术底蕴和创新能力&#xff0c;持续引领着人工智能领域的发展潮流。云衔科技作为科大讯飞开放平台的AI技术产品线合作伙伴代理商&#xff0c;…

c# 开发串口调试助手 Visual Studio 2019

一、串口调试工具作用 串口调试助手是用于在开发、测试和调试串口通信应用程序时进行串口数据的监视和交互的工具。它通常具有以下功能&#xff1a; 1. 串口参数设置&#xff1a;允许用户设置串口的波特率、数据位、校验位、停止位等参数。 2. 串口连接管理&#xff1a;允许用…

CAD中的spline详解

从dxf文件中提取点、直线、圆、弧等元素比较简单&#xff0c;但是Spline的处理比较麻烦。经过一段时间探索总结一下成果。 一、基本公式 1.有理样条曲线 查阅一些资料&#xff0c;认为CAD中使用的Spline 是非均匀有理样条曲线。实测CAD中每个控制点权重都是-1&#xff0c;所以…