高斯金字塔

news/2024/9/19 15:39:16

1、为什么要构建高斯金字塔

高斯金字塔模仿的是图像的不同的尺度,尺度应该怎样理解?对于一副图像,你近距离观察图像,与你在一米之外观察,看到的图像效果是不同的,前者比较清晰,后者比较模糊,前者比较大,后者比较小,通过前者能看到图像的一些细节信息,通过后者能看到图像的一些轮廓的信息,这就是图像的尺度,图像的尺度是自然存在的,并不是人为创造的。好了,到这里我们明白了,其实以前对一幅图像的处理还是比较单调的,因为我们的关注点只落在二维空间,并没有考虑到“图像的纵深”这样一个概念,如果将这些内容考虑进去我们是不是会得到更多以前在二维空间中没有得到的信息呢?于是高斯金字塔横空出世了,它就是为了在二维图像的基础之上,榨取出图像中自然存在的另一个维度:尺度。因为高斯核是唯一的线性核,也就是说使用高斯核对图像模糊不会引入其他噪声,因此就选用了高斯核来构建图像的尺度。

2、高斯金字塔的构建步骤:

高斯金字塔构建过程中,一般首先将图像扩大一倍,在扩大的图像的基础之上构建高斯金字塔,然后对该尺寸下图像进行高斯模糊,几幅模糊之后的图像集合构成了一个八度,然后对该八度下的最模糊的一幅图像进行下采样的过程,长和宽分别缩短一倍,图像面积变为原来四分之一。这幅图像就是下一个八度的初始图像,在初始图像图像的基础上完成属于这个八度的高斯模糊处理,以此类推完成整个算法所需要的所有八度(octave)构建,这样这个高斯金字塔就构建出来了。构建出的金字塔如下图所示:

注意:

1.在同一组内,不同层图像的尺寸是一样的,后一层图像的高斯平滑因子σ是前一层图像平滑因子的k倍;k=2^(1/s);s为想要得到的尺度结果;

2.在不同组内,后一组第一个图像是前一组倒数第三个图像的二分之一采样,图像大小是前一组的一半,尺度虽然保持不变,但是相当于扩大到了2倍,以此使尺度连续;

3.第一个八度的中图像的尺度分别是δ,kδ,k^2δ......,第二个八度的尺度分别是2δ,2kδ,2k^2δ........,同理第三个八度的尺度分别是4δ,4kδ,4k^2δ........。这个序列是通过下式来确定的:

3、源码实现

