2011-12-17 14 views
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 

私の説明:誰かがメジアンフィルタについてこのMATLABコードを理解するのを助けてくれますか?

機能medianFilterを入力として画像(IMIN)をとり、メディアンフィルタ

のウィンドウの幅我々は場合を必要とする理由、私はわからないんだけどその後の文

我々は、我々はimOut

にIMINのすべての値をコピーし、入力画像のサイズを取得し、IMAGESIZE

という変数に保存します210

私はすべて失われています

どのようなwindowbreadthですか?幅と幅は同じではありませんか?

ありがとうございました!

答えて

2

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

windowbreadthは悪い名前のようです。しかし、その意味では、次の図から明らかである:

Sがウィンドウサイズである
|<--B-->| 
+---+---+---+---+---+ 
| | | | | | 
+---+---+---+---+---+ 
| | | | | | 
+---+---+---+---+---+ 
| | | * | | | 
+---+---+---+---+---+ 
| | | | | | 
+---+---+---+---+---+ 
| | | | | | 
+---+---+---+---+---+ 
|<--------S-------->| 

Bは、ウィンドウ - 「広さ」であり、*は「中央」のピクセルを示しています。

したがってt1は、すべて現在のウィンドウのサンプルです。 t2は、2D配列ではなく1Dベクトルとして再配列されたサンプルです。

関連する問題