是否有一种简单的方法可以在圆形图像区域中应用2d高斯滤波器(简单来说就是一个现成的matlab函数),还是必须自己实现?
答案 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)
示例结果:
注意: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)