估计高斯平滑的迭代次数

信息处理 平滑 高斯
2022-02-13 22:46:05

我有一些数据集,我使用[1 4 6 4 1]内核对其应用了高斯平滑。在我的程序中,我在数据集上迭代了这个内核 50 次。但只有少数能保持形状,大部分只是变平,失去了所有的图案

我想知道有什么方法可以估计每个数据集的平滑迭代次数吗?

我应该对数据集及其平滑版本使用归一化平方误差,还是在两者之间使用任何类型的相关性?

1个回答

简答

只需为给定的 sigma 计算一个高斯模糊核,然后执行 2D 卷积或两个 1D 卷积的单次迭代(对于行,然后对于列,反之亦然)。

不要忘记规范化内核!

如果内核出来太大(它通常被裁剪为3σ),计算频域中的卷积(即IFT(FT(image) *. FT(kernel)),其中*.是逐点乘法)。

如果您不关心精度,您可以应用盒式过滤器的多次迭代(迭代次数越多,越接近高斯模糊,但出现的模糊越多)。你可以在SVG Specs中找到一个很好的定义箱形滤波器是可分离的(可以作为两个 1D 滤波完成)并且可以通过运行总和来实现(滤波器大小不是问题)——这可能是最快的近似平滑方法。

长答案

因为你有整数内核,它只是高斯的近似值。想象一下应用source_kernel50 次后会发生什么,相当于应用了target_kernel一次:

target_kernel = IFT( FT(source_kernel) ^. 50 )

其中^.50是逐点幂函数。

要了解有关迭代方法的更多信息,请注意高斯模糊相当于在图像上应用热方程(想象一下“热”像素如何扩散到更暗、​​更冷的像素中)。

在图像的情况下,热方程是偏微分方程 (PDE)。

您可以通过指定用于模拟散热的时间量,然后以小时间步长应用热量方程来应用一定量的平滑。我不知道时间量与高斯有何关系σ,但您可能会在任何介绍性材料中找到使用 PDE 进行扩散图像过滤的更多信息。

每个时间步都需要计算每个像素的有限差分并应用一个小模板——它有点类似于卷积。

这种迭代方法称为隐式过滤,可以为您提供非常精确的平滑量(精度受时间步长的限制)。

显式公式也存在,但需要求解非常大的方程组。

这种滤波更适用于更复杂的问题,如各向异性扩散、逆问题、全变分去噪等。