Gac*_*cek 15 matlab filtering image-processing
我需要在Matlab中测试一些基本的图像处理技术.我需要测试和比较两种类型的滤波器:均值滤波器和中值滤波器.
为了使用中值滤波来平滑图像,medfilt2图像处理工具箱具有很好的功能.平均滤波器有类似的功能吗?或者如何使用该filter2函数创建均值滤波器?
对我来说最重要的事情之一是有可能设置过滤器的半径.即中位滤波器,如果我想要[3 x 3]半径(掩模),我只是使用
imSmoothed = medfilt2(img, [3 3]);
Run Code Online (Sandbox Code Playgroud)
我想为平均过滤器实现类似的东西.
rcs*_*rcs 29
h = fspecial('average', n);
filter2(h, img);
Run Code Online (Sandbox Code Playgroud)
请参阅doc fspecial:
h = 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
Run Code Online (Sandbox Code Playgroud)
请注意,对于彩色图像,您必须将其应用于图像中的每个通道.
I = imread('peppers.png');
H = fspecial('average', [5 5]);
I = imfilter(I, H);
imshow(I)
Run Code Online (Sandbox Code Playgroud)
注意,在使用filter2多维图像(RGB图像或3D矩阵)时,imfilter可以使用滤波器应用于强度图像(2D矩阵).
此外,在英特尔处理器上,imfilter可以使用英特尔集成性能基元(IPP)库来加速执行.