计算机视觉全系列实战教程 (十四):图像金字塔(高斯金字塔、拉普拉斯金字塔)
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];}}
相关文章:
计算机视觉全系列实战教程 (十四):图像金字塔(高斯金字塔、拉普拉斯金字塔)
1.图像金字塔 (1)下采样 从G0 -> G1、G2、G3 step01:对图像Gi进行高斯核卷积操作(高斯滤波)step02:删除所有的偶数行和列 void cv::pyrDown(cv::Mat &imSrc, //输入图像cv::Mat &imDst, //下采样后的输出图像cv::Si…...
正确重写equals和hashcode方法
1. 重写的原因 如有个User对象如下: public class User {private String name;private Integer age; }如果不重写equals方法和hashcode方法,则: public static void main(String[] args) {User user1 new User("userA", 30);Us…...
数据质量管理-时效性管理
前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档,当前数据质量评价指标框架中包含6评价指标,在实际的数据治理过程中,存在一个关联性指标。7个指标中存在4个定性指标,3个定量指标; 定性指标&am…...
python 实例002 - 数据转换
题目: 有一组用例数据如下: cases [[case_id, case_title, url, data, excepted],[1, 用例1, www.baudi.com, 001, ok],[4, 用例4, www.baudi.com, 002, ok],[2, 用例2, www.baudi.com, 002, ok],[3, 用例3, www.baudi.com, 002, ok],[5, 用例5, www.ba…...
1.k8s:架构,组件,基础概念
目录 一、k8s了解 1.什么是k8s 2.为什么要k8s (1)部署方式演变 (2)k8s作用 (3)Mesos,Swarm,K8S三大平台对比 二、k8s架构、组件 1.k8s架构 2.k8s基础组件 3.k8s附加组件 …...
动态规划基础练习
我们需要先从数组较大的开始进行处理,每次考察上下左右的,比较当前存储的最大值和转移来的值,哪一个大一点 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std;int n, m; int a[105][105]; int addx[] { 0,…...
基于Java的地方废物回收机构管理系统
你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:Java技术,MIS的总体思想,MySQL数据库 工具:Eclipse,…...
Leetcode 450:删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先…...
Go 中使用map时注意的问题
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
english-works
前奏(prelude): To build up our body, our school sports meeting was held on our play ground last Thursday. All the students in my class took an active part in sports meeting. It began with an opening ceremony on the play g…...
Kubernetes面试整理-如何利用PodSecurityPolicies来提高集群的安全性?
PodSecurityPolicy (PSP) 是 Kubernetes 中用于定义和控制 Pod 安全配置的策略。通过 PSP,可以设置对 Pod 的一些安全约束条件,从而提高集群的安全性。虽然 PSP 从 Kubernetes 1.21 开始已被弃用,并在 1.25 版本中移除,但在一些旧版 Kubernetes 集群中,PSP 仍然是一个重要…...
YOLO网络结构特点收录
YOLO网络结构特点收录 YOLO(You Only Look Once)网络结构随着版本迭代不断进化,以下是一些关键版本的网络结构特点概述: YOLOv1 输入:将图像调整至固定尺寸,如448x448像素。骨干网络:初期版本…...
人生最有力,最棒的十句话!
人生最有力,最棒的十句话 1、允许一切事发生,所有一切发生的事不是你能阻挡了的,你接受,他也发生,你不接受,他也发生,你还不如坦然面对接受现实。 2、你焦虑的时候千万不要躺着啥也不干…...
ASUS华硕A豆14笔记本电脑I421EAYB,I421EQYB_ADOL14EA工厂模式原厂Win11系统安装包下载
适用型号:ADOL14EA笔记本I421EAYB、I421EQYB 链接:https://pan.baidu.com/s/1krU8m_lbApyUfZQo5E4cCQ?pwd0ewl 提取码:0ewl 华硕原装WIN11系统工厂安装包,带有MyASUS WinRE RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系…...
丙酮传感器TGS1820在呼吸气体丙酮含量分析检测中的应用
随着科技的进步,无创检测技术逐渐成为医疗保健领域的新宠。其中,基于呼吸气体的分析检测技术以其独特的优势受到了广泛关注。呼吸气中的挥发性有机化合物(VOCs)不仅为研究者们提供了关于人体健康状态的宝贵信息,而且它…...
全国今日油价查询-全国今日油价查询接口-API接口
关于油价的信息,以下是详细的分点表示和归纳: 最新油价调整: 时间:2024年6月28日0时 调整内容:汽油价格上调210元/吨,柴油价格上调200元/吨。 涨幅:加油站油价上涨0.16元/升-0.20元/升。 具体油…...
MT1568 学生成绩
题目 有3个学生,每个学生有3门课的成绩,从键盘输入数据,包括学号、姓名、三门课成绩,学号整型,姓名字符型,成绩实型,计算3门课程总平均成绩,以及平均分最高的学生信息。不考虑非法成…...
医院消防设施设备管理系统
医院为人员密集场所,且多为各类病患及其陪护人员,一旦发生火灾,人员疏散逃生困难,容易造成较严重的生命与财产损失。为规范医院的消防设施设备管理,通过凡尔码系统对医院消防设施设备进行信息化管理,提高医…...
[Go 微服务] go-micro + consul 的使用
文章目录 1.go-micro 介绍2.go-micro 的主要功能3.go-micro 安装4.go-micro 的使用4.1 创建服务端4.2 配置服务端 consul4.3 生成客户端 5.goodsinfo 服务5.1 服务端开发5.2 客户端开发 1.go-micro 介绍 Go Micro是一个简化分布式开发 的微服务生态系统,该系统为开…...
嵌入式网页服务实现
嵌入式网页服务的实现方式主要可以归纳为以下几种: 单片机Webchip网关: Webchip:作为专用网络接口芯片,独立于单片机与网关,通过SPI接口与MCU进行指令交互,并通过RS232、USB、Modem等接口与PC作为网关进行通…...
python---OpenCv(二),背景分离方法较有意思
目录 边界矩形 旋转矩形(最小外接矩形): 计算轮廓 找4个点的坐标 把浮点型转为Int 画轮廓 边界矩形--(最大外接矩形) 转灰度 找轮廓 找顶点 画矩形 显示 背景分离方法(这个很好玩,可以识别在动的物体) 边…...
java TCP服务器与客户端通信示例
目录 背景: TCP服务代码解析: TCP服务器的代码: 服务器程序的工作流程: TCP客户端代码解析 : TCP客户端代码: 客户端工作流程: 总结: 背景: 如何使用Java编程语言实现一个简单的TCP服务器和客户端。那么TCP是什么?TCP(Transmission Control Protocol&…...
【C++】构造函数和析构函数
目录 对象初始化-构造函数构造函数的分类构造函数的调用拷贝构造的应用构造函数调用规则深拷贝和浅拷贝初始化列表类对象作为类成员静态成员 对象释放-析构函数 对象初始化-构造函数 构造函数是类实例化的时候会自动调用的初始化函数,如果用户不写编译器会提供一个…...
Docker Compose:多容器应用的管理利器
在现代应用开发中,微服务架构已成为主流。管理和编排多个容器应用变得至关重要。Docker Compose 是一个强大的工具,通过一个简单的 YAML 文件定义和运行多容器应用。本文将详细介绍 Docker Compose 的基本概念、安装、用法以及一个实际的示例,…...
Leetcode - 133双周赛
目录 一,3190. 使所有元素都可以被 3 整除的最少操作数 二,3191. 使二进制数组全部等于 1 的最少操作次数 I 三,3192. 使二进制数组全部等于 1 的最少操作次数 II 四,3193. 统计逆序对的数目 一,3190. 使所有元素都…...
C++总结
...
汽车免拆诊断案例 | 2016 款吉利帝豪EV车无法加速
故障现象 一辆2016款吉利帝豪EV车,累计行驶里程约为28.4万km,车主反映车辆无法加速。 故障诊断 接车后路试,行驶约1 km,踩下加速踏板,无法加速,车速为20 km/h左右,同时组合仪表上的电机及控制…...
前端开发之webpack
安装与入门超详细!webpack入门教程(一)-腾讯云开发者社区-腾讯云...
将内容复制到剪贴板?分享 1 段优质 JS 代码片段!
大家好,我是大澈! 本文约 600 字,整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段 JS 代码片段,使用 Clipboard API 实现将内容复制到剪贴板。 老规矩,先阅读代码片段并思考,再看代码解析…...
MAS0902量产工具分享,MAS0902A开卡教程,MAS0901量产工具下载
MAS0902和MAS1102都是基于SATA3.2技术开发的DRAM-less SSD控制芯片,简单来说就是SATA协议无缓存主控。下面是我摸索的麦光黑金300 240G SSD开卡修复简易教程,也就是MAS0902量产过程: 注意:开卡转接线必须要用ASM1153E或JMS578主控…...
福建省建设执业资格管理注册中心网站/百度推广公司电话
1、Altium Designer文件导入Hyperlynx问题 众所周知AD的文件各大友厂商的文件对它都不咋友好~,很多SI、PI文件都不支持,但AD可以输出Hyperlynx文件供其使用、但也会存在一些问题。我遇到问题就是 AD中使用填充的铜皮在Hyperlynx中不识别,直接…...
wordpress视频教程下载/整合营销理论
求出前缀和, 那么以第x个元素结尾的最大异或值是max(sumx^sump)(1≤p<x), 用trie加速. 后缀同理, 然后扫一遍就OK了.时间复杂度O(31N)-----------------------------------------------------------------------#include<cstdio>#include<cstring>#include<a…...
wordpress客户表单数据库/百度seo系统
小猿“思前享后”为大家分享优质内容!————Share猿Hi大家好:我是Share猿,Share是英文(SHARE),猿是猿猴的猿,在微信公众号、微博、简书、掘金、今日头条、CSDN都可以通过搜索“Share猿”找到我,我等你哦&…...
酒店 手机网站模板/网站优化策略
Web前端入行门槛低、薪资高、发展前景好,已经成为近几年的热门岗位,很多人在想要转行时也会选择Web前端。想要学好Web前端,尤其是对于没有任何基础的新手来说,一定要找到好的学习方法和路线。Web前端人员要掌握HTML、CSS、JavaScr…...
个人网站可以直接做微信登陆吗/网络推广和运营的区别
cas112-27-6|三乙二醇/二缩三乙二醇/三甘醇|三乙二醇 透明液体 中文名:二缩三乙二醇 英文名:triethylene glycol 中文别名:三甘醇|三乙二醇 密度 1.10.1 g/cm3 沸点 288.00.0 C at 760 mmHg 熔点 −7 C(lit.) 分子式 C6H14O4 分子量 150.173 闪点 165.60.0 C 质量 15…...
合肥市人民政府网站集约化平台/网站模板搭建
WPF 显示当前系统时间 东西很简单,不过以前没见过的话,如果让人直接去实现,还得查查资料,用的东西很少 建一个WPF工程,当然silverlight也行,放置一个 TextBlock 在面板上 代码: <Grid x:Name…...