我有一些数据集,我使用[1 4 6 4 1]内核对其应用了高斯平滑。在我的程序中,我在数据集上迭代了这个内核 50 次。但只有少数能保持形状,大部分只是变平,失去了所有的图案
我想知道有什么方法可以估计每个数据集的平滑迭代次数吗?
我应该对数据集及其平滑版本使用归一化平方误差,还是在两者之间使用任何类型的相关性?
我有一些数据集,我使用[1 4 6 4 1]内核对其应用了高斯平滑。在我的程序中,我在数据集上迭代了这个内核 50 次。但只有少数能保持形状,大部分只是变平,失去了所有的图案
我想知道有什么方法可以估计每个数据集的平滑迭代次数吗?
我应该对数据集及其平滑版本使用归一化平方误差,还是在两者之间使用任何类型的相关性?
简答
只需为给定的 sigma 计算一个高斯模糊核,然后执行 2D 卷积或两个 1D 卷积的单次迭代(对于行,然后对于列,反之亦然)。
不要忘记规范化内核!
如果内核出来太大(它通常被裁剪为),计算频域中的卷积(即IFT(FT(image) *. FT(kernel)),其中*.是逐点乘法)。
如果您不关心精度,您可以应用盒式过滤器的多次迭代(迭代次数越多,越接近高斯模糊,但出现的模糊越多)。你可以在SVG Specs中找到一个很好的定义。箱形滤波器是可分离的(可以作为两个 1D 滤波完成)并且可以通过运行总和来实现(滤波器大小不是问题)——这可能是最快的近似平滑方法。
长答案
因为你有整数内核,它只是高斯的近似值。想象一下应用source_kernel50 次后会发生什么,相当于应用了target_kernel一次:
target_kernel = IFT( FT(source_kernel) ^. 50 )
其中^.50是逐点幂函数。
要了解有关迭代方法的更多信息,请注意高斯模糊相当于在图像上应用热方程(想象一下“热”像素如何扩散到更暗、更冷的像素中)。
在图像的情况下,热方程是偏微分方程 (PDE)。
您可以通过指定用于模拟散热的时间量,然后以小时间步长应用热量方程来应用一定量的平滑。我不知道时间量与高斯有何关系,但您可能会在任何介绍性材料中找到使用 PDE 进行扩散图像过滤的更多信息。
每个时间步都需要计算每个像素的有限差分并应用一个小模板——它有点类似于卷积。
这种迭代方法称为隐式过滤,可以为您提供非常精确的平滑量(精度受时间步长的限制)。
显式公式也存在,但需要求解非常大的方程组。
这种滤波更适用于更复杂的问题,如各向异性扩散、逆问题、全变分去噪等。