试图理解matlab中高斯模糊的实现

时间:2013-08-07 14:50:44

标签: image-processing distribution matlab gaussian

我正在尝试将扫描的文本文档模糊到文本线模糊为黑色的程度。我的意思是文本相互融合,我看到的只是黑线。

我是MATLAB的新手,即使我知道基础知识,我也无法让图像正常模糊。我已经读过这个:Gaussian Blurr并且根据sigma函数管理/决定模糊。但这并不是我编写的代码中的工作方式。

在尝试学习Matlab中的高斯模糊时,我发现它是通过使用此函数实现的:fspecial('gaussian',hsize,sigma);

所以显然有两个变量hsize指定函数中的行数或列数,而sigma是标准差。

有人可以在这里解释一下hsize的重要性,以及为什么它对结果的影响要大于sigma

为什么即使我将sigma增加到一个非常高的值,也不会影响模糊,但是通过增加hsize

会使图像失真很多

这是我的代码:

img = imread('c:\new.jpg');

h = fspecial('gaussian',hsize,sigma);

out = imfilter(img,h);

imshow(out);

并附上结果:

为什么它不仅由sigma控制? hsize扮演什么角色?为什么我不能仅仅模糊文本而不是扭曲整个图像?

谢谢

enter image description here enter image description here enter image description here

2 个答案:

答案 0 :(得分:7)

hsize指的是过滤器的大小。具体来说,过滤器是Nx x Ny像素使用以每个为中心的像素区域Nx×Ny 计算滤波器响应时的像素。答案就是如何 该区域中的像素组合在一起。在一个案例中 高斯滤波器,中心周围每个像素的强度是 在对该区域执行平均值之前根据高斯函数加权。 sigma是指高斯的标准差(参见documentation 对于fspecial),单位为像素。随着你增加sigma(保持 过滤器的大小相同)最终你接近一个简单的盒子平均值与均匀加权 在中心像素周围的滤镜区域上方,您可以停止看到增加sigma的效果。

高斯模糊(具有大的西格玛值)和一个盒子获得的结果之间的相似性 平均值显示在下面的左图和中图中。右图显示 侵蚀图像的结果,这可能就是你想要的。

enter image description here

代码:

% gaussian filter:
hsize = 5;
sigma = 10;
h = fspecial('gaussian',hsize,sigma);
out = imfilter(img,h);

% box filter:
h = fspecial('average',hsize);
out = imfilter(img,h);

% erode:
se=strel('ball',4,4); 
out = imerode(img,se);

答案 1 :(得分:1)

Fspecial的手册

  

h = fspecial('gaussian',hsize,sigma)返回旋转   标准尺寸hsize的对称高斯低通滤波器   偏差西格玛(正面)。 hsize可以是指定的向量   h中的行数和列数,或者它可以是标量,在这种情况下   h是方阵。 hsize的默认值是[3 3];该   sigma的默认值是0.5。不建议。使用imgaussfilt或   imgaussfilt3代替。

他们说fspecial - gaussian 不推荐。 在确定标准差(sigma)时,您仍然需要决定影响模糊的 hsize 。 在imgaussfilt中,您决定标准偏差,系统会考虑您的其余部分。 我可以在Matlab 2016a的系统中使用imgaussfiltimgaussfilt3获得更好的容差级别,身体中的示例输出here

im = im2double( imgGray ); 
sigma = 5;
simulatedPsfImage = imgaussfilt(im, sigma); 
simulatedPsfImage = im2double( simulatedPsfImage );
[ measuredResolution, standardError, bestFitData ] = ...
    EstimateResolutionFromPsfImage( simulatedPsfImage, [1.00 1.00] );

请注意,fspecial的容差级别默认为高[0.70 1.30]