15

将高斯模糊应用于图像时,通常 sigma 是一个参数(示例包括 Matlab 和 ImageJ)。

怎么知道 sigma 应该是什么?有没有一种数学方法可以计算出最佳的 sigma?就我而言,我在图像中有一些与背景相比更亮的物体,我需要通过计算找到它们。我将应用高斯滤波器使这些物体的中心更亮,希望有助于找到它们。如何为此确定最佳 sigma?

4

3 回答 3

21

没有公式可以为您确定它;最佳 sigma 将取决于图像因素 - 主要是图像的分辨率和其中对象的大小(以像素为单位)。

另外,请注意,高斯滤波器实际上并不是为了照亮任何东西。您可能想研究对比度最大化技术 - 听起来像直方图拉伸这样简单的东西可能对您很有效。

编辑:更多解释 - sigma 基本上控制你的内核函数的“胖”程度;较高的 sigma 值在较宽的半径上模糊。由于您正在处理图像,更大的 sigma 还会迫使您使用更大的内核矩阵来捕获足够的函数能量。对于您的特定情况,您希望您的内核足够大以覆盖大部分对象(以便它足够模糊),但不要太大以至于它开始一次重叠多个相邻对象 - 所以实际上,对象分离也是一个与大小一起因素。

既然您提到了 MATLAB - 您可以使用该fspecial('gaussian', hsize, sigma)函数查看具有不同参数的各种高斯内核,其中hsize是内核的大小,并且sigma是 sigma。尝试改变参数,看看它是如何变化的。

于 2010-06-30T13:09:00.753 回答
5

我使用这个约定作为经验法则。如果k是内核的大小比sigma=(k-1)/6. 这是因为高斯 pdf的99 个百分位数的长度是6sigma

于 2020-05-25T13:02:30.563 回答
1

您必须找到函数 G 的最小值/最大值,使得 G(X,sigma) 其中 X 是您的一组观察结果(在您的情况下,您的图像灰度值),该函数可以是任何保持“顺序”的函数图像的强度,例如,这可以通过图像的一阶导数(作为 G)来完成,

fil = fspecial('sobel');
im = imfilter(I,fil);
imagesc(im);
colormap = gray;

这给了你图像的一阶导数的结果,现在你想通过最大化 G(X,sigma) 来找到最大 sigma,这意味着你正在尝试几个 sigma(比如说,按递增顺序)直到你达到一个 sigma这使得 G 最大。这也可以用二阶导数来完成。

于 2012-01-30T18:03:32.043 回答