gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:42:03 28 4
gpt4 key购买 nike

我用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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com