Ciao provo ad aiutarti dandoti una possibile soluzione in Java. Prima di tutto facciamo una semplice formalizzazione :
abbiamo una matrice in input: M(axb)
M[i,j] sia un suo elemento sulla riga generica i e colonna j
definiamo un intorno di M[i,j]
I(i,j)={M[i-1,j-1] ,M[i-1,j] ,M[i-1,j+1],M[i,j-1],M[i,j+1],M[i+1,j-1],M[,i+1,j],M[i+1,j+1]}
con i vincoli che gli elementi che contengono gli indici i-1 , i+1 , j-1 e j+1 appartengono all'intorno solo se gli indici non violano le dimensioni di riga e colonna.
Possiamo realizzare un programma Java con il metodo richiesto facendo una iterazione della matrice per righe e colonne che ricava l'intorno di un elemento ed esegue la media:
public class Mat {
public static void main(String[] args) {
int[][] m ={ {100, 100 , 48 , 48},
{215 , 100 , 56 , 56},
{100 , 48 , 215 , 56},
{215 , 215, 56, 56}
};
int[][] n = filtroMedia(m);
for( int i=0 ; i<n.length; i++){
for(int j=0 ; j<n.length;j++){
System.out.print("["+n[j]+"]");
}
System.out.println();
}
}
public static int[][] filtroMedia(int[][] m) {
int[][] n;
if (m == null || m.length == 0) {
throw new IllegalArgumentException("Argomento null");
} else {
n = new int[m.length][m[0].length];
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m.length; j++) {
int somma = 0;
int dimensioneIntorno = 0;
if (i - 1 >= 0 ) {
somma = somma + m[i - 1][j];
dimensioneIntorno = dimensioneIntorno + 1;
if ( j - 1 >=0 ) {
somma = somma + m[i - 1][j-1];
dimensioneIntorno = dimensioneIntorno + 1;
}
if ( j + 1 < m.length) {
somma = somma + m[i - 1][j+1];
dimensioneIntorno = dimensioneIntorno + 1;
}
}
if (i + 1 < m.length) {
somma = somma + m[i + 1][j];
dimensioneIntorno = dimensioneIntorno + 1;
if (j-1 >=0) {
somma = somma + m[i + 1][j-1];
dimensioneIntorno = dimensioneIntorno + 1;
}
if (j + 1 < m.length) {
somma = somma + m[i + 1][j+1];
dimensioneIntorno = dimensioneIntorno + 1;
}
}
if (j - 1 >= 0 ) {
somma = somma + m[j - 1];
dimensioneIntorno = dimensioneIntorno + 1;
}
if ( j + 1 < m.length) {
somma = somma + m[i][j + 1];
dimensioneIntorno = dimensioneIntorno + 1;
}
n[i][j] = somma / dimensioneIntorno;
}
}
}
return n;
}
}
Sperando di aver capito e non commesso errori spero di esserti stato di aiuto.