欧几里得距离平方或平方距离之和是多少?

che*_*uck 0 java math image pixel correlation

所以我给了一个"相似性度量"来使用但没有信息.相似性度量称为欧氏距离平方,或平方距离的总和,我有这一个公式:

D2 =  ?(I(x,y) – I’(x,y))^2 
Run Code Online (Sandbox Code Playgroud)

维基百科告诉我这个:

d(p,q) = (p1 ? q1)^2 + (p2 ? q2)^2 + ... + (pi ? qi)^2 + ... + (pn ? qn)^2
Run Code Online (Sandbox Code Playgroud)

我有一个立体图像对,即同一主题的两个图像,一个来自左眼视图,一个来自右眼视图.我可以从左右图片中的相应坐标中提取像素信息:

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;
}
Run Code Online (Sandbox Code Playgroud)

我之后做的是正确的吗?第一个临时线是相应坐标处的像素值的提取和减法,但我在网上看到的一些建议我想分别减去我的x和y值(我怎么会这样做? !).另外,我最终获得的ssd值非常小,例如3.792346286724133E-6,这是否有意义?

已获编辑以获取更多信息.

Dav*_*nan 7

该代码正确计算欧几里德分离的平方.

据推测,这是一个很小的数字,因为样本值的幅度很小.绝对没有理由不期待这样的价值.只有你可以知道实际价值意味着什么以及应该用它做什么.


作为一种风格问题,我更希望变量在其生命周期中保持相同的逻辑值.在这段代码中,您ssd = 1/ssd可以略微编写哪些内容.您正在使用的SSD意味着小号微米的小号 quared d istances,但是当你写的1/ssd,那就是不再平方距离的总和,它的相似性度量.

我写的是这样的:

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;
}
Run Code Online (Sandbox Code Playgroud)