Filtro Mediana

Estou fazendo um filtro mediana em java pra suavizar os ruídos de uma imagem
Mas sempre que executo recebo o seguinte erro:
Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 9

public BufferedImage filtroMediana() {
this.cinza = new int[qtdeColunas][qtdeLinhas];
    for (int i = 0; i < qtdeColunas; i++) {
        for (int j = 0; j < qtdeLinhas; j++) {
            cinza[i][j] = (R[i][j] + G[i][j] + B[i][j]) / 3;
        }
    }
    int a = 0;
    int[] vet;
    int[] vet2;
    vet2 = new int [9];
    vet = new int[9];
    BufferedImage img2 = new BufferedImage(this.qtdeColunas, this.qtdeLinhas, BufferedImage.TYPE_INT_RGB);
    for (int i = 1; i < qtdeColunas - 1; i++) {
        for (int j = 1; j < qtdeLinhas - 1; j++) {
            int media = 0;
            for (int coluna = i - 1; coluna <= i + 1; coluna++) {
                for (int linha = j - 1; linha <= j + 1; linha++) {
                    vet[a] = cinza[coluna][linha];
                    a++;
                }
            }
            for (int coluna = i - 1; coluna <= i + 1; coluna++) {
                for (int linha = j - 1; linha <= j + 1; linha++) {
                    img2.setRGB(coluna, linha, new Color(vet[5], vet[5], vet[5]).getRGB());
                }
            }
        }

    }
    return img2;
}

Fazendo a depuração, vi que o vetor está sempre recebendo o mesmo valor, sendo que a matriz tem valores diferentes. Alguém poderia me ajudar a encontrar o erro?

Cara da uma formatada no código pra gente vai? use o Texto pré formatado (selecione o código e clique nessa opção…)

Quanto ao erro ArrayIndexOutOfBoundsException, voce está estourando a capacidade do array…

eu vi isso
mas como eu tô tentar pegar somente uma matriz 3X3 da matriz da imagem e armazenar os valores dessa matriz 3X3 no vetor e realizar a mediana

Provavemente o erro está nesse trecho nos dois fors:

coluna <= i + 1

Quando chegar a ultima coluna do vetor, vc ta pedindo ultima + 1 isso ja causa o estouro…

Para testar a ultima coluna vc pode tentar assim:

coluna <= i + 1 && i < vetor.length

Ou melhor ainda, deixar o teste de coluna em um if dentro do for, assim terá melhor controle e evita estouro de posição do vetor…

if (i < vetor.length - 1 && coluna <= i + 1) {
//…
}

Algo nesse sentido… e a mesma regra se aplica às linhas, outra coisa…

Esse trecho também pode causar estouro:

int coluna = i - 1;

Sempre vc tem que ficar atento às “pontas” do vetor, o estouro não é causado só por tentar acessar uma posição maior, mas menor também…

Deu certo sua dica
Mas agora tá deixando a imagem quase que totalmente preta

Talvez minha mediana esteja errada mas eu segui o metodo que é quando pegar o valor do meio

Aí a lógica do RGB é contigo, tentei apenas te alertar quanto ao acesso do vetor… sucesso!