Per alcuni tipi di dati, puoi ottenere filtraggio mediano a tempo costante (Perreault et al, 2007) .
Questo documento descrive il filtro mediano 2D sulle immagini, assumendo che i pixel siano numeri interi a 8 bit.
Si noti che "tempo costante" si riferisce al tempo costante nella dimensione della finestra; non è un tempo costante nella dimensione dei dati o nella precisione (bit) dei dati. Come spiegato di seguito, l'utilizzo di questo algoritmo con dati di alta precisione aumenterà drasticamente l'utilizzo della memoria dall'algoritmo, a causa dell'istogramma.
In primo luogo è necessario comprendere gli istogrammi a più livelli.
- Quando l'alfabeto (il set di valori di pixel consentiti) ha 256 simboli, l'istogramma ha 256 bin.
- Un istogramma multi-livello per 256 bin avrà due livelli. Il primo livello avrà 16 bin e il secondo livello avrà i 256 contenitori completi.
- Ciascuno dei 16 contenitori di primo livello corrisponde a circa 16 contenitori consecutivi nel secondo livello, nel modo più diretto.
- Ogni operazione di incremento (add-sample) incrementerà il bin al secondo livello, nonché uno dei 16 bin al primo livello.
- Allo stesso modo, l'operazione di decremento (rimozione-campione) ridurrà un bin sia sul primo che sul secondo livello.
- Quando è necessario cercare la mediana, si cercherà prima tra i raccoglitori di primo livello, poiché ce ne sono meno. Una volta trovato il raccoglitore di primo livello corretto, uno cercherà tra i 16 bidoni di secondo livello, dove è garantito che uno di quelli conterrà la mediana.
- Da questo, puoi capire perché la complessità temporale dell'algoritmo è proporzionale al numero di bit nella precisione dei dati.
- Quindi, per ogni dimensione di dati, manterrai l'istogramma per una finestra scorrevole, ogni volta aggiungendo un campione e rimuovendo un campione.
- Se i dati hanno più dimensioni, sarà necessario mantenere una matrice di istogrammi (pari a quella dell'ingresso nella prima dimensione).
Ovviamente questo cresce rapidamente per dimensioni maggiori, ma per alcune combinazioni di dimensioni di input e dimensioni delle finestre, questo schema risulta avere prestazioni migliori rispetto agli approcci precedentemente noti.
Se questo algoritmo può essere utilizzato nella tua applicazione dipenderà dal tipo di dati che devi ordinare.
Ad esempio, se i tuoi dati contengono numeri interi a 32 bit e tutti i 2^32
di valori diversi hanno ugualmente probabilità di apparire nei dati, allora avrai bisogno di un istogramma con 2^32
bin, che è un requisito un po 'folle, ma potrebbe essere ancora fattibile. Se i tuoi dati contengono valori in virgola mobile a precisione doppia IEEE e probabilmente tutti i valori di 1023 * 2^52
si verificano, l'istogramma apparentemente non si adatta a nessun tipo di computer attualmente disponibile.
Puoi ridurre il numero di contenitori di istogrammi necessari abbassando la risoluzione (precisione) dei tuoi dati.