OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
图像金字塔

目标

理论

通常,我们习惯于处理恒定大小的图像。但在某些情况下,我们需要处理不同分辨率的(相同)图像。例如,在图像中搜索某物(如人脸)时,我们不确定对象在图像中呈现的大小。在这种情况下,我们需要创建一组具有不同分辨率的相同图像,并在所有图像中搜索对象。这些具有不同分辨率的图像集合称为图像金字塔(因为当它们以堆栈的形式保存时,最高分辨率的图像在底部,最低分辨率的图像在顶部,看起来像一个金字塔)。

图像金字塔有两种。 1) 高斯金字塔 和 2) 拉普拉斯金字塔

高斯金字塔中的较高层级(低分辨率)是通过移除较低层级(较高分辨率)图像中的连续行和列来形成的。然后,较高层级中的每个像素由底层中的 5 个像素以高斯权重贡献形成。通过这样做,一个 \(M \times N\) 图像变成 \(M/2 \times N/2\) 图像。因此,面积缩小到原始面积的四分之一。这称为一个 Octave。当我们向上移动金字塔时,相同的模式会继续(即,分辨率降低)。类似地,在扩展时,每个层级的面积变为原来的 4 倍。我们可以使用 cv.pyrDown()cv.pyrUp() 函数找到高斯金字塔。

拉普拉斯金字塔由高斯金字塔形成。没有专门的函数来执行此操作。拉普拉斯金字塔图像就像边缘图像一样。它的大多数元素都是零。它们用于图像压缩。拉普拉斯金字塔中的一个层级是由高斯金字塔中该层级与其在高斯金字塔中较高层级的扩展版本之间的差异形成的。

降采样

我们使用函数: cv.pyrDown (src, dst, dstsize = new cv.Size(0, 0), borderType = cv.BORDER_DEFAULT)

参数
src输入图像。
dst输出图像;它具有指定的尺寸并且与 src 具有相同的类型。
dstsize输出图像的尺寸。
borderType像素外推方法(参见 cv.BorderTypes, 不支持 cv.BORDER_CONSTANT)。

尝试一下

上采样

我们使用函数: cv.pyrUp (src, dst, dstsize = new cv.Size(0, 0), borderType = cv.BORDER_DEFAULT)

参数
src输入图像。
dst输出图像;它具有指定的尺寸并且与 src 具有相同的类型。
dstsize输出图像的尺寸。
borderType像素外推方法(参见 cv.BorderTypes, 仅支持 cv.BORDER_DEFAULT)。

尝试一下