没有内置功能的平均滤波器

时间:2018-11-01 09:41:29

标签: matlab image-processing

我的输出有问题。我正在使用5 * 5滤镜使图像平滑。由于平均滤镜使我们的图像平滑,但是这一点使图像变得更暗淡。谁能帮助我解决这个问题?

输入图像为:

image

img_2 = imread('White-Bars.png');
filter = ones(5 , 5)/25;
working_img = img_2(:,:,1);
img_4 = img_2(:,:,1);
[rows,cols] = size(working_img); sum=0;
for row=4:(rows-3) 
  for col=4:(cols-3)
    for rowindex=(-2): (3) 
      for colindex=(-2): (3)
        img_4(row,col) = mean2(double(working_img(row+rowindex,col+colindex)) * filter(1:5,1:5));
      end
    end
  end
end
subplot(1,2,1);
imshow(working_img);
subplot(1,2,2);
imshow(img_4);

因此,这是输出:

image

1 个答案:

答案 0 :(得分:3)

您不了解自己在做什么!

这显然是家庭作业,因此我没有提供完整的代码。您正在做图像卷积,可以使用更好的代码(fftconv2imfilter等)来完成,但是我想您是为了学习而做的。

首先,请坐下您的讲义并了解什么是过滤。当您对一个像素应用滤镜时(前两个循环将选择图像中的每个像素),您要做的就是将所选滤镜乘以该像素以及所有周围的像素,并将其结果累加到输出图像。

一旦您位于特定像素(rowcol)中,然后您将遍历所有相邻像素(由rowindexcolindex偏移)。对于每种方法,您都希望将当前像素乘以该特定位置的过滤器,即1个值,并将其添加到结果中。取决于过滤器是什么,它将执行不同的操作。在您的情况下,所有相同值的过滤器将得出平均值。 您不需要使用mean2函数,您要应用的数学函数可以进行过滤

简而言之,这行是错误的:

img_4(row,col) = mean2(double(working_img(row+rowindex,col+colindex)) * filter(1:5,1:5));

同时使用mean2和变量filter上的索引。

解释卷积的视频:https://www.youtube.com/watch?v=C_zFhWdM4ic