OpenCV SIFT源码讲解——构建高斯金字塔

article/2025/8/15 18:21:31

目录

一、构建方法

 二、函数重要点注释


一、构建方法

        高斯金字塔每层图像的尺度为:\sigma =\sigma_{0}2^{o+\frac{layer}{S}}。理论上金字塔每层图像可以从原图做\sigma的高斯滤波得到。但是实际操作中,每组的第一张影像(除第一组)是上一组倒数第三张影像降采样得到,其他影像是对前一张图像做一定大小的高斯滤波得到,而不是直接从原图获取。

        因此,需要求取每组内影像间的高斯平滑尺度。假设前一张影像尺度为\sigma_{f}=\sigma_{0}2^{o+\frac{layer}{S}},那么下一张尺度应该为\sigma_{l}=\sigma_{0}2^{o+\frac{layer+1}{S}}\sigma_{l}\sigma_{f}有公式:\sigma_{diff}=\sqrt{\sigma_{l}^{2}-\sigma_{f}^2}。 \sigma_{diff}即为从前一张图层到当前图层所需的高斯滤波尺度。 \sigma_{l}\sigma_{f}可根据金字塔层数求得。

        对于每组的相同层影像,其\sigma_{diff}相同。

 二、函数重要点注释

void SIFT_Impl::buildGaussianPyramid( const Mat& base, std::vector<Mat>& pyr, int nOctaves ) const
{CV_TRACE_FUNCTION();/**    存储从前一张影像到当前影像所做的高斯滤波尺度,*    对于每一组,大小都一样*/  std::vector<double> sig(nOctaveLayers + 3);pyr.resize(nOctaves*(nOctaveLayers + 3));// precompute Gaussian sigmas using the following formula://  \sigma_{total}^2 = \sigma_{i}^2 + \sigma_{i-1}^2sig[0] = sigma;double k = std::pow( 2., 1. / nOctaveLayers );for( int i = 1; i < nOctaveLayers + 3; i++ ){/**    sig_prev:前一张影像的空间尺度*    sig_total:当前影像的空间尺度*    sig[i]:前一张影像到当前影像,需要做的高斯滤波大小*/    double sig_prev = std::pow(k, (double)(i-1))*sigma;double sig_total = sig_prev*k;sig[i] = std::sqrt(sig_total*sig_total - sig_prev*sig_prev);}/**    构建高斯金字塔*/for( int o = 0; o < nOctaves; o++ ){for( int i = 0; i < nOctaveLayers + 3; i++ ){Mat& dst = pyr[o*(nOctaveLayers + 3) + i];/**        如果是金字塔的第一张影像,*    使用图像预处理步骤获得的结果*        如或是其他组的第一张影像,*    使用上一组的倒数第三张影像降采样*        如果不是每组的第一张影像,*    进行高斯滤波*/if( o == 0  &&  i == 0 )dst = base;// base of new octave is halved image from end of previous octaveelse if( i == 0 ){const Mat& src = pyr[(o-1)*(nOctaveLayers + 3) + nOctaveLayers];resize(src, dst, Size(src.cols/2, src.rows/2),0, 0, INTER_NEAREST);}else{const Mat& src = pyr[o*(nOctaveLayers + 3) + i-1];GaussianBlur(src, dst, Size(), sig[i], sig[i]);}}}
}


http://chatgpt.dhexx.cn/article/gY8qIIOw.shtml

相关文章

OpenCV中的图像金字塔(高斯金字塔、拉普拉斯金字塔)

最近在看关于数字图像的知识点&#xff0c;目前在图像金字塔部分&#xff0c;实在是懒得用手作笔记了&#xff0c;就以其中比较出名的“高斯金字塔”和“拉普拉斯金字塔”为例&#xff0c;基于OpenCV的源代码作解析存个档&#xff1b;毕竟属于基础部分&#xff0c;以后有需要就…

python 高斯金字塔_Python OpenCV 之图像金字塔,高斯金字塔与拉普拉斯金字塔

Python OpenCV 365 天学习计划&#xff0c;与橡皮擦一起进入图像领域吧。 基础知识铺垫 学习图像金字塔&#xff0c;发现网上的资料比较多&#xff0c;检索起来比较轻松。 图像金字塔是一张图像多尺度的表达&#xff0c;或者可以理解成一张图像不同分辨率展示。 金字塔越底层的…

图像金字塔和高斯金字塔

一&#xff1a;图像金字塔 图像金字塔是图像中多尺度表达的一种&#xff0c;最主要用于图像的分割&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。图像金字塔实际上是一张图片在不同尺度下的集合&#xff0c;即原图的上采样和下采样集合。金字塔的底部是高分辨…

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

图像金字塔 一个图像金字塔是由一系列的图像组成&#xff0c;最底下一张是图像尺寸最大&#xff0c;最上方的图像尺寸最小&#xff0c;从空间上从上向下看就像一个古代的金字塔。金字塔的底部是待处理图像的高分辨率表示&#xff0c;而顶部是低分辨率的近似。我们将一层一层的…

高斯金字塔与拉普拉斯金字塔的原理与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…