【发布时间】:2014-05-19 13:44:30
【问题描述】:
有没有一种简单的方法可以在圆形图像区域中应用二维高斯滤波器(简单的意思是准备好的 matlab 函数)还是必须自己实现??
【问题讨论】:
标签: matlab image-processing filtering
有没有一种简单的方法可以在圆形图像区域中应用二维高斯滤波器(简单的意思是准备好的 matlab 函数)还是必须自己实现??
【问题讨论】:
标签: matlab image-processing filtering
如果您想对图像的选定部分应用任何过滤器,一种选择是使用二进制掩码。
让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。
【讨论】:
我会使用fspecial。给定img 是你的图片,那么:
h = fspecial('gaussian', n);
filter2(h, img);
其中n 是过滤器掩码的大小。所以它会创建nxn Gaussian filter mask。
The documentation 还说您可以使用另一个参数设置高斯掩码的标准偏差:
h = fspecial('gaussian', n, std_sigma);
【讨论】:
【讨论】:
fspecial 有一些常用的内核。当然,您可以使用自己定制的hsizex hsize 大小的内核并替换为h 以用于imfilter 作为示例中的第二个参数。
fspecial 是针对各种常用内核的,不一定是像gaussian 这样的循环内核。