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

OpenCv高阶(一)——图像金字塔(上采样、下采样)

目录

图像金字塔

一、上下采样原理

1、向下取样

2、向上采样

3、图像金字塔的作用

二、案例实现

1、高斯下采样

2、高斯金字塔中的上采样

3、对下采样的结果做上采样,图像变模糊,无法复原

4、拉普拉斯金字塔(图片复原)


图像金字塔

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

        下采样 是一种减小图像尺寸的方法,它通常涉及到降低图像的分辨率,即减少图像中像素的数量,从而使图像看起来更小。

        上采样 是一种增大图像尺寸的方法,它通过插值和滤波技术来恢复图像的分辨率和细节,通常用于图像放大或者与下采样后的图像进行比较。 resize函数 是一种通用的图像尺寸调整方法,它可以按照指定的目标尺寸来缩放图像,不涉及金字塔结构或者特定的滤波操作。

一、上下采样原理

1、向下取样

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

做法:  

         1、高斯滤波       

         2、删除其偶数行和偶数列

        OpenCV函数cv2.pyrDown()

2、向上采样

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

        1、插值       

         2、高斯滤波

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

dst = cv2.pyrUp( src[, dstsize[, borderType]]

3、图像金字塔的作用

         特征点提取(SIFT、HOG、ORB等)

                · 模板匹配

                · 光流跟踪

二、案例实现

将图片显示封装到一个函数中

import cv2
import matplotlib.pyplot as plt
import numpy as npdef cv_show(name,value):cv2.imshow(name,value)cv2.waitKey(0)

1、高斯下采样

cv2.pyrDown()下采样函数

dst = cv2.pyrDown(src [,dst, dstsize [, borderType] ])

dst:目标图像

src:原始图像

dstsize:目标图像的大小

face=cv2.imread('../data/face.png')
# face=cv2.resize(face,dsize=None,fx=0.5,fy=0.5)    #如果图片显示过大,可以使用这个设置图片大小
cv2.imshow('face',face)
cv2.waitKey(0)#对原图片进行下采样
face_down_1=cv2.pyrDown(face)
cv_show('down_1',face_down_1)#对第一次下采样的结果再次下采样处理
face_down_2=cv2.pyrDown(face_down_1)
cv_show('down_2',face_down_2)

效果:

依次做下采样,发现图片越来越模糊,是因为下采样会丢失掉数据。

2、高斯金字塔中的上采样

cv.pyUp()上采样函数

dst = cv2.pyrUp(src [,dst, dstsize [, borderType] ])
dst:目标图像
src:原始图像
dstsize:目标图像的大小
#对原图进行上采样处理
face_up_1=cv2.pyrUp(face)
cv_show('face_up_1',face_up_1)#对上采样处理过的图像再做一次上采样
face_up_2=cv2.pyrUp(face_up_1)
cv_show('face_up_2',face_up_2)

3、对下采样的结果做上采样,图像变模糊,无法复原

face_down_1_up=cv2.pyrUp(face_down_1)    #下采样G1face_down_2_up=cv2.pyrUp(face_down_2)    #下采样G2cv_show('down_1_up',face_down_1_up)
cv_show('down_2_up',face_down_2_up)

效果: 

对原图做一次下采样一次上采样,这时图片就恢复到与原图同样的大小,与原图做对照发现通过对下采样的数据上采样得到的结果更加模糊了,是因为下采样会丢失掉数据

4、拉普拉斯金字塔(图片复原)

找出下采样原图丢失的数据,复原丢失数据的图像,使图像更加清晰

为了在向上采样是能够恢复具有较高分辨率的原始图像,就要获取在采样过程中所丢失的信息,这些丢失的信息就构成了拉普拉斯金字塔。 也是拉普拉斯金字塔是有向下采样时丢失的信息构成。

拉普拉斯金字塔的定义

Li = Gi – pyrUp(pyrdown(Gi)) 式中:

        Li:表示拉普拉斯金字塔中的第i层       

        Gi:表示高斯金字塔中的第i层       

        Gi+1 表示高斯金字塔中的第 i+1 层。

对原图做一次下采样再对下采样的结果做一次上采样,这时虽然与原图大小相同但是经过采样图像丢失了一部分数据

拉普拉斯金字塔的原理是原图-下采样再上采样,这时就得到了丢失的数据,将丢失的数据加到下采样再上采样上就可以将这个图像复原。

L0=face-face_down_1_up
L1=face_down_1-face_down_2_up
fuyuan=face_down_1_up+L0
cv_show('L0',L0)
cv_show('L1',L1)
cv_show('fuyuan',fuyuan)

效果:下面的图片就是原图做下采样丢失掉的数据点

相关文章:

OpenCv高阶(一)——图像金字塔(上采样、下采样)

目录 图像金字塔 一、上下采样原理 1、向下取样 2、向上采样 3、图像金字塔的作用 二、案例实现 1、高斯下采样 2、高斯金字塔中的上采样 3、对下采样的结果做上采样,图像变模糊,无法复原 4、拉普拉斯金字塔(图片复原) 图…...

LEARNING DYNAMICS OF LLM FINETUNING【论文阅读笔记】

LEARNING DYNAMICS OF LLM FINETUNING 一句话总结 作者将LLM的学习动力机制拆解成AKG三项,并分别观察了SFT和DPO训练过程中​​正梯度信号​​和​​负梯度信号​​的变化及其带来的影响,并得到以下结论: ​​SFT通过梯度相似性间接提升无关…...

数据集 | 沥青路面缺陷目标检测

文章目录 一、数据集概述1. 行业痛点与数据集价值2. 数据集技术规格 二、样本类别详解1. 裂缝 (Crack)2. 裂缝修补 (Crack Repair)3. 坑洞 (Pothole)4. 坑洞修补 (Pothole Repair)5. 井盖 (Manhole Cover)6. 其他 (Other) 三、标注工具四、下载地址 一、数据集概述 1. 行业痛点…...

AllData数据中台升级发布 | 支持K8S数据平台2.0版本

🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。 ✨杭州奥零数据科技官网&#xf…...

第二十二: go与k8s、docker相关编写dockerfile

实战演示k8s部署go服务,实现滚动更新、重新创建、蓝绿部署、金丝雀发布-CSDN博客 go 编写k8s命令: 怎么在go语言中编写k8s命令 • Worktile社区 k8s中如何使用go 在K8s编程中如何使用Go-阿里云开发者社区 go build - o : -o:指定输出文件…...

Python及C++中的字典

一、Python中的字典 (一)基本概念 字典(dict)是Python中一种可变容器模型,用于存储键值对(key:value)。字典的键必须是不可变类型(如字符串、数字或元组),而…...

.net Core 和 .net freamwork 调用 deepseek api 使用流输出文本(对话补全)

.net Core 调用 deepseek api 使用流输出文本 简下面直接上代码(.net core):最后再贴一个 .net Freamwork 4 可以用的代码TLS 的代码至关重要的:(下面这个) 简 在官网里面有许多的案例:我们通过…...

[特殊字符] 第十三讲 | 地统计模拟与空间不确定性评估

📘 专栏:科研统计方法实战分享 | 地学/农学人的数据分析工具箱 ✍️ 作者:平常心0715 🎯 关键词:地统计模拟、随机函数、空间不确定性、条件模拟、SGS、R语言 🧠 核心导语 在现实数据有限、空间异质性强的…...

springcloud整理

问题1.服务拆分后如何进行服务之间的调用 我们该如何跨服务调用,准确的说,如何在cart-service中获取item-service服务中的提供的商品数据呢? 解决办法:Spring给我们提供了一个RestTemplate的API,可以方便的实现Http请…...

04-算法打卡-数组-二分查找-leetcode(69)-第四天

1 题目地址 69. x 的平方根 - 力扣(LeetCode)69. x 的平方根 - 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内…...

[Windows] 字体渲染 mactype v2025.4.11

[Windows] 字体渲染 mactype 链接:https://pan.xunlei.com/s/VONeCUP2hEgO5WIQImgtGUmrA1?pwdyruf# 025.4.11 Variable font support 可变字体支持已到来。 本版本将可变字体支持扩展到所有 GDI 应用程序。 所有 win32 程序中的字体,如 Noto Sans、Se…...

VSCode CMake调试CPP程序

文章目录 1 安装C与CMake插件2 配置CMakeLists.txt3 使用CMake编译调试3.1 编译3.2 调试 4 自定义构建调试参考 1 安装C与CMake插件 C插件 CMake插件 2 配置CMakeLists.txt 编写测试程序 #include<iostream>int main(int argc, char const *argv[]) {int a 1, b 2;i…...

MySQL数据过滤、转换与标准化

数据处理是数据库操作的重要组成部分&#xff0c;尤其是在大量数据中查找、转换和规范化目标信息的过程中。为了确保数据的有效性与一致性&#xff0c;MySQL提供了一系列数据过滤、转换与标准化的功能。 本教程将深入探讨数据过滤和转换的基本方法及应用&#xff0c;内容涵盖数…...

Halo 设置 GitHub - OAuth2 认证指南

在当今数字化时代&#xff0c;用户认证的便捷性和安全性愈发重要。对于使用 Halo 搭建个人博客或网站的开发者而言&#xff0c;引入 GitHub - OAuth2 认证能够极大地提升用户登录体验。今天&#xff0c;我们就来详细探讨一下如何在 Halo 中设置 GitHub - OAuth2 认证。 一、为…...

【unity游戏开发——Animator动画】Animator动画状态机复用——重写动画控制器 Animator Override Controller

注意&#xff1a;考虑到UGUI的内容比较多&#xff0c;我将UGUI的内容分开&#xff0c;并全部整合放在【unity游戏开发——Animator动画】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 一、状态机复用是什么&#xff1f;二、实战专栏推荐完结 一、状态机复…...

C语言--汉诺塔问题

汉诺塔问题是一个典型的递归问题。 递归问题的基本思想&#xff1a;将问题逐步化简为相同思路但是规模更小的问题&#xff0c;直到问题可以直接解决 递归的关键在于基准情形和递归步骤&#xff0c;基准情形也就是退出条件&#xff0c;递归步骤也就是把问题简化为子问题的过程。…...

301.找出3位偶数

2094. 找出 3 位偶数 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<Integer> resnew ArrayList<>();List<Integer> linew ArrayList<>();public int[] findEvenNumbers(int[] digits) {Arrays.sort(digits);boolean[] numsnew boolea…...

使用Python从零开始构建端到端文本到图像 Transformer大模型

简介&#xff1a;通过特征向量从文本生成图像 回顾&#xff1a;多模态 Transformer 在使用Python从零实现一个端到端多模态 Transformer大模型中&#xff0c;我们调整了字符级 Transformer 以处理图像&#xff08;通过 ResNet 特征&#xff09;和文本提示&#xff0c;用于视觉…...

comfyui点击执行没反应一例

以前只遇到过执行工作流时出错的情况&#xff0c;从没试过说点了执行后一点反应都没有的情况。 今天下载 蓝色多脑盒《一键同时换头、换脸、发型、发色之双pulid技巧》分享的工作&#xff0c;第一次发现点击执行没反应。 发现左下角的地方连接错乱了。 更正连接后工作流能正常…...

01-libVLC的视频播放器:环境搭建以及介绍

项目展示项目播放器 VLC简介VLC媒体播放器(VideoLAN Client)是一款开源、跨平台的自由多媒体播放器,由VideoLAN项目开发。它支持众多音频与视频格式(如MPEG-2、MPEG-4、H.264、MKV、WebM、WMV、MP3等),以及DVD、VCD和各种流媒体协议。 VLC的特点跨平台支持:Windows、mac…...

用css画一条弧线

ui里有一条弧线&#xff0c;现在用css实现 关键代码 border-bottom-left-radius: 100% 7px 两个参数分别代表横向和纵向的深度border-bottom-right-radius: 100% 7px...

FPGA上实现SD卡连续多块读的命令

在FPGA上实现SD卡连续多块读的命令 CMD17命令一次只能读取1个块 CMD18命令一次可以连续读取多个块&#xff0c;直到停止命令CMD12 CMD18命令读的块数程序可任意设置 目录 前言 一、SD卡多块读命令CMD18 二、停止读命令CMD12 三、SD卡初始化SD卡连续块读操作的verilog代码 …...

从原理图到成品:PCBA设计的常见陷阱与规避方法

在电子设计领域&#xff0c;从原理图到PCBA&#xff08;Printed Circuit Board Assembly&#xff09;的转换过程中&#xff0c;布局布线是决定电路性能的关键环节。然而&#xff0c;许多工程师在实际操作中容易陷入一些常见误区&#xff0c;导致信号完整性、EMI&#xff08;电磁…...

强化学习信用分配——以RLHF为例分析

Section 1. 信用分配简介 在强化学习中&#xff0c;信用分配&#xff08;Credit Assignment&#xff09;是指确定某个动作或状态对最终奖励的具体贡献的过程。由于强化学习的奖励通常是延迟的&#xff08;Delayed Reward&#xff09;&#xff0c;比如围棋&#xff0c;只有在胜…...

.py文件和.ipynb文件的区别:完整教程

一、概述 Python开发者常用的两种文件格式.py和.ipynb各有特点&#xff0c;本教程将通过对比分析、代码示例和场景说明&#xff0c;帮助开发者全面理解二者的区别与联系。 二、核心区别对比 1. 文件格式本质 特性.ipynb文件.py文件文件类型JSON结构化文档纯文本文件存储内容…...

【AI】AI大模型发展史:从理论探索到技术爆发

一、早期探索阶段—理论与技术奠基 1.1 符号主义与连接主义的博弈 20世纪50-70年代&#xff0c;符号主义AI主导研究方向&#xff0c;通过专家系统模拟人类逻辑推理&#xff0c;但受限于计算能力和数据规模。80年代连接主义AI兴起&#xff0c;以神经网络为核心&#xff0c;反向…...

【项目管理】第11章 项目成本管理-- 知识点整理

相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 ​ ​ (二)知识笔记​ 第11章 项目成本管理 ​ 1.管理基础…...

初学STM32之编码器测速以及测频法的实现

资料来着江协科技 这篇是编码器测速&#xff0c;江科大的源码在测速的时候&#xff0c;定时器TIM2是一直在跑的&#xff0c;不受其它控的&#xff0c;它就一直隔1S读一次CNT的值。它也不管是否有输入信号。源码程序修改一下是可以实现对PWM信号以测频法的方式读取。 笔者稍微改…...

Linux 内核知识体系[1]

1 Linux内核知识体系 2.Linux内核学习路线 2.1基础知识准备 操作系统基础&#xff1a;了解操作系统的概念和基本原理&#xff0c;包括进程管理、内存管理、文件系统、输入输出等。 书籍&#xff1a;《操作系统&#xff1a;设计与实现》&#xff08;Andrew S. Tanenbaum&…...

408 计算机网络 知识点记忆(7)

前言 本文基于王道考研课程与湖科大计算机网络课程教学内容&#xff0c;系统梳理核心知识记忆点和框架&#xff0c;既为个人复习沉淀思考&#xff0c;亦希望能与同行者互助共进。&#xff08;PS&#xff1a;后续将持续迭代优化细节&#xff09; 往期内容 408 计算机网络 知识…...