平均滤波器Matlab

哈姆扎·祖拜尔·贡达尔

我已经写了3x3的平均滤镜。它可以正常工作,但是它显示相同的输出图像三遍而不是一遍。该如何解决呢?

该代码是

function [filtr_image] = avgFilter(noisy_image)

    [x,y] = size(noisy_image);
    filtr_image = zeros(x,y);
    for i = 2:x-1
        for j =2:y-1
            sum = 0;
            for k = i-1:i+1
                for l = j-1:j+1
                    sum = sum+noisy_image(k,l);
                end
            end
            filtr_image(i,j) = sum/9.0;
           filtr_image = uint8(filtr_image);

        end
    end

end

提前致谢

雷瑞恩

最有可能发生的事实是,当代码专门用于灰度时,您正在提供彩色图像。之所以看到“三个”,是因为当您这样做分配输出的过滤图像时:

[x,y] = size(noisy_image)

如果您使用3D矩阵,则报告的列数size将为y = size(noisy_image,2)*size(noisy_image,3);这样,当您遍历图像中的每个像素时,将按列主要顺序将每个平面彼此并排放置。您应该做的是将图像从RGB转换为灰度,或者分别过滤每个平面。

同样,您在循环中执行了不必要的转换。只需在循环外执行一次即可。

选项#1-每个平面的过滤器

function [filtr_image] = avgFilter(noisy_image)
[x,y,z] = size(noisy_image);
filtr_image = zeros(x,y,z,'uint8');
for a = 1 : z
    for i = 2:x-1
        for j =2:y-1
            sum = 0;
            for k = i-1:i+1
                for l = j-1:j+1
                    sum = sum+noisy_image(k,l,a);
                end
            end
            filtr_image(i,j,a) = sum/9.0;
        end
    end
 end
end

然后,您可以通过以下方式调用它:

filtr_image = avgFilter(noisy_image);

选项#2-转换为灰度

filtr_image = avgFilter(rgb2gray(noisy_image));

次要音符

您正在sum用作变量。sum是MATLAB中的实际函数,您可能会将该变量与该函数相混淆。如果您还有其他依赖于sum后续操作的功能,则将产生意想不到的后果

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章