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

机器学习: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)

输出:

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

相关文章:

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

目录 一、图像金字塔 1.图像金字塔是什么&#xff1f; 2.有哪些常见类型&#xff1f; 3.金字塔的构建过程 4.图像金字塔的作用 二、图像金字塔中的操作 1.向下采样 2.向上采样 3.注意--无法复原 三、代码实现 1.高斯金字塔向下采样 2.高斯金字塔向上采样 3.无法复…...

linux安全软件Hydra使用教程

Hydra 是一个强大的网络登录工具&#xff0c;常用于渗透测试&#xff0c;支持对多种服务和协议&#xff08;如 SSH、FTP、HTTP 等&#xff09;进行暴力crack攻击。它可以通过字典攻击来测试用户名和密码的有效性。以下是关于如何使用 Hydra 的基本步骤和示例&#xff1a; 1. 安…...

【ShuQiHere】从晶体管到逻辑门:数字电路的构建之旅

【ShuQiHere】 现代计算机和电子设备的基础是逻辑电路&#xff08;Logic Circuits&#xff09;&#xff0c;它们执行信息处理和运算任务。在这些电路的核心&#xff0c;是晶体管&#xff08;Transistors&#xff09; 和 逻辑门&#xff08;Logic Gates&#xff09;。通过理解这…...

PDF扫描版文字识别OCR

PDF扫描版文字识别OCR 最近需要有对PDF扫描版进行文字可识别的需求&#xff0c;这里介绍一款工具挺好用的 这是一款开源的OCR工具 github地址 https://github.com/hiroi-sora/Umi-OCR 主要功能及特点 免费&#xff1a;本项目所有代码开源&#xff0c;完全免费。方便&#…...

Synchronized由什么样的缺陷? Java Lock是怎么弥补这些缺陷的?

synchronized 的缺陷 Synchronized 在 Java 中是最基础的线程同步机制&#xff0c;尽管简单易用&#xff0c;但也存在一些缺陷和局限性&#xff1a; 性能开销&#xff1a; synchronized 内部实现的监视器锁可能导致不必要的线程上下文切换和频繁竞争&#xff0c;从而引起性能下…...

联合仿真(FMI,FMU)资料收集

本文地址&#xff1a;https://blog.csdn.net/t163361/article/details/142262888 最近在研究使用Unity导入FMU模块进行仿真的功能。做功能前先尽可能收集下资料。 FMI标准 官方网站 github标准库 FMI标准由Modelica协会主导&#xff0c;具体介绍 FMI目前有三个标准 FMI1:20…...

Android Radio2.0——动态列表回调(七)

上一篇文章我们主要介绍了电台动态列表的获取流程,这里我们主要处理对应的回调流程以及扫描流程。 1)通过 getDynamicProgramList() 方法获取动态列表。 2)按照动态列表的内容,循环调用 scan() 方法执行向上调台,直到列表中的内容搜索完成。 3)根据 RadioManager.Program…...

在conda虚拟环境中安装cv2(试错多次总结)

首先保证你创建好了虚拟环境&#xff0c;并在anaconda命令窗口激活虚拟环境 依次输入下列命令&#xff1a; pip install opencv-python3.4.1.15 pip install opencv-contrib-python3.4.1.15 pip install dlib19.6.1 然后测试cv2是否可以使用&#xff0c;输入python 运行pyth…...

【EI稳定,马来亚大学主办】2024年计算机与信息安全国际会议(WCCIS 2024,9月27-29)

2024年计算机与信息安全国际会议 (WCCIS 2024) 将于2024年9月27-29日召开。 会议旨在为从事计算机与信息安全的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xff0c;拓宽研究思路&#xff0c;加强学术研究和探讨&…...

免费AI播客生成:notebooklm可以生成播客的两个发言人谈论的内容,从各种来源如研究论文、文章

