java - 什么是欧氏距离平方或距离平方和?

标签 java image math pixel correlation

所以我得到了一个“相似性度量”来使用,但没有任何信息。相似性度量称为欧氏距离平方,或距离平方和,我有一个公式:

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

维基百科告诉我这一点:

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

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

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,这有意义吗?

已编辑以获取更多信息。

最佳答案

该代码正确计算了欧几里得分离的平方。

推测它是一个很小的数字,因为样本值的幅度很小。绝对没有理由不期待这样的值(value)。只有您才能知道实际值的含义以及应该用它做什么。

<小时/>

就风格而言,我更希望变量在其生命周期内保持相同的逻辑值。在这段代码中,您编写了 ssd = 1/ssd ,这有点令人烦恼。您使用 ssd 表示sum of squared d距离,但是当您编写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;
}

关于java - 什么是欧氏距离平方或距离平方和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8263140/

相关文章:

java - 新手 : query amazon s3 database in Android client (Java)

c# - WPF 显示每个图像 x 秒如何?

algorithm - 逻辑:将重力应用于矢量

java - 将 JComboBox 年、月、日整数值连接或格式化为日期类型

java - 这个简单的 HQL 语法有什么问题?

C#/WPF图像处理问题

c - 在c中水平翻转图像

c - 如何在 MATLAB 中获取矩阵的指数?

c - 从数组打印路径?

java - 在 Droid 菜单中重复应用