如何处理拉普拉斯金字塔的任意大小?

How to deal with arbitrary size for Laplacian Pyramid?

最近对拉普拉斯金字塔算法(http://persci.mit.edu/pub_pdfs/pyramid83.pdf)玩得很开心。但一个大问题是原始论文仅限于 2^m+1*2^n+1 张图像。我的问题是:处理任意 w*h 的最佳方法是什么?我可以想到几个选项:

有人有这方面的经验吗?什么是最实用和有效的方法?也非常欢迎任何指向处理此问题的论文的指针。

一种方法是创建一个宽度和高度等于下一个 2^m+1,2^n+1 的图像,而不是 up-sampling 图像来填充展开的尺寸,只是将它放在 top-left 角,并用常量值填充右侧和下方的空白 space(图像的平均值是一个不错的选择)。然后以正常方式编码,将原始图像尺寸与金字塔一起存储。解码的时候先解码再裁剪成原来的大小

这不会引入任何视觉伪影或退化,因为您没有以任何方式拉伸或偏移图像。

因为原图右下方的空白space是一个常量值,所以图像金字塔中每一层的high-pass条带在该区域将全部为零。所以如果你使用像 运行 长度编码这样的压缩方案来存储每个级别,这将被自动处理并且这些区域将被压缩到几乎没有。如果不是那么你可以简单地存储每个级别的top-left(可能non-zero)区域,然后在解码时用零填充其余部分。

您可以找到每个级别的 non-zero 值的最小和最大 x 和 y 边界矩形,并将其与级别一起存储,裁剪为仅包含 non-zero 值。还可以优化解码器,以便仅处理每个级别的 top-left 来真正解码要被裁剪掉的图像区域。

下面是该技术的示例:

不只是用单一颜色填充 lower-right 区域,您可以在右侧和下方填充图像的水平和垂直镜像副本,以及在两个方向上镜像到 bottom-right,像这样:

这将避免第一种技术的不连续性,尽管 dx 会出现不连续性(例如,如果值从左到右逐渐增加,它会突然减少)。选择保持 dx 恒定且 ddx 为零的镜像将通过线性外推值来避免这种 second-order 不连续性。

另一种技术类似于某些 JPEG 编码器将图像填充到整数 MCU 块的方法,即获取每一行的最后一个像素值并重复它,对于列也是如此,使用用于填充 bottom-right 区域的 bottom-right- 图像的最大像素:

可以很容易地修改最后一项技术,以推断值的梯度甚至梯度的梯度,而不是仅仅为行或列的其余部分重复相同的值。