Существует очевидная ошибка в коде во всех 4 циклах, которые вы используете для накопления значений для данного t
:
for(int i =1; i <=t; i++) {
sum+= i*hist[i];
}
for(int i =1; i <=t; i++) {
wB += hist[i];
}
sum
и wB
не сбрасываются до того, как этициклы, означающие, что для каждого нового t
вы добавляете эти значения к значениям, вычисленным для предыдущего t
.Правильно:
sum = 0;
wB = 0;
for(int i =1; i <=t; i++) {
sum+= i*hist[i];
wB += hist[i]; // (also no need for looping twice over `hist`)
}
Два других цикла:
for(int i =1; i <=t; i++) {
varb += (i-mB)*(i-mB)*(hist[i]/N)/wB;
}
for(int i =t+1; i <256; i++) {
varb += (i-mF)*(i-mF)*(hist[i]/N)/wF;
}
Здесь происходит то же самое, но вы также дважды используете varb
и никогда не используете varf
.Правильно:
varb = 0;
varf = 0;
for(int i =1; i <=t; i++) {
varb += (i-mB)*(i-mB)*(hist[i]/N)/wB;
}
for(int i =t+1; i <256; i++) {
varf += (i-mF)*(i-mF)*(hist[i]/N)/wF;
}
Ваш код не показывает, где вы вычисляете sumGrayvalues
и mitt
, давайте предположим, что вы все сделали правильно.Затем вы также можете увидеть, что sum
и wB
можно вычислить из предыдущей итерации t
, добавив только один элемент из hist
.
(я не запускал кодЯ не занимаюсь Java, поэтому не уверен, есть ли другие проблемы.)