tenho que fazer uma media da moda com 9 valores de uma matriz 3x3. Valores são providos de um .getRed de objetos do tipo Color. Tenho 2 métodos um para calcular a media da moda e outro q usa esse valor como parametro para uma variavel Color e com ela fazer um setRgb em função de coordenadas de dois for. Ps: Primeiras e ultimas linhas e colunas são desconsideradas.
public static BufferedImage bandaModa3x3(BufferedImage imagem) throws IOException {
BufferedImage imagemGrey = bandaMedGrey(imagem);
for (int i = 1; i < imagem.getWidth() - 1; i++) {
for (int j = 1; j < imagem.getHeight() - 1; j++) {
int pixelRgbRed = (new Color(imagemGrey.getRGB(i - 1, j - 1))).getRed();
int pixelRgbRed1 = (new Color(imagemGrey.getRGB(i - 1, j))).getRed();
int pixelRgbRed2 = (new Color(imagemGrey.getRGB(i - 1, j + 1))).getRed();
int pixelRgbRed3 = (new Color(imagemGrey.getRGB(i, j - 1))).getRed();
int pixelRgbRed4 = (new Color(imagemGrey.getRGB(i, j))).getRed();
int pixelRgbRed5 = (new Color(imagemGrey.getRGB(i, j + 1))).getRed();
int pixelRgbRed6 = (new Color(imagemGrey.getRGB(i + 1, j - 1))).getRed();
int pixelRgbRed7 = (new Color(imagemGrey.getRGB(i + 1, j))).getRed();
int pixelRgbRed8 = (new Color(imagemGrey.getRGB(i + 1, j + 1))).getRed();
int[] Matrix = {pixelRgbRed, pixelRgbRed1, pixelRgbRed2, pixelRgbRed3, pixelRgbRed4, pixelRgbRed5, pixelRgbRed6, pixelRgbRed7, pixelRgbRed8};
System.out.println(Arrays.toString(Matrix));
**int mediaModa = mediaModa(Matrix);**
Color newColor = new Color(mediaModa, mediaModa, mediaModa);
imagemGrey.setRGB(i, j, newColor.getRGB());
System.out.println();
}
}
ImageIO.write(imagemGrey, "jpg", new File("C:\\Users\\n1col\\Pictures\\Camera Roll\\imagemModa3x3.jpg"));
return imagem;
}
public static int mediaModa(int[] Matrix) {
int nVezes = 1;
int moda = 0;
int comparaV = 0;
int qtdmodas = 0;
int mediaModa = 0;
int quociente = 0;
int[] listaModas = new int[Matrix.length];
for (int p = 0; p < Matrix.length; p++) {
nVezes = 1;
for (int k = p + 1; k < Matrix.length; k++) {
if (Matrix[p] == Matrix[k]) {
++nVezes;
}
}
if (nVezes > comparaV) {
moda = Matrix[p];
listaModas[qtdmodas] = moda;
comparaV = nVezes;
} else if (nVezes == comparaV) {
listaModas[qtdmodas] = Matrix[p];
qtdmodas++;
}
}
System.out.println(Arrays.toString(listaModas));
for (int k : listaModas) {
if (k != 0) {
mediaModa = mediaModa + k;
quociente++;
System.out.println(quociente);
}
}
if (qtdmodas > 0) {
mediaModa = mediaModa / quociente;
} else {
mediaModa = moda;
}
System.out.println(mediaModa);
return mediaModa;
}