创建中值滤波器

时间:2013-10-30 19:50:13

标签: matlab image-processing filter median

我得到的图像有“斑点噪声”,我的任务是分别在每一层中删除然后重新组合干净的图像。我不允许使用med2flt()只使用中值滤波器。我已经将3个不同的图层分开了红色,绿色和蓝色,但我不知道如何对它们应用中值滤镜。我该怎么做?

1 个答案:

答案 0 :(得分:4)

使用nlfilter

如果您被允许使用nlfilter,则可以尝试使用flt = @(x) median(x(:))作为其过滤功能。如果您输入doc nlfilter,则可以找到有关此内容的更多信息。

编写自己的

可能是练习是关于如何自己实现过滤操作。首先,您可能希望使用imf = zeros(size(im, 1) - 2, size(im, 2) - 2);为过滤后的图像分配内存。该图像稍微小一点,因为处理边缘的一种方法是丢弃它们。然后,考虑forx上的两个y循环,用于图像im,如

for x = 1 : size(im, 2) - 2
    for y = 1 : size(im, 1) - 2
        roi = im(y : y + 2, x : x + 2);
        imf(y, x) = median(roi(:));
    end
end

roi保留im的本地3x3邻域,median(roi(:))允许您计算这9个强度值的中位数。