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

OpenCV-上下采样

文章目录

  • 一,简介
  • 二、下采样(Downsampling)
  • 三、上采样(Upsampling)
  • 四、代码实现
    • 1.图像读取
    • 2.下采样
    • 3.上采样
    • 4.拉普拉斯金字塔
  • 五、应用

一,简介

  • 高斯金字塔是图像处理、计算机视觉和信号处理中常用的一项技术,其核心在于通过高斯平滑和亚采样(即下采样)来构建图像的多尺度表示。在高斯金字塔中,上下采样是构建金字塔层级的关键步骤。

  • 拉普拉斯金字塔(Laplacian Pyramid)是高斯金字塔的一种扩展,用于捕捉和重建图像在不同尺度上的细节信息。在高斯金字塔中,每一层图像都是通过对其上一层图像进行高斯模糊和下采样得到的,这个过程会导致图像细节的损失。拉普拉斯金字塔则通过记录这些在高斯金字塔构建过程中丢失的细节来工作。

  • 拉普拉斯金字塔的每一层都是高斯金字塔中当前层与其上采样并高斯模糊后的上一层图像之间的差异。这个差异图像包含了当前层特有的细节信息,即那些在上采样过程中无法从上一层恢复的信息。

二、下采样(Downsampling)

下采样是高斯金字塔构建过程中的一个重要环节,其目的是减小图像的分辨率,从而生成金字塔的下一层图像。下采样的具体步骤通常包括:

  • 高斯模糊:首先,对原始图像或当前层的图像进行高斯模糊处理。高斯模糊是一种减少图像噪声和细节的方法,它通过使用高斯函数作为权重函数来对图像进行平滑处理。
  • 下采样:在高斯模糊之后,进行亚采样操作。亚采样通常是通过删除图像的偶数行和偶数列(或其他规则的间隔采样)来实现的,这样处理后的图像面积将是原图的四分之一。亚采样操作进一步减小了图像的分辨率,为构建金字塔的下一层提供了基础。

通过不断重复上述步骤,可以构建出高斯金字塔的多个层级,每个层级的图像分辨率逐渐降低,但保留了图像的主要结构和特征。

三、上采样(Upsampling)

与下采样相反,上采样是增加图像分辨率的过程,通常用于从金字塔的较低层级重建较高层级的图像。然而,在高斯金字塔中,上采样并不是直接用于构建金字塔的,而是与其他技术(如拉普拉斯金字塔)结合使用,以实现图像的放大和细节恢复。

在高斯金字塔的上下文中,上采样通常涉及以下步骤:

  • 插值:首先,将图像的每个方向(通常是行和列)扩大为原来的两倍。新增的行和列通常使用零值或其他插值方法(如双线性插值、双三次插值等)进行填充。
  • 卷积:然后,使用与下采样时相同或相似的高斯核对放大后的图像进行卷积处理,以平滑图像并减少插值产生的锯齿效应。

四、代码实现

1.图像读取

jijia_yuan = cv2.imread('3.png', cv2.IMREAD_GRAYSCALE)jijia = cv2.resize(jijia_yuan, (720, 408))
cv2.imshow('jijia', jijia)
cv2.waitKey(0)

图像读取与调整大小:
使用cv2.imread()读取图像,并指定cv2.IMREAD_GRAYSCALE以灰度模式读取。
使用cv2.resize()将图像调整为720x408的大小,以适应显示或后续处理的需要。

2.下采样

jijia_down_1 = cv2.pyrDown(jijia)  # 下采样
cv2.imshow('down1', jijia_down_1)
cv2.waitKey(0)
jijia_down_2 = cv2.pyrDown(jijia_down_1)
cv2.imshow('down2', jijia_down_2)
cv2.waitKey(0)

高斯金字塔的下采样:
cv2.pyrDown()函数用于构建高斯金字塔的下采样层级。它首先用高斯核对图像进行卷积,然后删除图像的偶数行和列,从而减小图像尺寸(通常是宽和高都减半)。
您对jijia进行了两次下采样,生成了jijia_down_1和jijia_down_2。

3.上采样

jijia_up_1 = cv2.pyrUp(jijia)
cv2.imshow('up1', jijia_up_1)
cv2.waitKey(0)
jijia_up_2 = cv2.pyrUp(jijia_up_1)
cv2.imshow('up2', jijia_up_2)
cv2.waitKey(0)

