【问题标题】:Average filter without built-in function没有内置函数的平均滤波器
【发布时间】:2019-04-05 12:30:26
【问题描述】:

我的输出有问题。我正在使用 5*5 滤镜使图像平滑。作为平均滤波器平滑我们的图像,但这个使图像更加沉闷。谁能帮我解决这个问题?

输入图像是:

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);

所以,这是输出:

【问题讨论】:

  • 过滤器的尺寸是多少?还可以尝试高斯滤波器而不是简单的平均,因为简单的平均滤波器会在图像中放置像伪像一样的框。还要在这里显示您的代码,以便我们可以看到您的代码有什么问题
  • 嘿@AnderBiguri 现在你能帮我吗?
  • 当您将过滤器除以 25 时,您就不必使用 mean2 函数,仅此而已。而不是mean2,您必须对像素求和

标签: matlab image-processing


【解决方案1】:

你不明白你在做什么!

这显然是作业,所以我没有提供完整的代码。你正在做图像卷积,你可以用更好的代码来做,(fftconv2imfilter 等)但我假设你这样做是为了学习。

首先,坐下来阅读讲义,了解什么是过滤。当您在一个像素上应用过滤器时(前两个循环是选择图像中的每个像素),您想要做的是将您选择的过滤器乘以该像素以及所有周围像素,并将结果累积在输出图像。

一旦您处于特定像素 (row,col) 中,您就会围绕所有相邻像素进行迭代(偏移量为 rowindex,colindex)。对于其中的每一个,您都希望将当前像素乘以 特定位置上的过滤器,即 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

【讨论】:

  • 我想再问你一件事,我已经在答案中添加了这一点,所以你也可以帮我检查一下。
  • 我遇到的问题是我们如何访问相邻像素,然后将它们与过滤器相乘。而且我也遇到了问题,如果没有从哪一行和哪一列进行填充,我们可以开始我们的输入图像数组。
  • @blu。我不会做你的作业。这是在浪费你的时间和金钱。我已经给了你你需要的一切,请花 2 小时学习它至少
猜你喜欢
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多