4

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

我是 MATLAB 新手,即使我知道基础知识,我也无法让图像正确模糊。我读过这个:高斯模糊,并据此模糊由 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?为什么我不能让它只模糊文本而不是扭曲整个图像?

谢谢

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

4

2 回答 2

8

hsize指过滤器的大小。具体来说,当计算滤波器的响应时,Nx x Ny 像素的滤波器使用以每个像素为中心的大小为 Nx x Ny 的像素区域。响应就是该区域中的像素如何组合在一起。在高斯滤波器的情况下,在对区域执行框平均之前,根据高斯函数对中心周围每个像素的强度进行加权。 sigma指以像素 为单位的高斯标准差(参见文档fspecial)。随着您的增加sigma(保持过滤器的大小相同),最终您会接近一个简单的箱平均,在中心像素周围的过滤器区域上具有统一的权重,因此您不再看到增加的效果sigma

使用高斯模糊(sigma 值较大)和框平均值获得的结果之间的相似性如下图左图和中图所示。右图显示了腐蚀图像的结果,这可能是你想要的。

在此处输入图像描述

编码:

% 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);
于 2013-08-07T19:09:51.830 回答
1

Fspecial 手册

h = fspecial('gaussian', hsize, sigma) 返回大小为 hsize 的旋转对称高斯低通滤波器,标准差为 sigma(正)。hsize 可以是指定 h 中的行数和列数的向量,也可以是标量,在这种情况下 h 是方阵。hsize 的默认值为 [3 3];sigma 的默认值为 0.5。不建议。请改用 imgaussfilt 或 imgaussfilt3。

他们说不推荐fspecial - gaussian的地方。在确定标准偏差(sigma)时,您仍然需要确定影响模糊的hsize。在中,您决定标准差,系统会考虑其余部分。我可以在 Matlab 2016a 的系统中和在我的系统中获得更好的容差水平,示例输出正文中imgaussfiltimgaussfiltimgaussfilt3

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]

于 2016-03-21T07:29:32.827 回答