java - 在Java中计算两个图像直方图之间的卡方距离

标签 java image image-processing histogram euclidean-distance

我用Java计算了两个图像的直方图(代码修改和缩短):

for (int posX = 0; posX < image.getWidth(); posX++)
{
    for (int posY = 0; posY < image.getHeight(); posY++)
    {
        Color c1 = new Color(image.getRGB(posX, posY));
        cummulative[0] = cummulative[0] + c1.getRed();
        cummulative[1] = cummulative[1] + c1.getGreen();
        cummulative[2] = cummulative[2] + c1.getBlue();
        numPixels++;
    }
}        
    r1 = cummulative[0] / numPixels;
    g1 = cummulative[1] / numPixels;
    b1 = cummulative[2] / numPixels;

然后计算直方图的欧氏距离:

tempDist = Math.sqrt((r1 - r2) * (r1 - r2) + (g1 - g2) * (g1 - g2) + (b1 - b2) * (b1 - b2));

现在我想计算卡方距离而不是欧几里德距离。但我不知道如何实现。请问有人可以介绍一下吗?

编辑:

我现在有以下代码来生成直方图:

float[] histogram = new float[256];

for (int i = 0; i < input.getWidth(); i++) {
for (int j = 0; j < input.getHeight(); j++) {
    int color = 0;
    switch (colorVal) {
        case 1:
            color = new Color(input.getRGB(i, j)).getRed();
            break;
        case 2:
            color = new Color(input.getRGB(i, j)).getGreen();
            break;
        case 3:
            color = new Color(input.getRGB(i, j)).getBlue();
            break;
    }
    histogram[color]++;
}

}

假设我有以下数据,我该如何继续:

图片 1:

R 10 计数 1000

R 20 计数 100

R 30 计数 100

G 20 计数 600

G 255 计数 600

B 0 计数 800

B 200 计数 400

图片2:

R 10 计数 1000

R 20 计数 200

G 20 计数 600

G 255 计数 600

B 0 计数 800

B 100 计数 200

B 200 计数 200

最佳答案

您刚刚对 r、g、b 值求和,并未计算直方图。首先,正确计算直方图,然后卡方距离可以计算为 d(x,y) = sum( (xi-yi)^2/(xi+yi) )/2,其中 x 和 y 是直方图,并且i 是直方图的 bin 索引

关于java - 在Java中计算两个图像直方图之间的卡方距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011894/

相关文章:

java - 按照与 Eclipse 中的实现接口(interface)相同的顺序对方法进行排序

java - 银行识别码 validator

html - Polymer 1.x 使用纸张输入插入图像

python - 如何使用 Keras 进行离线图像增强?

java - 如何找出引用最多的类?

java - 如何捕捉在 Alfresco 的 Activiti 6 中发送电子邮件时发生的错误?

c# - 将 BitmapImage 字节数组转换为 Image 字节数组 (WinRT -> WinForms)

javascript - 将变量传递给代码 &lt;input type ="image"src ="imageSrc;">

python - TensorFlow 中图像分类的输入/输出形状错误

围绕任何 alpha 透明图像绘制轮廓或描边的算法