B08 - 图像处理 - 图像金字塔

图像金字塔的原理及应用

什么是图像金字塔?

  • 图像金字塔是图像的集合,所有图像都来自单个原始图像,这些图像被连续下采样,直到达到某个所需的停止点
  • 有两种常见的图像金字塔,高斯金字塔:用于对图像进行缩减采样;拉普拉斯金字塔:用于从金字塔中较低的图像(分辨率较低)重建上采样图像
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    img = cv2.imread("../images/imgLena.tif", flags=1)
    # 图像向下取样
    pyrD0 = img.copy()
    pyrD1 = cv2.pyrDown(pyrD0)
    pyrD2 = cv2.pyrDown(pyrD1)
    pyrD3 = cv2.pyrDown(pyrD2)
    show_images([pyrD0,pyrD1,pyrD2,pyrD3])
    # 图像向上取样
    pyrU3 = pyrD3.copy()
    pyrU2 = cv2.pyrUp(pyrU3)
    pyrU1 = cv2.pyrUp(pyrU2)
    pyrU0 = cv2.pyrUp(pyrU1)
    show_images([pyrU0,pyrU1,pyrU2,pyrU3])

什么是高斯金字塔?

  • 高斯金字塔用于下采样,即类似卷积的过程,采用高斯核对图像进行处理,如上图将原图往右逐渐减小 4 层
  • 注意:应用高斯金字塔后,无法 100% 还原真实图片,即 higher_reso 2!=img
    1
    2
    3
    img = cv.imread('messi5.jpg')
    lower_reso = cv.pyrDown(higher_reso)
    higher_reso2 = cv.pyrUp(lower_reso)

什么是拉普拉斯金字塔?

  • 拉普拉斯金子塔是由高斯金子塔生成,没有特有的拉普拉斯金字塔的函数。拉普拉斯金字塔图像更像是边界图像,它的大部分元素为零。常用于图像压缩,生成公式如下,其中 Li 表示第 i 层拉普拉斯图像,Gi 表示第 i 层的高斯金字塔图像,Up(Gi+1)表示对 Gi 的上采

Li=GiUpGi+1)L_\mathrm{i}=\mathrm{G}_\mathrm{i}-\mathrm{Up}\mathrm{G}_{\mathrm{i+1}})

图像金字塔的作用?

  • 特征点提取(SIFT、HOG、ORB 等):赋予特征点尺度不变性特点。相同的物体在不同距离下拍摄,在图像上呈现不同尺度的大小。那么在原图中构建图像金字塔,模拟这种不同距离拍摄的现象,由此提取的特征点也具有尺度不变性
  • 模板匹配:减少匹配时间,提高效率。对模板和待匹配图像分别做图像金字塔,先从金字塔尖的图像开始匹配,由于分辨率较小,所以匹配时间较短,接着在此位置基础上,在下一层该位置周围局部区域继续进行匹配,直到最后一层完成匹配
  • 光流跟踪:直接法跟踪,解决前后两帧相对运动距离过大的问题

图像金字塔应用于图像合成?

  • 由于图像噪声、光照、曝光度、模型匹配误差等因素,图像直接拼接合成会在图像重叠区域的拼接处出现明显的痕迹。图像融合的目的就是使两幅图像的重叠区域过渡自然且平滑
  • 拉普拉斯金字塔将源图像分解到不同的频带,越高频的图像信息越到上层。在相同显示尺寸下比较不同分辨率的拉普拉斯图像,可以发现不同尺度下关注的细节是不同的,低分辨率下关注的是较大尺度的基本纹理,而高分辨率下关注的是更精细的纹理
  • 因此,可以针对不同分解层的频带特征与细节,采用不同的融合算子以突出特定频带上特征与细节,也就可以将不同图像的特征与细节融合在一起

什么是差分金字塔?

  • 差分金字塔是在高斯金字塔的基础上构建起来的,其实生成高斯金字塔的目的就是为了构建 DOG 金字塔
  • DOG 金字塔的第 1 组第 1 层是由高斯金字塔的第 1 组第 2 层减第 1 组第 1 层得到的。以此类推

参考: