opencv学习-高斯金字塔和拉普拉斯金字塔

article/2025/8/15 18:22:12

图像金字塔

  • 一个图像金字塔是由一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就像一个古代的金字塔。
  • 金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。
  • 图像金字塔常用于图像缩放、图像重构、图像融合、图像增强技术中。

高斯金字塔

高斯金字塔是通过高斯平滑和亚采样获得一系列采样图像,也就是说第K层高斯金字塔通过平滑,亚采样就可以获得K+1层高斯图像,高斯金字塔包含了一系列低通滤波器,其截止频率从上一层到下一层是以因子2逐渐增加,所以高斯金字塔就可以跨越很大的频率范围,金字塔的图像如下:

在这里插入图片描述

另外,每一层都按从下到上的次序编号, 层级 G_i+1 (表示为 G_i+1尺寸小于第i层G_i)。

  1. 对图像的向下取样
    为了获取层级为 G_i+1 的金字塔图像,我们采用如下方法:

(1)对图像G_i进行高斯内核卷积(高斯模糊滤波,这样做既能保证高斯金字塔低通处理的性质,又能对图像进行平滑,使下采样得到的图像不至于出现边界缝隙)

(2)将所有偶数行和列去除

得到的图像即为G_i+1的图像,显而易见,结果图像只有原图的1/4。通过对输入图像G_i(原始图像)不停迭代以上步骤就会得到整个金字塔。同时我们也可以看到,向下取样会逐渐丢失图像的信息。

以上就是对图像的向下取样操作,即缩小图像

  1. 对图像的向上取样

    如果想放大图像,则需要通过向上取样操作得到,具体做法如下:

(1)将图像在每个方向扩大为原来的俩倍,新增的行和列以0填充

(2)使用先前同样的内核(乘以4)与放大后的图像卷积,获得新增像素的近似值

 得到的图像即为放大后的图像,但是与原来的图像相比会发觉比较模糊,因为在缩放的过程中已经丢失了一些信息,如 果想在缩小和放大整个过程中减少信息的丢失,这些数据形成了拉普拉斯金字塔。

在OpenCV中提供了函数pyrDown(),用于生成图像的上一层高斯金字塔。
函数pyrDown()的原型如下:

void cv::pyrDown(InputArray src,OutputArray dst,const Size & dstsize = Size(),int borderType = BORDER_DEFAULT )

参数说明:
src—输入图像
dst—输出图像,它的宽度和高度大致为src的1/2 ,具体精确的大小由第三个参数dstsize决定。
dstsize—目标图像的大小,默认值为Size((src.cols+1)/2, (src.rows+1)/2),自己指定时需要满足以下条件。

使用函数pyrDown()生成上一层高斯金字塔包含两个过程,即高斯核卷积(用于实现高斯模糊滤波)和下采样两个过程。
在这里插入图片描述

函数pyrDown()使用的高斯核如下:

在这里插入图片描述

拉普拉斯金字塔

拉普拉斯金字塔实际上是为了实现高斯金字塔的图像重建而存在的。它是在高斯金字塔的基础上生成的。拉普拉斯金字塔是高斯金字塔与其上一层通过上采样扩大后的差值图像,这里的上采样一般采用插值的方式进行。

下式是拉普拉斯金字塔第i层的数学定义:

在这里插入图片描述

在这里插入图片描述

也就是说,拉普拉斯金字塔是通过源图像减去先缩小后再放大的图像的一系列图像构成的
整个拉普拉斯金字塔运算过程可以通过下图来概括:
在这里插入图片描述
简化流程:
在这里插入图片描述
从上面的这幅图我们可以看出,第n层拉普拉斯图像实际上是第n层高斯图像与第n+1层高斯图像经上采样后的差值,由于高斯滤波器是一种低通滤波器,所以我们可以说某一级的拉普拉斯金字塔可以反映出其同级的高斯金字塔的高频分量。有些文献把拉普拉斯金字塔反映其同级高斯金字塔的高频分量的性质称为拉普拉斯金字塔的预测残差作用。

