1
  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は、入力としてimage(imIn)を取り、メディアンフィルターのウィンドウの幅を取ります

それなら、なぜifステートメントが必要なのかわかりません

その後、入力画像のサイズを取得し、imageSizeという変数に保存します

次に、imInのすべての値をimOutにコピーします

それから私はすべて失われます

windowbreadthとは何ですか?幅と幅は同じではありませんか?

ありがとう!

4

1 に答える 1

2

if条件は、ウィンドウサイズが奇数であることを確認することです。それでも、「中央」のピクセルはありません。

windowbreadth悪い名前のようです。ただし、その意味は下の図から明らかです。

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

ここSで、はウィンドウサイズ、Bはウィンドウの「幅」、*は「中央」ピクセルを示します。

現在のウィンドウt1のすべてのサンプルも同様です。 t22D配列ではなく1Dベクトルとして再配置されたサンプルです。

于 2011-12-17T15:40:22.450 に答える