Sottocampionare un'immagine di un fattore intero


16

Quando si esegue il downsampling di un'immagine di un fattore intero , il metodo ovvio è impostare i pixel dell'immagine di output sulla media dei corrispondenti blocchi n × n nell'immagine di input.nn×n

Ricordo vagamente di aver letto da qualche parte che questo metodo non è ottimale (scusate non ricordo alcun dettaglio)

È vero che esiste un metodo migliore (e in tal caso, dove fallisce il metodo sopra descritto, anche se sembra "ovviamente" corretto)? Non so molto sull'elaborazione del segnale, questa domanda mi interessa solo.


se non si ha un background di elaborazione del segnale, la spiegazione dei laici è: Esistono metodi migliori per il downsampling. Il tuo algoritmo di downsampling tecnicamente ridurrà la dimensione dei pixel dell'immagine di N MA MA l'algoritmo sopra descritto sarà notevolmente degradato in termini di qualità rispetto ai migliori algoritmi di downsampling.
Trevor Boyd Smith,

Risposte:


16

Il downsampling di un'immagine riduce il numero di campioni che possono rappresentare il segnale. In termini di dominio della frequenza, quando un segnale viene sottoposto a downsampling, la porzione ad alta frequenza del segnale sarà aliasata con la porzione a bassa frequenza. Se applicato all'elaborazione delle immagini, il risultato desiderato è preservare solo la parte a bassa frequenza. Per fare ciò, l'immagine originale deve essere preelaborata (alias-filtrata) per rimuovere la porzione ad alta frequenza in modo che non si verifichi l'aliasing.


Il filtro digitale ottimale per rimuovere la parte ad alta frequenza (con il taglio più netto) è la funzione sinc . Il motivo è che la rappresentazione del dominio di frequenza della funzione Sinc è quasi 1 costante su tutta la regione a bassa frequenza e quasi 0 costante su tutta la regione ad alta frequenza.

sinc(X)=peccato(πX)πX

La risposta all'impulso del filtro sinc è infinita. Il filtro Lanczos è un filtro sinc modificato che attenua i coefficienti sinc e li tronca una volta che i valori scendono all'insignificanza.


Tuttavia, essere ottimali nel dominio della frequenza non implica essere ottimali negli occhi umani. Esistono metodi di upsampling e downsampling che non obbediscono alle trasformazioni lineari ma producono risultati migliori di quelli lineari.


n×n

Il requisito minimo nella corrispondenza delle coordinate è quello

  1. Il sovracampionamento di un'immagine contenente valori casuali arbitrari per un fattore intero, quindi il downsampling per lo stesso fattore intero, dovrebbe comportare la stessa immagine con una variazione minima numerica.
  2. Upsampling / downsampling di un'immagine consistente in un solo valore uniforme, seguito da un'operazione opposta, dovrebbe dare come risultato un'immagine dello stesso valore uniformemente, con scostamenti numerici minimi.
  3. L'applicazione ripetuta di coppie di upsampling / downsampling dovrebbe minimizzare il più possibile lo spostamento del contenuto dell'immagine.

Cosa intendi con la trasformazione della funzione sinc essendo "quasi" 1 e 0 nelle rispettive regioni?

@Tim: fenomeno di Gibbs vicino alla frequenza di taglio del filtro sinc.
rwong,

2
Il ricampionamento Sinc ha senso solo sui segnali che vengono percepiti / elaborati nel dominio della frequenza, come l'audio. Le immagini sono percepite, almeno approssimativamente, nel dominio spaziale (questo è discutibile; è possibile che una certa percezione di schemi ripetuti sia nel dominio della frequenza) e qualsiasi trasformazione basata sul dominio della frequenza produca brutte distorsioni (squillo, ecc.) Nel dominio spaziale. Fondamentalmente, qualsiasi convoluzione / operazione lineare con coefficienti negativi produrrà cattivi artefatti e qualsiasi con tutti i coefficienti non negativi produrrà sfocatura.
R .. GitHub smette di aiutare ICE il

6

Hai ragione sul fatto che la media dell'area è abbastanza vicina al "più corretto" che puoi ottenere, ma il problema è un comportamento incoerente quando si ridimensiona una linea N-larghezza netta di un fattore di N. Se la posizione della linea è allineata modulo N, otterrai una linea nitida di 1 pixel, ma se è approssimativamente N / 2 mod N, otterrai una linea molto sfocata (2 pixel di larghezza a metà intensità). Questo può sembrare molto brutto e, con una gamma non lineare, provocherà persino differenze di intensità. (Idealmente tutto il ricampionamento deve avvenire con la gamma corretta per una scala di intensità lineare, ma in pratica quasi nessuno lo fa perché è davvero costoso.)

Se vuoi migliorare questo, devi prima accettare il fatto che in alcuni casi è impossibile ridurre la sfocatura, quindi l'unico modo per ottenere un output uniforme consiste nell'aumentare la sfocatura. Il modo ideale è usare un kernel gaussiano con raggio maggiore di N / 2, piuttosto che una funzione di passaggio, come funzione di convoluzione con l'immagine sorgente. Un modo economico per affrontare un'approssimazione, tuttavia, se hai già l'implementazione della media dell'area N-per-N, è semplicemente applicare una convoluzione (1 / 4,1 / 2,1 / 4) alla risultante downsampling Immagine.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.