Come posso escludere i bordi dal mio calcolo?
Te l'ho detto: supponendo che tu faccia due for (con x e y) per analizzare pixel per pixel, non devi fare altro che controllare se x==0 OPPURE x==width-1 OPPURE y==0 OPPURE y==height-1; in questo caso non devi applicare il filtro.
Se ci ragioni, i pixel sui bordi non hanno tutti gli 8 pixel adiacenti, quindi dovresti scrivere del codice aggiuntivo, solo per questi pixel, per determinare quanti pixel adiacenti ci sono.
Ma siccome normalmente su immagini di una certa dimensione neanche te ne accorgi di un bordo di 1 pixel, puoi tranquillamente accettare che il filtro non venga applicato sui bordi.
Quindi, se lavori solo all'interno, escludendo i bordi, sai che i pixel che tratterai hanno tutti 8 pixel adiacenti, 9 pixel da ordinare in tutto e per ottenere il mediano devi prendere il valore in posizione 4 dell'array ordinato.
per y che va da 0 a height-1
per x che va da 0 a widht-1
se x==0 OPPURE x==width-1 OPPURE y==0 OPPURE y==height-1
outputPixels[x + y * width] = valore RGB non modificato
altrimenti
// determinazione degli array ordinati
mediano = red[4] <<... + green[4] << ... + blue[4]<<...
outputPixels[x + y * width] = mediano