Я использую открытый исходный код Conrad и хочу вычислить гистограмму изображения.Для этого сначала я нашел минимальное и максимальное значения моего изображения и диапазон = max-min, а затем нижний предел и верхний предел точно по этой ссылке https://www2.southeastern.edu/Academics/Faculty/dgurney/Math241/StatTopics/HistGen.htm
Теперь моя проблема в том, какможет ли программа разделить диапазон в соответствии с шириной ячейки и как я могу назначить каждое значение изображения для каждой ширины ячейки (классы).
public static int[] computeHistogram2D(Grid2D grid, int bins, int width, int heigth) {
float val = 0;
float max = -Float.MAX_VALUE;
float min = Float.MAX_VALUE;
for (int i = 0; i < width; i++) {
for (int j = 0 ; j < heigth; j++) {
val = grid.getAtIndex(i, j);
if (val > max) {
max = val;
}
if (val < min) {
min = val;
}
}
}
int[] histo = new int[bins];
double[] histof = new double[bins];
float range = max - min;
float lowerLimit = range/(float)bins;
float upperBound = range / (float) (bins -1);
//float binWidth =( upperBound - lowerLimit)/bins;
for (int i = 0; i < width; i++) {
for (int j = 0 ; j < heigth; j++) {
val = grid.getAtIndex(i, j);
int b = (int) ((val - min) / upperBound);
histo[b]++;
histof[b]++;
System.out.println(" intervals " + b );
}
}
System.out.println("maxValgrid2D: " +max + " minValGrid2D: " + min + " binWidth "+ upperBound);
VisualizationUtil.createPlot(histof, "Histogram2D", "intensity", "count").show();
return histo;
}
Это то, что я получил в результате,что кажется неправильным, потому что максимальное значение моей картинки 21,12
Что я ожидаю получить