Matlab中的3x3平均滤镜
image-processing
matlab
13
0

我已经编写了使用3x3平均滤波器对图像进行平滑处理的代码,但是输出很奇怪,几乎都是黑色的。这是我的代码。

function [filtered_img] = average_filter(noisy_img)
    [m,n] = size(noisy_img);
    filtered_img = zeros(m,n);
    for i = 1:m-2
        for j = 1:n-2
            sum = 0;
            for k = i:i+2
                for l = j:j+2
                    sum = sum+noisy_img(k,l);
                end
            end
            filtered_img(i+1,j+1) = sum/9.0;
        end
    end
end

我将函数调用如下:

img=imread('img.bmp');
filtered = average_filter(img);
imshow(uint8(filtered));

到目前为止,我在代码逻辑中看不到任何错误,如果有人可以发现问题,我将不胜感激。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

另外一个选项:

 f = @(x) mean(x(:));
 filtered_img = nlfilter(noisy_img,[3 3],f);
收藏
评论
img = imread('img.bmp');
filtered = imfilter(double(img), ones(3) / 9, 'replicate');
imshow(uint8(filtered));
收藏
评论

假设您正在使用灰度图像,则应将内部两个for循环替换为:

filtered_img(i+1,j+1) = mean2(noisy_img(i:i+2,j:j+2));

它会改变什么吗?

编辑:别忘了将其转换为uint8 !!

filtered_img = uint8(filtered_img);

编辑2:之所以无法在您的代码中使用,是因为sum饱和到255,即uint8的上限。 mean似乎阻止了这种情况的发生

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