この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
端
単純に41個の要素ウィンドウにわたる平均を見つけます。ローパスフィルタは、低周波成分を保持し、高周波成分を抑制します。平均化はローパスフィルタの一例です。 – rayryeng
ありがとうございます。まあ、私は= 21:(列21)それは何のための行について: (i-20)から(i + 20)までjを選択して41個の要素を取っているのではないか? –
'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