当将高斯模糊应用于图像时,通常sigma是参数(示例包括Matlab和ImageJ)。
如何知道sigma应该是什么?有没有数学方法来找出最佳sigma?就我而言,我在图像中有一些与背景相比明亮的对象,我需要在计算上找到它们。我将应用高斯滤波器使这些物体的中心更加明亮,这有助于找到它们。如何确定最佳西格玛?
答案 0 :(得分:16)
没有公式可以为你确定;最佳西格玛将取决于图像因素 - 主要是图像的分辨率和对象的大小(以像素为单位)。
另外,请注意,高斯滤波器实际上并不意味着任何东西;您可能希望研究对比度最大化技术 - 听起来就像直方图拉伸这样简单的事情可以很好地适合您。
编辑:更多解释 - sigma基本上控制你的内核函数的“胖”程度;较高的西格玛值在较宽的半径范围内模糊。由于您正在处理图像,因此较大的sigma也会迫使您使用更大的内核矩阵来捕获足够的函数能量。对于您的特定情况,您希望您的内核足够大以覆盖大部分对象(以便它足够模糊),但不要太大以至于它一次开始重叠多个相邻对象 - 实际上,对象分离也是尺寸的一个因素。
由于您提到了MATLAB - 您可以使用fspecial('gaussian', hsize, sigma)
函数查看具有不同参数的各种高斯内核,其中hsize
是内核的大小,而sigma
是,西格玛尝试更改参数以查看其更改方式。
答案 1 :(得分:3)
作为惯例,我使用此约定。如果k是内核的大小,则比sigma =(k-1)/ 6。这是因为99%的高斯pdf的长度为6sigma。
答案 2 :(得分:0)
你必须找到一个函数G的最小值/最大值,使得G(X,sigma)其中X是你的一组观察值(在你的情况下,你的图像灰度值),这个函数可以是维持例如,这可以通过图像的一阶导数(如G)完成,
fil = fspecial('sobel');
im = imfilter(I,fil);
imagesc(im);
colormap = gray;
这会给你一个图像的一阶导数的结果,现在你想要找到最大的sigma 最大化G(X,sigma),这意味着你要尝试几个sigma(比如说,按递增的顺序),直到你达到一个使G max最大的sigma。这也可以用二阶导数来完成。