我正在尝试将扫描的文本文档模糊到文本线模糊为黑色的程度。我的意思是文本相互融合,我看到的只是黑线。
我是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
扮演什么角色?为什么我不能仅仅模糊文本而不是扭曲整个图像?
谢谢
答案 0 :(得分:7)
hsize
指的是过滤器的大小。具体来说,过滤器是Nx
x Ny像素使用以每个为中心的像素区域Nx×Ny
计算滤波器响应时的像素。答案就是如何
该区域中的像素组合在一起。在一个案例中
高斯滤波器,中心周围每个像素的强度是
在对该区域执行平均值之前根据高斯函数加权。
sigma
是指高斯的标准差(参见documentation
对于fspecial
),单位为像素。随着你增加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);
答案 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的系统中使用imgaussfilt
和imgaussfilt3
获得更好的容差级别,身体中的示例输出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]
。