从上面拉普拉斯图像的生成过程我们可以看出,在利用高斯金字塔生成拉普拉斯金字塔的过程中,假设高斯金字塔为N层,则在计算第N层的拉普拉斯金字塔时我们还要额外计算出第N+1层的高斯金字塔才能进而计算出第N层的拉普拉斯金字塔。

OpenCV提供了函数pyrUp()用于帮助计算出拉普拉斯金字塔。通过它可以把第n层的高斯金字塔图像进行上采样后再进行高斯卷积模糊滤波操作。

函数pyrDown()的的原型如下:

void cv::pyrUp(InputArray src,OutputArray dst,const Size & dstsize = Size(),int borderType = BORDER_DEFAULT )

参数与pyrDown类似

实现代码:

#include <opencv2/opencv.hpp>
#include "opencv2\xfeatures2d.hpp"
#include <opencv2\imgproc\types_c.h>
#include <opencv2\videoio\legacy\constants_c.h>
#include<opencv2\xfeatures2d\nonfree.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/highgui/highgui.hpp>using namespace std;using namespace cv;
using namespace cv::xfeatures2d;int main()
{cv::Mat img = cv::imread("C:\\Users\\Administrator\\Downloads\\1.jpeg");cv::Mat G_0(img);cv::imshow("G_0", img);cv::Mat G_1;cv::pyrDown(G_0, G_1);cv::imshow("G_1", G_1);cv::Mat Pyrup_G_1;cv::pyrUp(G_1, Pyrup_G_1);cv::imshow("Pyrup_G_1", Pyrup_G_1);cv::Mat L_0;cv::subtract(G_0, Pyrup_G_1, L_0);cv::imshow("L_0", L_0);//以下几行代码是显示出第0层拉普拉斯金字塔的图像cv::Mat L_0_norm = L_0;cv::normalize(L_0, L_0_norm, 0, 255, cv::NORM_MINMAX);L_0_norm.convertTo(L_0_norm, CV_8U);cv::Mat L_0_norm_gray;cv::cvtColor(L_0_norm, L_0_norm_gray, cv::COLOR_BGR2GRAY);cv::imshow("L_0_norm_gray", L_0_norm_gray);//利用第1层高斯金字塔图像和第0层拉普拉斯金字塔图像重构第0层高斯金字塔//第0层高斯金字塔实际上就是原图cv::Mat G_0_reconstruction;cv::add(Pyrup_G_1, L_0, G_0_reconstruction, cv::Mat(), CV_16S);cv::normalize(G_0_reconstruction, G_0_reconstruction, 0, 255, cv::NORM_MINMAX);G_0_reconstruction.convertTo(G_0_reconstruction, CV_8U);cv::imshow("G_0_reconstruction", G_0_reconstruction);cv::waitKey(0);return 0;
}

效果图:
在这里插入图片描述

参考:
https://www.hhai.cc/thread-198-1-1.html
https://www.cnblogs.com/wyuzl/p/6294275.html
https://blog.csdn.net/weixin_44651073/article/details/126355704


http://chatgpt.dhexx.cn/article/0Khh0ueD.shtml

相关文章

高斯金字塔与拉普拉斯金字塔的原理与python构建

转载自:https://zhuanlan.zhihu.com/p/94014493 高斯金字塔和拉普拉斯金字塔【1】在图像相关领域应用广泛&#xff0c;尤其是图像融合和图像分割方面。本文从理论和opencv实现两个方面对两种金字塔进行了介绍&#xff0c;并给出了二者的视觉效果。 1、高斯金字塔 在计算机视觉…

图像金字塔、高斯金字塔、拉普拉斯金字塔是怎么回事?附利用拉普拉斯金字塔和高斯金字塔重构原图的Python-OpenCV代码

