有人可以帮我理解这个关于中值滤波器的matlab代码吗?

时间:2011-12-17 15:32:39

标签: matlab filter median

  function imOut = medianFilter(imIn,windowWidth)

     if mod(windowWidth, 2 ) == 0
          disp('Window has even size');
     return
     end

     imageSize = size(imIn);
     imOut = imIn;

     windowBreadth = (windowWidth - 1)/2;
  for m=windowBreadth+1:imageSize(1) - windowBreadth
    for n=windowBreadth+1:imageSize(2) - windowBreadth
      t1 = imIn(m-windowBreadth:m+windowBreadth,n-windowBreadth:n+windowBreadth);
      t2 = reshape(t1,windowWidth*windowWidth,1);
      t3 = median(t2);
      imOut(m,n) = t3;
    end
  end

我的解释:

函数medianFilter将图像(imIn)作为输入,以及中值滤波器窗口的宽度

然后我不确定为什么我们需要if语句

之后我们取输入图像的大小并将其保存在名为imageSize

的变量中

然后我们将imIn的所有值复制到imOut

然后我全都失去了

什么是windowbreadth?而且宽度和宽度不一样吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

if条件检查窗口大小是奇数;如果它甚至没有“中心”像素。

windowbreadth似乎是一个坏名字。但其含义应从下图中清楚:

|<--B-->|
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+
|   |   | * |   |   |
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+
|<--------S-------->|

其中S是窗口大小,B是窗口 - “宽度”,*表示“中心”像素。

所以t1是当前窗口中的所有样本。 t2是重新排列为一维向量而不是二维数组的样本。