medfilt2过滤器期望输入是二维的

时间:2015-02-16 15:29:39

标签: matlab image-processing

我想将过滤器medfilt2应用于具有salt&amp ;;的图像辣椒噪音。

我试过这段代码:

img = imread('4.02.04_salt&pepper.tif');
blur = medfilt2(img,[3 3]);
imshow(blur);

但是我收到了一个错误:

`Error using medfilt2
 Expected input number 1, A, to be two-dimensional.

 Error in medfilt2>parse_inputs (line 106)
 validateattributes(a, {'numeric','logical'}, {'2d','real'},
 mfilename, 'A', 1);

 Error in medfilt2 (line 48)
 [a, mn, padopt] = parse_inputs(varargin{:});

 Error in codLab3 (line 87)
 blur = medfilt2(img,[3 3]);`

我不知道为什么会这样。

2 个答案:

答案 0 :(得分:16)

您的图像很可能是带有RGB帧的彩色图像。 medfilt2仅适用于单色的2D图像。最简单的解决方法可能是将它分别应用于每种颜色。

参见示例:

% load an image
img = imread('peppers.png');

% add some noise
img_noisy = imnoise(img, 'salt & pepper', 0.02);
figure; imshow(img_noisy);

% apply medfilt2 on each color
img_filtered = img_noisy;
for c = 1 : 3
    img_filtered(:, :, c) = medfilt2(img_noisy(:, :, c), [3, 3]);
end
figure; imshow(img_filtered);

看起来像:

enter image description here

答案 1 :(得分:1)

尝试将rgb转换为灰色(rgb2gray):

img = imread('4.02.04_salt&pepper.tif');
img = rgb2gray(img); % add this line
blur = medfilt2(img);
imshow(blur);