【计算机视觉系列实战教程 (十四)】:图像金字塔(高斯金字塔、拉普拉斯金字塔)

1.图像金字塔

在这里插入图片描述

(1)下采样

从G0 -> G1、G2、G3

  • step01:对图像Gi进行高斯核卷积操作(高斯滤波)
  • step02:删除所有的偶数行和列
void cv::pyrDown(cv::Mat &imSrc, //输入图像cv::Mat &imDst, //下采样后的输出图像cv::Size size = cv::Size(), //imDst的尺寸,默认是输入图像的1、2int borderType=4 //一般默认即可);

(2)上采样

从G3 -> G2、G1、G0

  • step01:将图像在每个方向上扩大为原图像的2倍,新增的行和列均用0来填充
  • step02:使用与“向下取样”相同的卷积核乘以4,再与放大后的图像进行卷积运算
void cv::pyrUp(cv::Mat &imSrc,cv::Mat &imDst,cv::Size size=cv::Size(), //默认位imSrc的2int borderType = 4);

2.高斯金字塔

(1)原理

高斯金字塔的构建就是迭代地对图像进行下采样,下采样的步骤如1中下采样的介绍

(2)How(如何构建高斯金字塔)

构建高斯金字塔函数如下(可直接使用):

/* @author @还下着雨ZG* @brief 根据传入的图像构建它的高斯金字塔* @param[in] imSrc, 输入的源图像* @param[out] vPyrGaussian, 输出的图像金字塔* @param[in] iLayer, 金字塔的层数* @return int, 正数表示金字塔构建成功,负数表示金字塔构建失败
*/
int GetPyrGaussian(const cv::Mat &imSrc, std::vector<cv::Mat>& vPyrGaussian,int iLayer)
{if (imSrc.empty())return -1;if (!vPyrGaussian.empty()){vPyrGaussian.clear();}if (iLayer <= 0)return -2;//下采样vPyrGaussian.resize(iLayer);cv::Mat imTmp;for (int i = 0; i < iLayer; ++i){if (i == 0)vPyrGaussian[i] = imSrc;else {cv::pyrDown(vPyrGaussian[i-1], imTmp);vPyrGaussian[i] = imTmp;}}return 1;
}

3拉普拉斯图像金字塔

(1)What(什么是拉普拉斯图)

拉普拉斯图是基于高斯图的,拉普拉斯图的本质是残差,即第i层的高斯图 - 先缩小后放大的图;不明白可直接看下面构建拉普拉斯图像金字塔函数。

(2)How(如何构建拉普拉斯图像金字塔)

构建拉普拉是图像金字塔,可直接使用:

/* @author @还下着雨ZG* @brief 基于高斯金字塔构建拉普拉斯金字塔* @param[in] vPyrGaussian, 输入的高斯图像金字塔* @param[out] vPyrLaplacian, 输出的拉普拉斯图像金字塔* @return int, 正数表示金字塔构建成功,负数表示金字塔构建失败
*/
int GetPyrLaplacian(const std::vector<cv::Mat>& vPyrGaussian,std::vector<cv::Mat>& vPyrLaplacian)
{/*对输入参数及其约束关系进行检查*/if (vPyrGaussian.empty())return -1;if (!vPyrLaplacian.empty())vPyrLaplacian.clear();/*构建拉普拉斯金字塔*/cv::Mat imLplTmp;for (int i = 0; i < vPyrGaussian.size()-1; ++i){cv::Mat imTmp(vPyrGaussian[i].size(), vPyrGaussian[i].type());cv::pyrUp(vPyrGaussian[i + 1], imTmp);imLplTmp = vPyrGaussian[i] - imTmp;vPyrLaplacian.push_back(imLplTmp);}return 1;
}

(3)使用opencv自带的函数获取拉普拉斯图像

void cv::Laplacian(cv::Mat &imSrc, //输入图像cv::Mat &imLpl, //输出的拉普拉斯图像int ddepth, //imLpl的数据格式int ksize =1, double scale=1, //拉普拉斯值的缩放值double delta = 0, //偏置值int borderType = BORDER_DEFAULT);

(4)使用拉普拉斯金字塔恢复原图

cv::Mat imRead = cv::imread(strPth01);
std::vector<cv::Mat> vPyrGaussian;
std::vector<cv::Mat> vPyrLaplacian;
int iFlagGssn = GetPyrGaussian(imRead, vPyrGaussian, 3);
if (iFlagGssn < 0) return;
int iFlagLpl = GetPyrLaplacian(vPyrGaussian, vPyrLaplacian);//利用拉普拉斯金字塔图进行图像复原
cv::Mat imMin = vPyrGaussian[vPyrGaussian.size() - 1];
for (int i = 0; i < vPyrLaplacian.size(); ++i)
{if (i == 0){cv::pyrUp(imMin, imMin);imMin += vPyrLaplacian[vPyrLaplacian.size() - 1 - i];}else{cv::pyrUp(imMin, imMin);imMin += vPyrLaplacian[vPyrLaplacian.size() - 1 - i];}}

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

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

相关文章

在SpringBoot 3.0环境下创建一个SpringBoot 项目

一、环境配置 1.专业版的IDEA 版本号&#xff1a;尽量选择不要太老&#xff0c;不要太早 这里以2023.3.1为例。 官网&#xff1a;Download IntelliJ IDEA – The Leading Java and Kotlin IDE (jetbrains.com) 破解版&#xff1a;网上找资料哦&#xff01;&#xff01;&#…

《人生苦短,我用python·七》各种报错问题解决及C++调用python的接口

1、VS的debug版本正常可以调用python的release版本&#xff08;python安装完只有release版本的dll和lib&#xff09;&#xff0c;在项目——附加依赖项中加入python39.lib然后编译debug版本报错&#xff0c;无法打开python39_d.lib&#xff0c;我在项目属性配置的是调用release…

程序员学长 | 当 LSTM 遇上 Attention

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;当 LSTM 遇上 Attention 今天我们一起来聊一下深度学习中的注意力&#xff08;Attention&#xff09;机制 注意力机制是深度学习中引入的一种技术&am…

「前端」快速排序算法演示

快速排序算法演示。 布局描述 一个简单的HTML页面,用户可以在其中输入一系列用逗号分隔的数字。 一个CSS样式表,提供了一个美观大方的布局和样式。 一个JavaScript脚本,实现了快速排序算法,并在用户点击按钮时对输入的数字进行排序,并显示结果。 效果演示 核心代码 <…

Mysql-基础-DDL操作

1、数据库操作 查询 查询所有数据库 show databases; 创建 创建数据库 create database [if not exists] 数据库名 使用及查询 use 数据库名 select database() 查询当前所处数据库 删除 drop database [if not exists] 数据库名 2、表操作 查询当前库中的所…

【ArcGIS Pro 加载项】修复图层名为要素类别名

ArcPro从目录添加要素类至内容列表&#xff0c;图层名称默认为要素类别名。 但是一番操作之后&#xff0c;这个图层名称可能会被你改了&#xff0c;想复原的话就要手动去图层属性里面复制要素类名称或者别名来重命名了&#xff0c;多少有点不方便。 所以小编通过SDK制作了这个…

python3.8安装详细教程

python3.8下载及安装详细教程 Python 3.8 是一个重要的Python版本&#xff0c;它引入了一系列新功能和改进。以下是对Python 3.8的详细概述&#xff0c;包括其关键特性、安装方法以及版本状态等信息。 Python 3.8的关键特性 海象运算符&#xff08;Walrus Operator&#xff09…

工程文件参考——CubeMX+LL库+SPI主机 阻塞式通用库

文章目录 前言CubeMX配置SPI驱动实现spi_driver.hspi_driver.c 额外的接口补充 前言 SPI&#xff0c;想了很久没想明白其DMA或者IT比较好用的方法&#xff0c;可能之后也会写一个 我个人使用场景大数据流不多&#xff0c;如果是大批量数据交互自然是DMA更好用&#xff0c;但考…

reggie外卖优化

文章目录 一、redis缓存1.1 缓存验证码1.2 缓存菜品数据 二、spring-cache 一、redis缓存 1.1 缓存验证码 不用sesiion&#xff0c;而使用redis来存放验证码。 首先在用户请求验证码&#xff0c;将验证码保存在sesion中&#xff0c;当登录成功之后&#xff0c;将redis中的验证…

Tekla Structures钢结构详图设计软件下载;Tekla Structures高效、准确的合作平台

Tekla Structures&#xff0c;它不仅集成了先进的三维建模技术&#xff0c;还融入了丰富的工程实践经验&#xff0c;为设计师、工程师和建筑商提供了一个高效、准确的合作平台。 在建筑项目的整个生命周期中&#xff0c;Tekla Structures都发挥着举足轻重的作用。从规划阶段开始…

录音转文字软件免费版哪个好?6个转文字工具让你轻松记录

随着小暑的到来&#xff0c;炎热的天气容易让人心浮气躁&#xff0c;影响工作效率。 在这个季节里&#xff0c;掌握一些办公技巧尤为关键。尤其是当我们需要整理会议记录或讲座内容时&#xff0c;如果能有一种方法&#xff0c;可以迅速将那些冗长的录音转换成清晰的文字&#…

使用Retrofit2+OkHttp监听上传或者下载进度会执行两次的问题

使用Retrofit2OkHttp监听上传或者下载进度RequestBody#writeTo/ResponseBody#source 会执行两次的问题 example&#xff1a; 问题原因&#xff1a; 使用了HttpLoggingInterceptor拦截器&#xff0c;并且日志等级为HttpLoggingInterceptor.Level.BODY 问题解决&#xff1a;

一个opencv实现检测程序

引言 图像处理是计算机视觉中的一个重要领域&#xff0c;它在许多应用中扮演着关键角色&#xff0c;如自动驾驶、医疗图像分析和人脸识别等。边缘检测是图像处理中的基本任务之一&#xff0c;它用于识别图像中的显著边界。本文将通过一个基于 Python 和 OpenCV 的示例程序&…

Python学习速成必备知识,(20道练习题)!

基础题练习 1、打印出1-100之间的所有偶数&#xff1a; for num in range(1, 101):if num % 2 0:print(num) 2、打印出用户输入的字符串的长度&#xff1a; string input("请输入一个字符串&#xff1a;")print("字符串的长度为&#xff1a;", len(str…

excel表格如何换行,这几个操作方法要收藏好

Excel表格作为一款强大的数据处理工具&#xff0c;在日常工作和生活中被广泛应用。当需要在单元格内显示较长的文本内容或使数据更加清晰易读时&#xff0c;我们需要掌握一些换行技巧。下面将介绍几种常用的Excel换行方法&#xff1a; 一、使用快捷键换行 1、首先&#xff0c;…

暑假学习DevEco Studio第一天

学习目标&#xff1a; 掌握构建第一个ArkTS应用 学习内容&#xff1a; 容器的应用 创建流程 点击file&#xff0c;new-> create project 点击empty ->next 进入配置界面 点击finsh&#xff0c;生成下面图片 这里需要注意记住index.ets &#xff0c;这是显示页面 –…

五款免费可视化利器分享,助力打造数字孪生新体验!

在当今数据驱动的时代&#xff0c;可视化工具已成为各行各业不可或缺的助手。它们不仅能帮助我们更好地理解和分析数据&#xff0c;还能以直观、生动的方式呈现复杂信息&#xff0c;提升沟通和决策效率。本文将为大家介绍五款免费的可视化工具&#xff0c;总有一款适合你。 一…

如何做好企业品牌推广,看这篇文章就够了

在当今竞争激烈的市场环境中&#xff0c;品牌推广策略与方式成为企业成功的关键。因为相比起企业&#xff0c;消费者会更愿意为品牌买单。那么企业如何将品牌推广做好呢?今日投媒网与您分享。 1.明确品牌定位与目标受众 一切推广活动的起点在于清晰的品牌定位。首先&#xf…

SolrCloud Autoscaling 自动添加副本

SolrCloud Autoscaling 自动添加副本 前言 问题描述 起因是这样的&#xff0c;我在本地调试 Solr 源码&#xff08;版本 7.7.3&#xff09;&#xff0c;用 IDEA 以 solrcloud 方式启动了 2 个 Solr 服务&#xff0c;如下所示&#xff1a; 上图的启动参数 VM Options 如下&am…

RocketMQ实战:一键在docker中搭建rocketmq和doshboard环境

在本篇博客中&#xff0c;我们将详细介绍如何在 Docker 环境中一键部署 RocketMQ 和其 Dashboard。这个过程基于一个预配置的 Docker Compose 文件&#xff0c;使得部署变得简单高效。 项目介绍 该项目提供了一套 Docker Compose 配置&#xff0c;用于快速部署 RocketMQ 及其…