赞
踩
本文首先使用Matlab展示示例,我要做的是在Matlab中演示过滤中的代码和效果。
基本上,Matlab构建过滤器和应用过滤器是非常常见,甚至琐碎的。
Matlab,我们要做的是定义两件事:
第一:我们将定义内核的大小;(请记住,这就是我们之前谈论的内容)
>> hsize = 31;
在这个例子它将是31乘31。注意是核大小为奇数,注意我才可以把中心像素画下来。
第尔:我们将定义sigma的大小;
我要让sigma为5。
Matlab有一个非常棒的小函数fspecial。
- >> sigma = 5;
- >> h = fspecial('gaussian', hsize, sigma);
在fspecial中,您可以为其指定参数,其中一个是您想要的过滤器类型。我们选择"gaussian"。
您还必须给它hsize和sigma,才能完成这个函数的操作。
您也可以给它矩形尺寸和多个sigma。完成后,它将为您构建这些过滤器。
事实上,Matlab有一个叫做冲浪的美丽小功能。
>> surf(h);
对,如果你用正确的颜色图画出来,它会把你画成一个曲面,你会看到这个:
您还可以将其显示为俯瞰的图像,
>> imagesc(h);
运行代码后效果如图:
但更重要的是,你可以取你的图像,这是我们这里熊猫的图像:
我可以用这个h对它进行过滤:
- >> outim = imfiler(im, h);
- >> imshow(outim);
这是我们刚建立的过滤器,然后我可以展示它。那会是什么样子?
这将是一只模糊的熊猫。
此代码是构建过滤器并将其应用于Matlab中的图像所需的全部代码。
这很容易。
同样,根据sigma的大小,我们得到不同的平滑量。
所以这里我们使用三个不同的sigma:1,3和10。代码如下:
- >> for sigma = 1:3:10
- h = fspecial('gaussian', fsize, sigma);
- out = imfiler(im, h);
- imshow(out);
- pause;
- end
我们使用不同大小的sigmas建立我们的高斯,我们过滤并显示它们,结果如图:
如你所看,我们得到了不会模糊,一般模糊,很模糊的三个不同效果。(注意模糊是由sigma大小决定,而不是内核大小)
这就是在Matlab中构建这些过滤器所需的全部内容。
我们谈一下使用滤波器去除噪声,让我们看看它是如何运作的。
让我们加载一个完美的图像。
- >> img = imread('saturn.png');
- >> imshow(img);
代码运行结果如下:
然后通过添加一些噪音来破坏它。
- >> noise = randn(size(img)) .* 25;
- >> noise_img = img + noise;
- >> imshow(noise_img);
代码运行结果如下:
我应该为这个sigma命名以避免以后混淆。
- >> noise_sigma = 25;
- >> noise = randn(size(img)) .* noise_sigma;
- >> noise_img = img + noise;
- >> imshow(noise_img);
最后,我们知道如何创建高斯滤波器。我们定义一个内核大小和一个sigma。
- >> filter_size = 11;
- >> filter_sigma = 2;
接着我们可以使用图像包中的fspecial函数。所以首先加载包,然后创建过滤器。
- >> pkg load image;
- >> filter = fspecial('gaussian', filter_size, filter_sigma);
现在,我们可以应用此过滤器来消除噪音。
- >> smoothed = imfilter(niose_img, filter);
- >> imshow(smoothed);
注意imfilter中参数的顺序:首先是图像,然后是过滤器。
代码运行后:
请注意滤镜是如何平滑的,或者更确切地说是模糊了图像。
像噪音一样的细微颗粒现在被弄模糊了。但是过滤器也对原始图像产生了很大影响。
因此,去除噪音并不神奇。你不可能完全回到最初的状态。
在视觉上,它可能看起来不太令人印象深刻,但是考虑到噪声图像与平滑图像相比,图像处理程序的进一步表现非常不同。
继续,自己运行此代码,你尝试不同的参数来生成噪音和平滑。
最后,至少要警告或澄清一句话。
我们说过,作为高斯滤波器的宽度,这是模糊平滑的方差。
上次我们谈到Sigma或Sigma平方作为噪声函数的方差时,增加了多少噪声。
在一种情况下,滤波器σ是空间中的宽度,与噪声一样,它是一个值的方差。噪声σ越大,就越有可能产生大的噪声值。
噪声信号越大,添加的噪声越大,模糊滤波器σ(sigma)越大,模糊程度就越大。
所以,你必须是一个合理的sigma,因为他们都使用正态分布。
但是一个超过了一个空间,一个超过了强度。
我们可以在这里展示这两个sigma,顺便说一下,在这里我使用的是从0到1的图像。如图:
在最上面的一行中,没有进行平滑过滤,我们在噪声中有一个0.2的sigma。
0.2对于范围只有0到1,或者-0.5到0.5,那么这是一个很大的噪音。
sigma为0.1噪音较小。
sigma为0.05的噪音更小。
但是我们可以用高斯来平滑这些噪音。
在sigma=0.2时,我们越平滑,红色线的噪音就越模糊。如图:
因此,对于同样数量的平滑,噪声越小,同样数量的平滑就越平滑。
这里的红色圈起来的图像是最平滑的。
但这是向你们展示这两个sigma,这两个高斯。
从上下文来看,它几乎总是清晰的,但是有人会说:“等一下,我认为信号越大,噪音就越大。
现在你告诉我Sigma越多,越模糊,我们拥有的噪音就越少。”
我回答:“sigma为2!”
这结束了有关过滤和噪音的文章。(以后发现有用的相关过滤和噪音的文章会继续补充)
我们将开始进一步新的内容的图像处理。
总结:
1.目前滤波这单元我们学到了,移动平均线和加权移动平均线的概念;
2.相关滤波:均匀权重(移动平均)、不均匀权重的(加权移动平均)。
3.加权移动平均思想最终优化为使用正态分布的高斯滤波器。
4.高斯滤波器针对不同维度有不同的公式。
——学会编写自己的代码,才能练出真功夫。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。