matlab - 平均滤波器Matlab

标签 matlab image-processing

我已经编写了 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 的函数,这将产生意想不到的后果。

关于matlab - 平均滤波器Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31025506/

相关文章:

matlab - 4 种不同的 Matlab 函数来估计数据的 PDF 给出 4 种不同的结果

matlab - 视频处理的标准测试视频

matlab - 在 MATLAB 中组合值矩阵和索引

python - 为什么Matlab和scikit-learn使用PLS回归时结果不同?

image-processing - 我从哪里开始学习图像处理和对象识别?

Python OpenCV 颜色跟踪

matlab - 如何加载.arff格式文件到matlab

python - 人脸识别——如何返回正确的图像?

c - 如何产生图像噪声频率?

javascript - 如何在 JavaScript 中使用 Phonegap 进行图像处理