我已经写了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转换为灰度,或者分别过滤每个平面。
同样,您在循环中执行了不必要的转换。只需在循环外执行一次即可。
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);
filtr_image = avgFilter(rgb2gray(noisy_image));
您正在sum
用作变量。sum
是MATLAB中的实际函数,您可能会将该变量与该函数相混淆。如果您还有其他依赖于sum
后续操作的功能,则将产生意想不到的后果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句