图像金字塔是对图像进行多分辨率表示的一种有效且简单的结构。 一个图像金字塔是一系列以金字塔形状排列的分辨率逐步降低的图像。图像金字塔的底部是待处理图像的高分辨率表示&#xff0c;而顶部是低分辨率表示。 图像金字塔有什么作用&#xff1f; 图像金字塔常用于图像缩放…

高斯金字塔

1、为什么要构建高斯金字塔 高斯金字塔模仿的是图像的不同的尺度&#xff0c;尺度应该怎样理解&#xff1f;对于一副图像&#xff0c;你近距离观察图像&#xff0c;与你在一米之外观察&#xff0c;看到的图像效果是不同的&#xff0c;前者比较清晰&#xff0c;后者比较模糊&am…

系统集成项目管理工程师知识点

信息化知识 在这个学时里&#xff0c;将学习有关信息化的许多知识点&#xff0c;这些知识点的试题大多出现在上午试 题中。这引起知识点主要是&#xff1a; &#xff08;1&#xff09;信息与信息化的定义。 &#xff08;2&#xff09;国家信息化发展战略&#xff08;2006-2020&…

快速了解Scala技术栈

http://www.infoq.com/cn/articles/scala-technology/ 我无可救药地成为了Scala的超级粉丝。在我使用Scala开发项目以及编写框架后&#xff0c;它就仿佛凝聚成为一个巨大的黑洞&#xff0c;吸引力使我不得不飞向它&#xff0c;以至于开始背离Java。固然Java 8为Java阵营增添了一…

一篇博客带你掌握pytorch基础,学以致用(包括张量创建,索引,切片,计算,Variable对象的创建,和梯度求解,再到激活函数的使用,神经网络的搭建、训练、优化、测试)

一篇博客带你掌握pytorch基础&#xff0c;学以致用 1.将numpy的 ndarray对象转换为pytorch的张量 在 Pytroch 中&#xff0c;Tensor 是一种包含单一数据类型元素的多维矩阵&#xff0c;译作张量。熟悉 numpy 的同学对这个定义应该感到很熟悉&#xff0c;就像ndarray一样&…

AI题目整理

文章目录 1、网络配置时batchsize的大小怎样设置?过小和过大分别有什么特点?2、设置学习率衰减的原因?3、有哪些分类算法?4、分类和回归的区别?5、请描述一下K-means聚类的过程?6、训练集、测试集、验证集的作用?7、请讲解一下k折交叉验证?8、分类和聚类的区别?9、讲述…

【深度学习】对迁移学习中域适应的理解和3种技术的介绍

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 1 『如何理解域适应』 域适应是计算机视觉的一个领域&#xff0c;我们的目标是在源数据集上训练一个神经网络&#xff0c;并确保在显著不同于源数据集的目标数据集上也有…

协议模糊的堆叠式Seq2seq注意模型

摘要--通过生成大量异常数据作为程序的输入&#xff0c;模糊测试是发现软件漏洞的有效方法。很难自动模糊协议&#xff0c;因为必须手动构造一个满足协议规范的模板以生成测试用例。在本文中&#xff0c;我们建立了堆叠的seq2seq注意模型来自动生成协议测试用例。Seq2seq-atten…

【推荐收藏】3.5万字图解Pandas

文章目录 第一部分&#xff1a;Pandas 展示技术提升1. 排序2.按多列排序3. 添加一列4. 快速元素搜索5. 按列连接&#xff08;join&#xff09;6.按列分组7. 数据透视表8、Pandas速度 第二部分. Series 和 Index索引(Index)按值查找元素缺失值比较追加、插入、删除统计数据重复数…

层次分析法原理及应用案例

层次分析法是指将一个复杂的多目标决策问题作为一个系统&#xff0c;将目标分解为多个目标或准则&#xff0c;进而分解为多指标&#xff08;或准则、约束&#xff09;的若干层次&#xff0c;通过定性指标模糊量化方法算出层次单排序&#xff08;权数&#xff09;和总排序&#…

