1

2 つの画像ヒストグラムを比較したい。それらは次のとおりです。

h1 --> double 値の 1 次元ベクトルの長さ .4096。

h2 --> double 値の 1 次元ベクトルの長さ .4096。

ここでこのmatlab関数を使用しています:

http://clickdamage.com/sourcecode/code/compareHists.m

それは次のとおりです。

% s = compareHists(h1,h2)
%       returns a histogram similarity in the range 0..1
%
% Compares 2 normalised histograms using the Bhattacharyya coefficient.
% Assumes that sum(h1) == sum(h2) == 1
%
function s = compareHists(h1,h2)

s = sum(sum(sum(sqrt(h1).*sqrt(h2))));

私の質問は:

複数の合計が必要ですか?

上式の合計が 1 つしかなくても、それで十分ですよね?

このように: sum(sqrt(h1).*sqrt(h2)) --> ?

誰か上記のコードを説明してもらえますか? また、一括払いでいいので教えてください。

両方の方法を試しましたが、2 つの画像ヒストグラムに対して同じ答えが得られました。私は2つのヒストグラムだけでこれを行ったので、確認したいと思います.

ありがとう!

4

4 に答える 4

3

一般に、sum1 つの次元のみに沿って合計します。複数の次元に沿って合計したい場合は、次のいずれかを行います

  • sum数回使用します。また
  • 線形インデックスを使用して 1 次元に縮小してから、sumonce:を使用しますsum(sqrt(h1(:)).*sqrt(h2(:)))

あなたの場合、次元が 1 つしかない場合、はい、単一sumで十分です。

于 2013-11-14T08:41:08.773 に答える
2

最初にダウンロードしたコードは、行列の列として積み重ねられた複数のヒストグラムを処理するために書かれたものだと思います。これが(IMHO)複数の理由ですsum

あなたの場合、それを1つだけ残すことができますsum

あなたはもっとうまくやることができます - 合計なしで

ここにカーソルを合わせると答えが表示されます

s = sqrt(h1(:)')*sqrt(h2(:)); 秘訣は、ベクトル乗算を使用することです!

于 2013-11-14T08:41:43.150 に答える
1

3つの合計にもポイントは表示されませんが、ヒストグラムのあるベクトルではなくマトリックスがある場合、それらを比較するには、このsum(sum(sqrt(h1).*sqrt(h2)))のような2つの合計が必要になります. 1 つ目は行の合計を計算し、2 つ目は列の合計を計算します。

于 2013-11-14T09:03:03.693 に答える