一、高斯金字塔(图像尺度具有不变性)

为了让尺度体现其连续性,高斯金字塔在简单降采样的基础上加上了高斯滤波。将图像金字塔每层的一张图像使用不同参数做高斯模糊,使得金字塔的每层含有多张高斯模糊图像,将金字塔每层多张图像合称为一组(Octave),金字塔每层只有一组图像,组数和金字塔层数相等,使用下列公式计算,每组含有多张(也叫层Interval)图像。另外,降采样时,高斯金字塔上一组图像的初始图像(底层图像)是由前一组图像的倒数第三张图像隔点采样得到的。
ORBSLAM2 理论部分_高斯金字塔(二)
其中M,N为原图像的大小,t为塔顶图像的最小维数的对数值。如,对于大小为512512的图像,金字塔上各层图像的大小如表3.1所示,当塔顶图像为44时,n=7,当塔顶图像为2*2时,n=8。
nlevels幅不同比例的图像提取特征点总和作为这幅图像的oFAST特征点。

高斯金字塔(Gaussianpyramid) : 用来 向下 (图像倍数变小)采样,主要的图像金字塔。
要从金字塔第i层生成第i+1层(我们表示第i+1层为G_i+1),我们先要用高斯核对G_1进行卷积,然后删除所有偶数行和偶数列。当然的是,新得到图像面积会变为源图像的四分之一。按上述过程对输入图像G_0执行操作就可产生出整个金字塔。
高斯金字塔是通过高斯平滑亚采样获得一些列下采样图像,也就是说第K层高斯金字塔通过平滑、亚采样就可以获得K+1层高斯图像,高斯金字塔包含了一系列低通滤波器,其截至频率从上一层到下一层是以因子2逐渐增加,所以高斯金字塔可以跨越很大的频率范围。金字塔的图像如下:
ORBSLAM2 理论部分_高斯金字塔(二)
每一层都按从下到上的次序编号, 层级 G_i+1 (表示为 G_i+1尺寸小于第i层G_i)

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

<1> 对图像G_i进行高斯内核卷积

<2> 将所有偶数行和列去除

向下取样会逐渐丢失图像的信息

resize() 函数剖析

resize( )为OpenCV中专职调整图像大小的函数。

此函数将源图像精确地转换为指定尺寸的目标图像。如果源图像中设置了ROI(Region Of Interest ,感兴趣区域),那么resize( )函数会对源图像的ROI区域进行调整图像尺寸的操作,来输出到目标图像中。若目标图像中已经设置ROI区域,不难理解resize( )将会对源图像进行尺寸调整并填充到目标图像的ROI中。

很多时候,我们并不用考虑第二个参数dst的初始图像尺寸和类型(即直接定义一个Mat类型,不用对其初始化),因为其尺寸和类型可以由src,dsize,fx和fy 这其他的几个参数来确定

C++: void resize(InputArray src,OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
  • 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。
  • 第二个参数,OutputArray类型的dst输出图像,当其非零时,有着dsize(第三个参数)的尺寸,或者由src.size()计算出来。
  • 第三个参数,Size类型的dsize输出图像的大小;如果它等于零,由下式进行计算:
    ORBSLAM2 理论部分_高斯金字塔(二)
    其中,dsize,fx,fy都不能为0。
  • 第四个参数,double类型的fx,沿水平轴的缩放系数,有默认值0,且当其等于0时,由下式进行计算:
    ORBSLAM2 理论部分_高斯金字塔(二)
  • 第五个参数,double类型的fy,沿垂直轴的缩放系数,有默认值0,且当其等于0时,由下式进行计算:
    ORBSLAM2 理论部分_高斯金字塔(二)
    -第六个参数,int类型的interpolation,用于指定插值方式,默认为INTER_LINEAR(线性插值)。
    可选择的插值方法有:
    NTER_NEAREST - 最近邻插值
    INTER_LINEAR - 线性插值(默认值)
    INTER_AREA - 区域插值(利用像素区域关系的重采样插值)
    INTER_CUBIC –三次样条插值(超过4×4像素邻域内的双三次插值)
    INTER_LANCZOS4 -Lanczos插值(超过8×8像素邻域的Lanczos插值)

pyrDown()函数剖析

pyrDown( )函数的作用是向下采样并模糊一张图片,说白了就是缩小一张图片。

C++: void pyrDown(InputArray src,OutputArray dst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT)
  • 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。
  • 第二个参数,OutputArray类型的dst,输出图像,和源图片有一样的尺寸和类型。
  • 第三个参数,const Size&类型的dstsize,输出图像的大小;有默认值Size(),即默认情况下,由Size Size((src.cols+1)/2, (src.rows+1)/2)来进行计算,且一直需要满足下列条件:
    ORBSLAM2 理论部分_高斯金字塔(二)
    该pyrDown函数执行了高斯金字塔建造的向下采样的步骤。首先,它将源图像与如下内核做卷积运算:

ORBSLAM2 理论部分_高斯金字塔(二)
接着,它便通过对图像的偶数行和列做插值来进行向下采样操作。

ORBSLAM2 理论部分_高斯金字塔(二)

在orb_slam2中,为了实现特征尺度不变性采用了图像金字塔,金字塔的缩放因子为1.2,。其思路就是对原始图形(第0层)依次进行1/1.2缩放比例进行降采样得到共计8张图片(包括原始图像),然后 分别对得到的图像进行特征提取,并记录特征所在金字塔的第几层 ,这样得到一帧图像的特征点,如上图所示。ref:

相关文章:

  • 2022-12-23
  • 2022-02-03
  • 2022-12-23
  • 2022-01-04
  • 2021-05-22
  • 2021-08-20
猜你喜欢
  • 2021-11-20
  • 2021-11-23
  • 2021-12-03
  • 2021-06-16
  • 2022-01-08
  • 2021-05-26
  • 2022-12-23
相关资源
相似解决方案