MATLAB 中的高斯模糊与图像分辨率的关系

信息处理 图像处理 matlab 模糊
2022-01-07 02:34:14

fspecial()在 MATLAB 中调用以创建图像的高斯模糊。

例如,

%Create Gaussian Filter
G = fspecial('gaussian', [5 5], 2);

% Blur Image
blurredImage = imfilter(nonBlurredImage,G,'same')

参数 [5 5] 是 hsize,它定义了应用高斯滤波器的程度......根据用户“努力尝试”......“在高斯滤波器的情况下,中心周围每个像素的强度在对该区域执行盒平均之前,根据高斯函数对一个进行加权。”

参数 2 是 sigma ...,以像素为单位。

假设 nonBlurredImage 的大小是 200x200。并且每个像素的边代表0.25毫米的长度。然后图像可以以 1 线对/毫米的“分辨率”解析对象而不会出现混叠。

如果我将 G = fspecial('gaussian', [5 5], 1) 传递给过滤器函数,然后生成模糊图像。该图像的“分辨率”是多少?它与hsize有什么关系?如果我改为使用 [10 10] 或 [1 1],这会对事情产生什么影响?

谢谢!

2个回答

在图像上应用高斯模糊时,您应该只关心 STD。
其余应设置如下:

STD_TO_RADIUS_FACTOR = 5;
kernelRadius = ceil(STD_TO_RADIUS_FACTOR * kernelStd);
kernelLength = (2 * kernelRadius ) + 1;
mGaussianKernel = fspecial('gaussian', [kernelLength, kernelLength], kernelRadius);

现在,关于图像的分辨率,这很棘手,因为它有很多参数。
如果你想在空间循环(作为 DFT)中测量它,你可以看到高斯核的频谱属性(截止频率)。

更新

STD_TO_RADIUS_FACTOR应该由准确性和性能之间的平衡来确定
以上基本上是高斯内核的截断版本(它是无限的)。平衡设置了近似的好坏与卷积核的长度(时间越长,它需要的计算资源越高)。

正如您正确指出的那样,过滤器的大小决定了它平均像素的区域。

理论上,高斯滤波器对于距中心的所有距离都具有非零权重。然而在实践中这样做是不可行的,因为计算时间会很大。因此,高斯在滤波器大小之外被截断,并且外面的权重设置为零。

为了确保一个真实高斯的良好表示,过滤器的大小应该足够大,以至于过滤器外部的权重会很小,如果不是,你的结果会与真实高斯显着失真。

σ过滤器的权重决定了权重,因此也应该使用它来确定过滤器的大小。然后我至少使用一个过滤器6σ(确保答案很奇怪),尽管另一个答案有不同的建议。

对于分辨率,答案在某种程度上取决于您对分辨率的定义。我一般会说过滤后的分辨率是2σ,忽略任何其他影响,例如像素大小和光学分辨率。如果过滤器尺寸太小,这将会改变,尽管我不确定它是否总是被很好地定义,因为你会从尖锐的截止中得到一些振铃效应。