在Matlab中使图像平滑的均值滤波器
image-processing
matlab
6
0

我需要在Matlab中测试一些基本的图像处理技术。我需要测试和比较两种类型的过滤器:均值过滤器和中值过滤器。

为了使用中值滤波使图像平滑,图像处理工具箱提供了强大的medfilt2功能。均值过滤器是否有类似功能?还是如何使用filter2函数创建均值过滤器?

对我来说,最重要的事情之一是可以设置滤镜的半径。即中值滤波器,如果我想要[3 x 3]半径(蒙版),我只使用

imSmoothed = medfilt2(img, [3 3]);

我想为均值过滤器实现类似的功能。

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃
I = imread('peppers.png');
H = fspecial('average', [5 5]);
I = imfilter(I, H);
imshow(I)

请注意,可以使用filter2将滤镜应用于强度图像(2D矩阵),而在多维图像(RGB图像或3D矩阵)上使用imfilter

同样在Intel处理器上, imfilter可以使用Intel Integrated Performance Primitives(IPP)库来加快执行速度。

收藏
评论

通过在变换域中的乘法定义卷积:

conv2(x,y) = fftshift(ifft2(fft2(x).*fft2(y)))

如果考虑一个通道...对于更多通道,则必须在每个通道上完成

收藏
评论
h = fspecial('average', n);
filter2(h, img);

请参阅doc fspecialh = fspecial('average', n)返回平均滤波器。 n是一个1×2向量,指定h的行数和列数。

收藏
评论

我看到已经给出了很好的答案,但是我认为最好是给出一种不使用特殊函数或工具箱即可在MATLAB中执行均值过滤的方法。这对于很好地理解进程的工作方式也非常有用,因为您需要显式设置卷积内核。幸运的是,平均过滤器内核非常简单:

I = imread(...)
kernel = ones(3, 3) / 9; % 3x3 mean kernel
J = conv2(I, kernel, 'same'); % Convolve keeping size of I

请注意,对于彩色图像,您必须将其应用于图像中的每个通道。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号