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

时间:2015-04-30 03:42:20

标签: math image-processing graphics gaussian imaging

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

  • 将输入采样到下一个2 ^ m + 1,2 ^ n + 1前面
  • 填充偶数行。究竟怎么样?它不会改变信号吗?
  • 将偶数行移半个样本?它不会松散半个样品吗?

有人有这方面的经验吗?什么是最实用和最有效的方法?此外,任何有关此问题的论文都会受到欢迎。

1 个答案:

答案 0 :(得分:3)

一种方法是创建宽度和高度等于下一个2 ^ m + 1,2 ^ n + 1的图像,但不是对图像进行上采样以填充展开的尺寸,只需将其放入左上角并使用常量值向右和向下填充空白区域(图像的平均值是一个很好的选择)。然后以正常方式编码,将原始图像尺寸与金字塔一起存储。解码,解码然后裁剪为原始大小。

这不会引入任何视觉瑕疵或降级,因为您不会以任何方式拉伸或偏移图像。

由于原始图像右侧和下方的空白区域是一个常数值,因此图像金字塔中每个级别的高通条带将在此区域全为零。因此,如果您使用像运行长度编码这样的压缩方案来存储每个级别,那么这将自动处理掉,这些区域将被压缩到几乎为零。如果没有,则可以简单地存储每个级别的左上角(可能非零)区域,然后在解码时用零填充其余区域。

您可以找到每个级别的非零值的最小和最大x和y边界矩形,并将其与级别一起存储,裁剪为仅包含非零值。解码器也可以进行优化,以便通过仅处理每个级别的左上角,首先实际解码将要被裁剪掉的图像区域。

以下是该技术的说明:

enter image description here

您可以使用平面颜色填充右下区域,而不是在图像的右侧和下方填充图像的水平和垂直镜像副本,而是在两个方向上镜像到右下角,如同这样:

enter image description here

这将避免第一种技术的不连续性,尽管dx将存在不连续性(例如,如果该值从左向右逐渐增加,则它将突然减少)。选择保持dx恒定且ddx为零的镜像将通过线性外推值来避免这种二阶不连续性。

另一种类似于某些JPEG编码器将图像填充到整个MCU块的技术,是采用每行的最后一个像素值并重复它,同样对于列,使用底部用于填充右下区域的图像的最右侧像素:

enter image description here

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