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

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.rhkb.cn/news/364555.html

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

相关文章

第一节:如何开发第一个spring boot3.x项目(自学Spring boot 3.x的第一天)

大家好&#xff0c;我是网创有方&#xff0c;从今天开始&#xff0c;我会记录每篇我自学spring boot3.x的经验。只要我不偷懒&#xff0c;学完应该很快&#xff0c;哈哈&#xff0c;更新速度尽可能快&#xff0c;想和大佬们一块讨论&#xff0c;如果需要讨论的欢迎一起评论区留…

零基础开始学习鸿蒙开发-页面导航栏布局设计

1.设定初始页(Idex.ets) import {find} from ../pages/find import {home} from ../pages/home import {setting} from ../pages/setting Entry Component struct Index {private controller: TabsController new TabsController()State gridMargin: number 10State gridGut…

[图解]建模相关的基础知识-19

1 00:00:00,640 --> 00:00:04,900 前面讲了关系的这些范式 2 00:00:06,370 --> 00:00:11,570 对于我们建模思路来说&#xff0c;有什么样的作用 3 00:00:12,660 --> 00:00:15,230 我们建模的话&#xff0c;可以有两个思路 4 00:00:16,790 --> 00:00:20,600 一个…

项目实训-接口测试(十八)

项目实训-后端接口测试&#xff08;十八&#xff09; 文章目录 项目实训-后端接口测试&#xff08;十八&#xff09;1.概述2.测试对象3.测试一4.测试二 1.概述 本篇博客将记录我在后端接口测试中的工作。 2.测试对象 3.测试一 这段代码是一个单元测试方法&#xff0c;用于验证…

二叉树从根节点出发的所有路径

二叉树从根节点出发的所有路径 看上图中 二叉树结构 从根节点出发的所有路径 如下 6->4->2->1 6->4->2->3 6->4->5 6->8->7 6->8->9 逻辑思路&#xff1a; 按照先序遍历 加 回溯法 实现 代码如下 // 调用此方法&#xff0c;将根节点传递…

【Lua】第二篇:打印函数和注释

文章目录 一. 打印函数二. 注释方式1. 单行注释2. 多行注释 一. 打印函数 Lua 程序是以 .lua 结尾的文件&#xff0c;创建一个的 Test.lua 的文件&#xff0c;使用 print 函数输出字符串"Hello World"&#xff1a; print(Hello World) 保存之后使用命令lua 文件名编…

安卓开发自定义时间日期显示组件

安卓开发自定义时间日期显示组件 问题背景 实现时间和日期显示&#xff0c;左对齐和对齐两种效果&#xff0c;如下图所示&#xff1a; 问题分析 自定义view实现一般思路&#xff1a; &#xff08;1&#xff09;自定义一个View &#xff08;2&#xff09;编写values/attrs.…

如何用Go语言,实现基于宏系统的解释器?

目录 一、Go语言介绍二、什么是宏系统三、什么是解释器四、如何用Go语言实现一个基于宏系统的解释器&#xff1f; 一、Go语言介绍 Go语言&#xff0c;又称为Golang&#xff0c;是一种由谷歌公司开发并开源的编程语言。Go语言的设计目标是提高程序员的生产力&#xff0c;同时具…

Oracle、MySQL、PostGreSQL、SQL Server-空值

Oracle、MySQL、PostGreSQL、SQL Server-null value 最近几年数据库市场百花齐放&#xff0c;在做跨数据库迁移的数据库选型时&#xff0c;除了性能、稳定、安全、运维、功能、可扩展外&#xff0c;像开发中对于值的处理往往容易被人忽视&#xff0c; 之前写过一篇关于PG区别O…

2024年6月26日 (周三) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键&#xff0c;实现一键唤起、一键隐藏的 Windows 工具&#xff0c;并且支持窗口动态绑定快捷键&#xff08;无需设置自动实现&#xff09;。 土豆录屏: 免费、无录制时长限制、无水印的录屏软件 《Granblue Fantasy Versus: Risi…

Cisco Identity Services Engine (ISE) 3.3 Patch 2 - 基于身份的网络访问控制和策略实施系统

Cisco Identity Services Engine (ISE) 3.3 Patch 2 - 基于身份的网络访问控制和策略实施系统 思科身份服务引擎 (ISE) - 下一代 NAC 解决方案 请访问原文链接&#xff1a;Cisco Identity Services Engine (ISE) 3.3 Patch 2 - 基于身份的网络访问控制和策略实施系统&#xf…

笔灵AI写作:释放创意,提升写作效率的秘诀

内容为王&#xff0c;在内容创作的世界中尤为重要。然而&#xff0c;面对写作时常常感到无从下手&#xff1a;有时缺乏灵感&#xff0c;有时难以表达清楚自己的想法。AI写作助手的出现&#xff0c;为这些问题提供了创新的解决方案&#xff0c;极大地改变了内容创作的过程。 今…

STM32——使用TIM输出比较产生PWM波形控制舵机转角

一、输出比较简介&#xff1a; 只有高级定时器和通用寄存器才有输入捕获/输出比较电路&#xff0c;他们有四个CCR&#xff08;捕获/比较寄存器&#xff09;&#xff0c;共用一个CNT&#xff08;计数器&#xff09;&#xff0c;而输出比较功能是用来输出PWM波形的。 红圈部分…

C语言调用python

1、linux中安装libpython3.10-dev 通过C语言调用python代码&#xff0c;需要先安装libpython3的dev依赖库&#xff08;不同的ubuntu版本下&#xff0c;python版本可能会有差异&#xff0c; 比如ubuntu 22.04里是libpython3.10-dev&#xff09;。 首先可以通过以下命令验证…

数字信号处理实验一(离散信号及离散系统的MATLAB编程实现)

实验要求&#xff1a; 离散信号及离散系统的MATLAB编程实现&#xff08;2学时&#xff09; 要求&#xff1a; 编写一程序&#xff0c;输出一定长度&#xff08;点数&#xff09;&#xff0c;具有一定幅度、&#xff08;角&#xff09;频率和初始相位的实&#xff08;或复&…

gitee配置ssh教程

生成公钥 执行命令&#xff1a; ssh-keygen -t rsa查看公钥 cat ~/.ssh/id_rsa.pub这个公钥就是要复制粘贴到Gitee中的ssh公钥。 配置Gitee SSH公钥 来到Gitee的ssh公钥中&#xff0c;配置

ONLYOFFICE8.1版本桌面编辑器简单测评

ONLYOFFICE官网链接&#xff1a;在线PDF查看器和转换器 | ONLYOFFICE ONLYOFFICE介绍&#xff1a;https://www.onlyoffice.com/zh/office-suite.aspx OnlyOffice 是一款免费且开源的 Office 协作办公套件&#xff0c;支持桌面端和移动端等多平台&#xff0c;由一家领先的 IT 公…

热管的原理和棒芯的加工

当热管的一端受热时&#xff0c;毛细芯中的液体蒸发汽化&#xff0c;蒸汽在微小的压差下流向另一端&#xff0c;放出热量凝结成液体&#xff0c;液体再靠毛细力&#xff08;或重力&#xff09;的作用&#xff0c;沿多孔材料流回蒸发段。如此循环不已&#xff0c;热量便从一端传…

禁止浏览器对input的自动填充和填充提示(适用于谷歌、火狐、Edge(原IE浏览器)等常见浏览器)

目录 1.要解决的问题2.一技能&#xff1a;原生属性&#xff0c;小试牛刀3.二技能&#xff1a;傀儡input&#xff0c;瞒天过海4.三技能&#xff1a;JavaScript出击&#xff0c;直接开大5.九九八十一难&#xff0c;永远还有最后一难 写在前面&#xff1a; 如有转载&#xff0c;务…

labview排错

源代码正常跑&#xff0c;应用程序报这个错&#xff0c;是因为源代码的可以找到项目路径内所有dll的路径&#xff0c;而应用程序只能找到data文件夹的dll文件 解决查看源代码中.net的程序集的路径&#xff0c;复制对应的dll到data文件夹下 在执行developinterface.dll出现labv…