Preciso de ajuda para conseguir a moda de uma matriz 3X3

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;
}