在圆形图像区域应用2d高斯滤波器 - Matlab

时间:2014-04-07 10:53:26

标签: matlab image-processing filtering

是否有一种简单的方法可以在圆形图像区域中应用2d高斯滤波器(简单来说就是一个现成的matlab函数),还是必须自己实现?

3 个答案:

答案 0 :(得分:4)

如果要将任何滤镜应用于图像的选定部分,一个选项是使用二进制遮罩。

img成为您的图像,设置圆形蒙版的位置和半径以及滤镜的尺寸:

centre=[50 50];
radius=20;
n=5;

然后创建面具:

Mask=zeros(size(img));
Disk = fspecial('disk',radius)==0;
Mask(centre(1)-radius:centre(1)-radius+size(Disk,1)-1, centre(2)-radius:centre(2)-radius+size(Disk,2)-1)=double(~Disk);

根据@Gacek的建议应用过滤:

h = fspecial('gaussian', n);
Filtered=filter2(h, img);

将过滤后的区域与原始图像合并,并显示结果:

Result=img.*uint8(~Mask)+uint8(Filtered.*Mask);
imshow(Result)

示例结果:

filtered lion

注意:1。将班级uint8更改为原始图像的相应类别。 2.示例图像位于公共领域,来源:en.wikipedia.org/wiki/File:Phase_correlation.png。

答案 1 :(得分:3)

我会使用fspecial。鉴于img是您的形象,那么:

h = fspecial('gaussian', n);
filter2(h, img);

其中n是过滤器掩码的大小。因此,它会创建n x n高斯滤镜模板。

The documentation还说你可以用另一个参数设置高斯蒙版的标准偏差:

h = fspecial('gaussian', n, std_sigma);

答案 2 :(得分:2)

fspecialimfilter -

一起使用
h = fspecial('gaussian', hsize, sigma);
filteredIMG = imfilter(originalIMG, h);

示例

originalIMG = imread('cameraman.tif');
h = fspecial('gaussian', 21, 0.9);
filteredIMG = imfilter(originalIMG, h);

figure,
subplot(211),imshow(originalIMG)
subplot(212),imshow(filteredIMG)

enter image description here