gpt4 book ai didi

matlab - 平均滤波器Matlab

转载 作者:行者123 更新时间:2023-12-02 04:20:13 24 4
gpt4 key购买 nike

我已经编写了 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com