高斯金字塔的上采样:
cv2.pyrUp()函数用于对图像进行上采样,通常是高斯金字塔下采样操作的逆过程。它通过插入零值(通常称为零填充)并在新的行和列之间应用插值来增加图像的尺寸(通常是宽和高都加倍)。
但请注意,cv2.pyrUp()并不是cv2.pyrDown()的完全逆操作,因为在下采样过程中丢失的信息无法恢复。因此,直接对下采样后的图像进行上采样会导致图像变得模糊。

4.拉普拉斯金字塔

# 对下采样后图像进行上采样,图像变模糊,无法复原
jijia_down_1_up = cv2.pyrUp(jijia_down_1)
jijia_down_2_up = cv2.pyrUp(jijia_down_2)cv2.imshow('down_up1', jijia_down_1_up)
cv2.imshow('down_up2', jijia_down_2_up)
cv2.waitKey(0)
# 拉普拉斯金字塔
l0 = jijia - jijia_down_1_up
l1 = jijia_down_1 - jijia_down_2_upfuyuan = jijia_down_1_up + l0
cv2.imshow('l0', l0)
cv2.imshow('l1', l1)
cv2.imshow('fuyuan', fuyuan)
cv2.waitKey(0)
cv2.destroyAllWindows()

拉普拉斯金字塔的尝试:
拉普拉斯金字塔用于捕捉高斯金字塔中相邻层级之间的差异,即细节损失。
计算l0和l1,它们分别是jijia与jijia_down_1_up、jijia_down_1与jijia_down_2_up之间的差异。然而,由于jijia_down_1_up和jijia_down_2_up是上采样后的图像,它们无法完全复原下采样前的图像细节,因此l0和l1包含了这种细节损失的表示。

五、应用

上下采样在图像处理中有多种应用,包括图像缩放、图像金字塔构建、图像压缩等。图像金字塔是一种多分辨率的图像表示,其中图像被逐步下采样以形成不同尺度的表示。图像金字塔在图像融合、图像匹配、图像分割等任务中非常有用。

在图像压缩中,下采样可以减少图像的冗余信息,而上采样则可以在解压缩时恢复图像到原始尺寸(尽管细节可能有所损失)。然而,现代的图像压缩算法通常使用更复杂的编码和解码技术来最小化这种损失。

相关文章:

OpenCV-上下采样

文章目录 一,简介二、下采样(Downsampling)三、上采样(Upsampling)四、代码实现1.图像读取2.下采样3.上采样4.拉普拉斯金字塔 五、应用 一,简介 高斯金字塔是图像处理、计算机视觉和信号处理中常用的一项技…...

pip install、yum install和conda install三者技术区分

pip install、yum install和conda install在安装系统环境时可以从以下几个方面进行区分选择: 一、适用范围 pip install 主要用于安装 Python 包。适用于 Python 项目中特定的库和工具的安装。如果你的项目是纯 Python 开发,并且需要安装各种 Python 库&…...

【C++指南】作用域限定符 :: 使用详解

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 1. 访问全局变量 2. 命名空间中的成员访问 3. 类的静态成员访问 4. 嵌套命名空间/类中的…...

项目实训:CSS基本布局理解——WEB开发系列38

