繁体   English   中英

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

[英]Calculate chi-squared distance between two image histograms in Java

我已经用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索引

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM