/** * @param P indeks analizowanego pixela * @param eps promień sąsiedztwa * @return lista sąsiadów danego pixela w zadanym promieniu eps */ private List<Integer> regionQuery(int P, double eps) { List<Integer> neighbours = new ArrayList<>(); double tmp; for (int i = 0; i < colors.length; i++) { if (P != i) { tmp = dist.compute(colors[P], colors[i]); if (tmp <= eps) neighbours.add(i); } } return neighbours; }
/** * Wyznacza reprezentanta danej grupy * * @param colors Lista kolorów należących do danej grupy * @return Kolor reprezentuący daną grupę */ public Color findRep(List<Color> colors) { double r = 0.0, g = 0.0, b = 0.0, dst = Double.POSITIVE_INFINITY, tmp; double s = (double) colors.size(); Color ret = new Color(0, 0, 0); for (Color c : colors) { r += c.vec[0]; g += c.vec[1]; b += c.vec[2]; } r /= s; g /= s; b /= s; Color crep = new Color((int) r, (int) g, (int) b); for (Color c : colors) { tmp = dist.compute(c, crep); if (tmp < dst) { dst = tmp; ret = c; } } return ret; }