对CSS学习已经接近尾声,下面你可以对以下两道“小卡拉米”测试进行测试下CSS理解程度。 题 1:基于栅格布局的现代博客首页设计 题目要求: 创建一个博客首页布局,包含一个顶部导航栏、一个主要的内容区域(左侧为博客文…...

springBoot整合easyexcel实现导入、导出功能

本次使用的框架是springboot&#xff0c;使用mybatisplus操作表&#xff0c;使用easyexcel实现表格的导入与导出。 操作步骤 1、导入依赖&#xff1a;&#xff08;pom.xml&#xff09; <!-- 查看excel的maven仓库 https://mvnrepository.com/artifact/com.alibaba/easyex…...

代码随想录训练营第35天|逆序背包

46. 携带研究材料 #include <iostream> #include <vector> using namespace std; int main(){int m,n;cin>>m>>n;vector<int> weights(m,0), values(m,0),dp(n1,0);for(int i0; i<m; i){cin>>weights[i];}for(int i0; i<m; i){cin…...

Centos7环境下Hive的安装

Centos7环境下Hive的安装 前言一、安装Hive1.1 下载并解压1.2 配置环境变量1.3 修改配置1. hive-env.sh2. hive-site.xml 1.4 拷贝数据库驱动1.5 初始化元数据库报错 1.6 安装MySQL1.7 启动 二、HiveServer2/beeline2.1 修改Hadoop配置2.2 修改Hive配置2.2 启动hiveserver22.3 …...

??Ansible——ad-hoc

文章目录 一、ad-hoc介绍二、ad-hoc的使用1、语法2、ad-hoc常用模块1&#xff09;shell模块2&#xff09;command模块3&#xff09;script模块4&#xff09;file模块5&#xff09;copy模块6&#xff09;yum模块7&#xff09;yum-repository模块8&#xff09;service模块9&#…...

清理Go/Rust编译时产生的缓存

Go Mac 1T的磁盘频频空间高级&#xff0c;发现是/Users/yourname/Library/Caches/go-build 目录占用了大量空间。 此目录保存来自 Go 构建系统的缓存构建工件。 如果目录太大&#xff0c;请运行go clean -cache。 运行go clean -fuzzcache以删除模糊缓存。 当时直接手工清理了…...

【linux】 ls命令

ls 命令是 Linux 和 Unix 系统中用于列出目录内容的命令。它显示指定目录下的文件和子目录列表。如果不指定目录&#xff0c;ls 默认显示当前目录下的内容。 基本用法 ls [选项] [文件或目录...] 无选项&#xff1a;简单地列出当前目录下的文件和目录。文件或目录&#xff1…...

STM32的寄存器深度解析

目录 一、STM32 寄存器概述 二、寄存器的定义与作用 三、寄存器分类 1.内核寄存器 2.外设寄存器 四、重要寄存器详解 1.GPIO 相关寄存器 2.定时器相关寄存器 3.中断相关寄存器 4.RCC 相关寄存器 五、寄存器操作方法 1.直接操作寄存器 2.使用库函数操作寄存器 六…...

win11 运行vmware workstation 虚拟机很卡,解决办法

本身win11的hyper V和vmare workstation有兼容性问题&#xff0c;正常来说&#xff0c;不能二者共存 需要在win11上流畅运行vmare虚拟机&#xff0c;需要在win11用管理员权限打开power shell 然后在里面运行命令: bcdedit /set hypervisorlaunchtype off powercfg /powerthr…...

C语言 | Leetcode C语言题解之第404题左叶子之和

题目&#xff1a; 题解&#xff1a; bool isLeafNode(struct TreeNode *node) {return !node->left && !node->right; }int sumOfLeftLeaves(struct TreeNode *root) {if (!root) {return 0;}struct TreeNode **q malloc(sizeof(struct TreeNode *) * 2001);in…...

jeesite支持db2数据库初始化sql

点击下载&#xff1a;jeesite5.8.1-db2-sql.rar 提取码: yqev...

微信小程序页面制作——婚礼邀请函(含代码)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

股票量化接口api,国内股票期权怎么交易

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…...

Spring解决循环依赖的原理

通过将自己注入自己&#xff0c;使用代理对象调用add方法解决了事务失效问题&#xff0c;但是这样不会产生循环依赖吗&#xff1f; 在OrdersCreateServiceImpl 中注入的是OrdersCreateServiceImpl 的代理对象&#xff0c;并不是OrdersCreateServiceImpl 本身实例&#xff0c;构…...

Openal o1初探

9 月 13 日&#xff0c;OpenAI 正式公开一系列全新 AI 大模型&#xff0c;传说的“草莓”终于上线&#xff0c;但是正式命名不叫“草莓”&#xff0c;而是o1。 一、为什么叫o1 为什么取名叫o1&#xff0c;OpenAI是这么说的&#xff1a; For complex reasoning tasks this is…...

基于python+django+vue的学生成绩管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…...

mimd 公平收敛在相图中的细节

aimd 的收敛已经说腻了&#xff0c;我曾经画了好几次相图。有朋友希望我能画一个 mimd 相图&#xff0c;我就再画一个稍微详细的。 下面相图收敛到稳定点的前提异步 mimd&#xff1a; 之所以要异步&#xff0c;举个例子&#xff0c;在执行 gx 时&#xff0c;要确保 y 已经执…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...