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,使用mybatisplus操作表,使用easyexcel实现表格的导入与导出。 操作步骤 1、导入依赖:(pom.xml) <!-- 查看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)shell模块2)command模块3)script模块4)file模块5)copy模块6)yum模块7)yum-repository模块8)service模块9&#…...

清理Go/Rust编译时产生的缓存
Go Mac 1T的磁盘频频空间高级,发现是/Users/yourname/Library/Caches/go-build 目录占用了大量空间。 此目录保存来自 Go 构建系统的缓存构建工件。 如果目录太大,请运行go clean -cache。 运行go clean -fuzzcache以删除模糊缓存。 当时直接手工清理了…...
【linux】 ls命令
ls 命令是 Linux 和 Unix 系统中用于列出目录内容的命令。它显示指定目录下的文件和子目录列表。如果不指定目录,ls 默认显示当前目录下的内容。 基本用法 ls [选项] [文件或目录...] 无选项:简单地列出当前目录下的文件和目录。文件或目录࿱…...

STM32的寄存器深度解析
目录 一、STM32 寄存器概述 二、寄存器的定义与作用 三、寄存器分类 1.内核寄存器 2.外设寄存器 四、重要寄存器详解 1.GPIO 相关寄存器 2.定时器相关寄存器 3.中断相关寄存器 4.RCC 相关寄存器 五、寄存器操作方法 1.直接操作寄存器 2.使用库函数操作寄存器 六…...
win11 运行vmware workstation 虚拟机很卡,解决办法
本身win11的hyper V和vmare workstation有兼容性问题,正常来说,不能二者共存 需要在win11上流畅运行vmare虚拟机,需要在win11用管理员权限打开power shell 然后在里面运行命令: bcdedit /set hypervisorlaunchtype off powercfg /powerthr…...

C语言 | Leetcode C语言题解之第404题左叶子之和
题目: 题解: 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
点击下载:jeesite5.8.1-db2-sql.rar 提取码: yqev...

微信小程序页面制作——婚礼邀请函(含代码)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
股票量化接口api,国内股票期权怎么交易
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...
Spring解决循环依赖的原理
通过将自己注入自己,使用代理对象调用add方法解决了事务失效问题,但是这样不会产生循环依赖吗? 在OrdersCreateServiceImpl 中注入的是OrdersCreateServiceImpl 的代理对象,并不是OrdersCreateServiceImpl 本身实例,构…...

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

基于python+django+vue的学生成绩管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…...

mimd 公平收敛在相图中的细节
aimd 的收敛已经说腻了,我曾经画了好几次相图。有朋友希望我能画一个 mimd 相图,我就再画一个稍微详细的。 下面相图收敛到稳定点的前提异步 mimd: 之所以要异步,举个例子,在执行 gx 时,要确保 y 已经执…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...