参考&#xff1a; https://notebooklm.google.com/ 可以上传文章链接&#xff0c;ai自动生成播客两人对话&#xff1a; 另外notebooklm他本身也是个rag知识库对话&#xff0c;可以直接聊天框对话...

“MIME 媒体类型“用来标识网络传输内容的格式标准

MIME 类型&#xff08;Multipurpose Internet Mail Extensions 类型&#xff09;&#xff0c;也称为媒体类型&#xff0c;是用来标识网络传输内容的格式的标准。这些类型帮助 Web 服务器和浏览器理解如何处理和显示数据。MIME 类型在 Web 开发和网络通信中起着关键作用&#xf…...

MySql的基础讲解

一、初识MySql 数据库&#xff1a;按照数据结构来组织、存储和管理数据的仓库&#xff1b;是一个长期存储在计算机内的、有组织的、可共享 的、统一管理的大量数据的集合&#xff1b; OLTP&#xff1a;联机事务处理&#xff0c;主要是对数据库的增删改查。 OLTP 主要用来记录…...

类型转换等 面试真题

题目1 请问哪个结果为NaN A. 123null B. 123‘1’ C. 123/0 D. 123undefined 在这四个表达式中&#xff0c;只有D. 123 undefined 的结果是 NaN&#xff0c;原因如下&#xff1a; A. 123 null 结果是&#xff1a;123原因&#xff1a;null 在数值运算中会被自动转换为 0&a…...

MySQL下载安装

MySQL下载安装 MySQL :: MySQL Community Downloads MySQL :: Download MySQL Installer 安装步骤1 一路向前即可。 我只安装Server&#xff0c;不清楚的建议选择Full ​ 安装步骤2 如果是正式运行的服务器&#xff0c;可以选择Server Computer...

golang实现正向代理http_proxy和https_proxy

package mainimport ("bytes""fmt""io""log""net""net/url""strings" )func main() {// tcp 连接,监听 8080 端口l, err := net.Listen("tcp", ":8080")if err != nil {log.Panic…...

数字IC设计\FPGA 职位经典笔试面试--整理

注&#xff1a; 资料都是基于网上一些博客分享和自己学习整理而成的 1&#xff1a;什么是同步逻辑和异步逻辑&#xff1f; 同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。 同步时序 逻辑电路的特点&#xff1a;各触发器的时钟端全部连接在一…...

Golang协程泄漏定位和排查

Golang协程泄漏定位和排查 1 场景&#xff1a;无缓冲channel写阻塞2 排查和定位思路2.1 Golang pprof2.2 协程数监控2.3 操作系统内存泄漏 参考 1 场景&#xff1a;无缓冲channel写阻塞 package mainimport ("log""net/http"_ "net/http/pprof"…...

【我的 PWN 学习手札】Unlink Attack

目录 前言 一、Unlink介绍 二、保护和限制 &#xff08;1&#xff09;FD->bk P AND BK->fd P &#xff08;2&#xff09;chunksize(P) prev_size(next_chunk(P)) &#xff08;3&#xff09;largebin chunk 三、适用场景 四、利用与绕过 &#xff08;1&#…...

算法笔试-编程练习-好题-04

题目:堆盒子 礼盒大小不同&#xff0c;我们玩堆盒子的游戏&#xff0c;怎么堆盒子使得堆出的高度最高&#xff0c;每个礼盒的大小由长、宽、高表示&#xff0c;堆盒子的时候要求下面的盒子长、宽、高都必须大于上面的盒子&#xff0c;不包含等于。高度为堆出的礼盒的所有高度的…...

使用Rustup快速无缝升级Rust

rust update 升级 Rustup 是 Rust 官方的跨平台 Rust 安装工具。我们可以使用rustup升级rust版本 rustup updaterustup is not installed at ‘E:\cargo’ 意思是说’E:\argo’未安装rustup 将原来C:\Users\用户名\.cargo\bin下的文件复制到新的E:\cargo\bin $ rustup upda…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...