2017-06-25 6 views
-3

このMATLABコードの目的は、ローパスフィルタを適用して水平ヒストグラムを滑らかにすることです。画像処理でローパスフィルタコードを使用する

画像の隣接ピクセル間のグレイ値の差の和を表す第1の水平および垂直ヒストグラムが列方向および行方向に使用された。水平ヒストグラムの名前はhorz1なので、horz1(i)= sumとなります。ここで、 'i'は列番号で、 'sum'は差の合計です。次にローパスフィルタをかけた。私は 'ローパスフィルターを適用する'部分を理解していません。画像処理についてはあまりよく分かりません。もし誰かが私が本当に感謝して理解するのを助けることができます。

%% horizontal histogram 
    disp('Processing Edges Horizontally...'); 
    max_horz = 0; 
    maximum = 0; 
    for i = 2:cols 
     sum = 0; 
    for j = 2:rows 
      if(I(j, i) > I(j-1, i)) 
       difference = uint32(I(j, i) - I(j-1, i)); 
      else 
       difference = uint32(I(j-1, i) - I(j, i)); 
      end 
      if(difference > 20) 
       sum = sum + difference; 
      end 
     end 
horz1(i) = sum; 
%%applying low pass filter 
sum = 0; 
horz = horz1; 
for i = 21:(cols-21) 
    sum = 0; 
    for j = (i-20):(i+20) 
     sum = sum + horz1(j); 
    end 
    horz(i) = sum/41; 
end 

+0

単純に41個の要素ウィンドウにわたる平均を見つけます。ローパスフィルタは、低周波成分を保持し、高周波成分を抑制します。平均化はローパスフィルタの一例です。 – rayryeng

+0

ありがとうございます。まあ、私は= 21:(列21)それは何のための行について: (i-20)から(i + 20)までjを選択して41個の要素を取っているのではないか? –

+0

'i = 21'で始まるのは、20 + 20 + 1 = 41を含めて**外に出ることなく、**前後に20個の値を収集する必要があるからです。' i = 21'のとき 'j 「j = cols-41」〜「cols-1」までの「cols_21」までの「i = 22」、「j = 2」〜 。技術的には、私は 'i = cols-20'で終わるべきですが、それは大丈夫です。 'i'によって制御されるループは、ウィンドウの中心が何であるかを決定し、' j'によって制御されるループは、 'i'によって示される右のサンプルを収集する。特にこれに慣れていなければ、それについて考える必要がありますが、最終的には意味をなさないでしょう。 – rayryeng

答えて

0

これは単に、41素子ウィンドウの平均を見出します。ローパスフィルタは、低周波成分を保持し、高周波成分を抑制します。平均化はローパスフィルタの一例です。

フィルタリングされた出力を計算するときの最後の2つのループの説明は次のとおりです。それはi = 21で開始します。なぜなら、中間を含む外出せずに前後に20個の値を収集する必要があるからです。20 + 20 + 1 = 41i = 21の場合は、j = 1~41となり、i = 22,j = 2 to 42などの場合はcols - 21となり、となります。技術的にはi = cols - 20で終了する必要がありますが、信号の最終的な有効出力の計算を見逃しても構いません。

iによって制御されるループは、ウィンドウの中心を決定し、jによって制御されるループは、iによって指定された正しいサンプルを収集します。特にこれに慣れていなければ、それについて考える必要がありますが、最終的には意味をなさないでしょう。