//金字塔每层多张图像合称为一组(Octave),金字塔每层只有一组图像,
//组数和金字塔层数相等,每组含有多张(也叫层Interval)图像。
//高斯金字塔
//https://blog.csdn.net/qq_44771627/article/details/123840316
void siftLou::GaussianPyramid(const Mat src, vector<Mat>& gauss_pyr, int octaves)
{//高斯金字塔构建过程中,一般首先将图像扩大一倍,在扩大的图像的基础之上构建高斯//金字塔,然后对该尺寸下图像进行高斯模糊,几幅模糊之后的图像集合构成了一个八度,//然后对该八度下的最模糊的一幅图像进行下采样的过程,长和宽分别缩短一倍,图像面//积变为原来四分之一。这幅图像就是下一个八度的初始图像,在初始图像图像的基础上//完成属于这个八度的高斯模糊处理,以此类推完成整个算法所需要的所有八度构建,这样//这个高斯金字塔就构建出来了。Mat dst;double  sigma_init = sqrt(SIGMA * SIGMA - (INIT_SIGMA) * (INIT_SIGMA));GaussianBlur(src, dst, Size(0, 0), sigma_init);int intervals = INTERVALS;double* sigmas = new double[intervals + 3];double k = pow(2.0, 1.0 / intervals);//每三个尺度一组进行匹配,因此想要得到3个尺度结果,就需要5个尺度拉普拉斯卷积和,//也就是6个高斯函数卷积的图像sigmas[0] = SIGMA;double sig_prev, sig_total;for (int i = 1; i < intervals + 3; i++){sig_prev = pow(k, i - 1) * SIGMA;sig_total = sig_prev * k;//为了降低运算,将大尺度的高斯算子拆分为2个小尺度高斯算子的卷积sigmas[i] = sqrt(sig_total * sig_total - sig_prev * sig_prev);}for (int o = 0; o < octaves; o++){//每组多三层for (int i = 0; i < intervals + 3; i++){Mat mat;if (o == 0 && i == 0){mat=dst.clone();}else if (o != 0 && i == 0){//前一组的倒数第三张图像:k^3*sigma=2*sigma,所以对它下采样会得到连续的尺度结果//尺度虽然保持不变,但是相当于扩大到了2倍,等价于2*sigma,使得拉普拉斯尺度连续//mat=DownSample(gauss_pyr[o * (intervals + 3) - 3]);pyrDown(gauss_pyr[o*(intervals+3)-3],mat);}else{//每组中下一层由上一层高斯模糊得到GaussianBlur(gauss_pyr[(o * (intervals + 3) + i - 1)], mat, Size(0,0),(sigmas[i]));}gauss_pyr.push_back(mat);}}delete[] sigmas;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

PCL:点云中的超体素数据

-----------------------体素数据---------------------体素化网格 体素&#xff08;Voxel&#xff09;是体积元素&#xff08;Volume pixel&#xff09;的简称&#xff0c;是数据位于三维空间内规则网格上的最小单位&#xff0c;体素&#xff0c;其物理意义类似于二维图像像素…

和12岁小同志搞创客开发:如何选择合适的传感器?

目录 1、信号采集 2、信号输出 3、物美价廉 4、如何选型采购 机缘巧合在网上认识一位12岁小同志&#xff0c;从零开始系统辅导其创客开发思维和技巧。 项目专栏&#xff1a;https://blog.csdn.net/m0_38106923/category_11097422.html 人类有五觉&#xff1a;视觉、听觉、…

差分金字塔

1、原理 DOG金字塔的每1组第i层是由高斯金字塔的每1组第i1层减每1组第i层得到的。以此类推&#xff0c;逐组逐层生成每一个差分图像&#xff0c;所有差分图像构成差分金字塔&#xff1b;每一组在层数上&#xff0c;DOG金字塔比高斯金字塔少一层。 DOG金字塔的构建可以用下图描…

毕业设计So Easy:珠穆朗玛FM音频电台APP

目录 1、项目背景 2、系统介绍 2.1、系统概述 2.2、关键技术 2.3、环境配置 3、系统结构设计 3.1、播放器状态结构图 3.2、登录流程结构图 4、系统模块设计 5、系统总体架构 6、接口描述 很多计算机专业大学生经常和我交流&#xff1a;毕业设计没思路、不会做、论文…

机器学习中的数学基础:(1)实际应用中矩阵特征值与特征向量的几何意义

关于特征值、特征向量的讲解有很多的教程&#xff0c;对于这些枯燥的数学基础怎么运用到自己的实际计算机视觉实验中&#xff0c;是一项很重要的任务。算法的底层其实就是数学公式的各种结合与推导&#xff0c;有时间不是我们不能很好的去理解这些算法基础&#xff0c;而是没有…

JAVA电影购票系统

一、功能描述 电影购票系统简介、项目功能演示 日志框架搭建、系统角色分析 首页设计、登录、商家界面、用户界面实现 商家-详情页设计、影片上架、退出 商家-影片下架、影片修改 用户-展示全部影片 用户-购票功能 用户-评分功能 用户-评分降序展示 用户-根据片名查询全部影片信…

和12岁小同志搞创客开发:如何驱动各类型传感器?

目录 1、数字量输出类型传感器 2、数字量输入类型传感器 3、模拟量电压类型传感器 4、模拟量电流类型传感器 5、协议类型传感器 机缘巧合在网上认识一位12岁小同志&#xff0c;从零开始系统辅导其创客开发思维和技巧。 项目专栏&#xff1a;https://blog.csdn.net/m0_3810…

机器学习中的数学基础:(3)主成分分析(PCA)及其应用

主成分分析主要用于数据的降维&#xff1f;什么是降维&#xff1f; 比如说有如下的房价数据&#xff1a; 这种一维数据可以直接放在实数轴上&#xff1a; 房价样本数据用X表示&#xff0c;则以上数据的均值为&#xff1a; 以均值为原点&#xff1a; 将上述表格以均值&#xf…