论文研读-AI4VIS-可视化推荐-VizML: 一种基于机器学习的可视化推荐方法

VizML: 一种基于机器学习的可视化推荐方法 1 论文概述1.1 摘要1.2 引言 2 问题陈述3 相关工作3.1 基于规则的可视化推荐系统3.2 基于机器学习的可视化推荐系统 4 数据4.1 Plotly介绍4.2 数据描述和分析&#xff0c;收集和清理4.2 数据特征提取4.3 设计选择提取 5 方法5.1 特征处…

《python数据分析与挖掘实战》笔记第3章

文章目录 第3章&#xff1a;数据探索3.1、数据质量分析3.2、数据特征分析3.2.1、分布分析3.2.2、对比分析3.2.3、统计量分析1.集中趋势度量2.离中趋势度量 3.2.4、周期性分析3.2.5、贡献度分析3.2.6、相关性分析1. 直接绘制散点图2. 绘制散点图矩阵3. 计算相关系数 3.3、python…

对迁移学习中域适应的理解和3种技术的介绍

域适应是计算机视觉的一个领域&#xff0c;我们的目标是在源数据集上训练一个神经网络&#xff0c;并确保在显著不同于源数据集的目标数据集上也有良好的准确性。为了更好地理解域适应和它的应用&#xff0c;让我们先看看它的一些用例。 我们有很多不同用途的标准数据集&#…

基于1305变频器的几种变参数运行测试

该文主要用于学习归纳&#xff0c;因此会省略正规操作中很多步骤&#xff0c;详述原理。欢迎指正。 一. 设备参数 1305变频器一台(380-460V/9A/4.0KW/5HP)&#xff1b;三相异步交流电动机(1.5(2HP)/3.65A/380V/50Hz/1420rpm/4)&#xff0c;直流发电机组&#xff1b;计算机&am…

2022秋 | PTA编程训练(一)

目录 1.素数对猜想 2.数组元素循环右移问题 3.水仙花数 4.找出不是两个数组共有的元素 5.找鞍点 6.验证“哥德巴赫猜想” 7.黑洞数 8.装箱问题 9.IP地址转换 10.龟兔赛跑 1.素数对猜想 题目详情&#xff1a; 让我们定义dn​为&#xff1a;dn​pn1​−pn​&#xff0…

测试用例设计之正交表法详解

正交实验法的由来 拉丁方名称的由来 古希腊是一个多民族的国家,国王在检阅臣民时要求每个方队中每行有一个民族代表,每列也要有一个民族的代表。 数学家在设计方阵时,以每一个拉丁字母表示一个民族,所以设计的方阵称为拉丁方。 什么是n阶拉丁方? 用n个不同的拉丁字母排成一…

2018年华为数通技术大赛复赛拓扑题

正在准备华为杯的竞赛&#xff0c;期间的训练需要用心练习&#xff0c;希望我的这篇文章能对跟我一样的小伙伴们起到作用。在比赛之前&#xff0c;我们的目的都不是配通这个网络&#xff0c;而是在一次次错误中总结经验&#xff0c;你会受益匪浅&#xff01;不多说&#xff0c;…

华为网络技术比赛-云平台课件笔记

** &#xff08;一&#xff09;5 G ** 在这这张图片很重要啊&#xff01;&#xff01;&#xff01;&#xff01; 5G的子载波带宽是不固定的&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 注意&#xff1a; Massive MIMO &#xff08;1&a…

2022年金砖国家技能大赛-IT网络系统管理样题

2022年金砖国家技能大赛-IT网络系统管理(完整版) 1-网络构建部分 任务二:实现集团、北京数据中心、分公司、办事处的网络互联互通。 拓扑图: 2-项目实施: 一、完成模拟器组网,按照拓扑图搭建及命令,过程略。 二、完成交换部分配置: IDC2北京区域交换机 sysname…