三 (3.2 imgproc) 图像金字塔-图放大与缩小

一、背景

1.1.1 图像放大与缩小

  • 当我们需要将图像转换到另一个尺寸的时候, 有两种可能:
    1. 放大 图像 或者
    2. 缩小 图像。
  • 尽管OpenCV 几何变换 部分提供了一个真正意义上的图像缩放函数(resize, 在以后的教程中会学到),不过在本篇我们首先学习一下使用 图像金字塔 来做图像缩放, 图像金字塔是视觉运用中广泛采用的一项技术。
1.1.2 resize 与 pyrUp 和pyrDown 的差别
1.1.2.1 resize
C++: void resize(InputArray src, 
                 OutputArray dst, 
                 Size dsize, 
                 double fx=0, 
                 double fy=0, 
                 int interpolation=INTER_LINEAR )
  • src:原图
  • dst:目标图
  • dsize :dst图的size,当为零时,按照dsize = Size(round(fxsrc.cols), round(fysrc.rows))计算
  • fx:水平方向的比例。当为零,按照{(double)dsize.width/src.cols}计算
  • fy:垂直方向的比例。当为零,按照{(double)dsize.height/src.rows}计算
  • interpolation:插值方式。INTER_NEAREST、INTER_LINEAR、INTER_AREA 、INTER_CUBIC、INTER_LANCZOS4

dsize与fx和fy必须不能同时为零,也就是说要么dsize不为零而fx与fy同时可以为0,要么dsize为0而fx与fy不同时为0;resize函数的目标大小可以是任意的大小,可以不保持长宽比率,删除的像素或者新增的像素值通过interpolation控制。

1.1.2.2 图像金字塔
C++: void pyrDown(InputArray src, 
                  OutputArray dst, 
                  const Size& dstsize=Size())

使用pyrDown,先经过5*5的高斯滤波,输出图像宽度和高度应是输入图像的一半

C++: void pyrUp(InputArray src, 
                OutputArray dst, 
                const Size& dstsize=Size())

这两个操作实现图像金字塔的经典操作,他们仅仅是分别代表一次采样操作,也就是说,向下(或者向上)进行相邻层次的金字塔采样,调用一次pyrDown函数只能降低到原图像尺寸的1/2;反之,调用pyrUp目标图像则为原图像尺寸的2倍。因为它们内部都给定了一次采样尺寸的约束。也就是说采样之后,长宽比基本是不变的。

1.1.2.3 差别:

resize可以一次性将原图像变为任意不为0的尺寸,适合用来做归一化图像操作;而pyrDown与pyrUp适合做长宽比率不变得操作,且调用一次只能变为1/2或者2倍

1.2 图像处理中的高斯金字塔和拉普拉斯金字塔

图像处理中的高斯金字塔和拉普拉斯金字塔 - xbcReal的博客 - CSDN博客 https://blog.csdn.net/xbcreal/article/details/52629465
Sift中尺度空间、高斯金字塔、差分金字塔(DOG金字塔)、图像金字塔 - 心灵智者AI - 博客园 https://www.cnblogs.com/jiahenhe2/p/7919356.html

你可能感兴趣的:(三 (3.2 imgproc) 图像金字塔-图放大与缩小)