一、背景
1.1.1 图像放大与缩小
- 当我们需要将图像转换到另一个尺寸的时候, 有两种可能:
- 放大 图像 或者
- 缩小 图像。
- 尽管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