ユークリッド距離の二乗または二乗の距離の合計は何ですか?

だから、私は "類似性の尺度"を与えられているが、情報は使われていない。類似度はユークリッド距離二乗、または二乗距離の合計と呼ばれ、私はこの1つの公式を持っています:

D2 =  Σ(I(x,y) – I’(x,y))^2 

ウィキペディアはこれを私に伝えます:

d(p,q) = (p1 − q1)^2 + (p2 − q2)^2 + ... + (pi − qi)^2 + ... + (pn − qn)^2

私はステレオ画像ペアを持っています。つまり、同じ対象の2つの画像、左目からの画像、右目からの画像です。私は、左右の画像の対応する座標からピクセル情報を抽出することができます:

private double euclidDistSquared(BufferedImage leftRegion, BufferedImage rightRegion) {
    double temp = 0;
    double ssd = 0;
    Raster left = leftRegion.getData();
    Raster right = rightRegion.getData();

    for(int x = 0; x < leftRegion.getWidth();  x++) {
        for(int y = 0; y < leftRegion.getHeight(); y++) {
            temp = left.getSampleDouble(x,y,0) - right.getSampleDouble(x,y,0);
            temp *= temp;
            ssd += temp;
        }
    }
    ssd = 1/ssd;
    return ssd;
}

私は後で正しいことをしていますか?その最初の一時的な線は、対応する座標でのピクセル値の抽出と減算ですが、私がオンラインで見たことのいくつかは、私がxとyの値を別々に減算したいことを示唆しています。 !)。また、最終的にssdの値は3.792346286724133E-6のような非常に小さいものですが、それは意味をなさないでしょうか?

詳細についてはEDITEDを参照してください。

0
数字はどのようにばかげているのですか?
追加された 著者 ypercubeᵀᴹ,

1 答え

そのコードは、ユークリッド距離の2乗を正しく計算します。

サンプル値が小さいため、おそらくそれは小さい数値です。このような価値を期待しない理由は全くありません。あなただけが、実際の価値が何を意味し、何をするべきかを知ることができます。


スタイルの問題として、私は変数がその生涯にわたって同じ論理値を保持することを好みます。このコードでは、 ssd = 1/ssd を書きます。 1/ssd を記述すると、 s 件数が d これはもはや二乗距離の合計ではなく、これは類似性の測度です。

私はこれのように書くだろう:

private double similarityMeasure(BufferedImage leftRegion, BufferedImage rightRegion) {
    double ssd = 0;
    Raster left = leftRegion.getData();
    Raster right = rightRegion.getData();

    for(int x = 0; x < leftRegion.getWidth();  x++) {
        for(int y = 0; y < leftRegion.getHeight(); y++) {
            double diff = left.getSampleDouble(x,y,0) - right.getSampleDouble(x,y,0);
            ssd += diff*diff;
        }
    }
    return 1/ssd;
}
7
追加された