Come funziona davvero lo spostamento delle immagini subpixel con DFT?


12

Sto cercando di valutare la qualità di diversi metodi di interpolazione delle immagini per un'applicazione che prevede la generazione di immagini con spostamento dei subpixel. Pensavo di poter confrontare i risultati di uno spostamento subpixel usando tutte queste varianti di interpolazione con qualche immagine perfettamente spostata, ma probabilmente non è possibile ottenerlo (quale sarebbe la necessità di interpolazione allora?).

Stavo pensando di usare lo spostamento DFT + nel dominio della frequenza e non sono sicuro di come funzioni effettivamente rispetto all'interpolazione esplicita dell'immagine (usando bilineare, bicubico, ecc ...). Sono sicuro che non sia possibile generare un'immagine perfettamente spostata , ma non ci posso mettere sopra un dito. Lo spostamento di subpixel con DFT equivale ad applicare l'interpolazione e, in caso affermativo, quale? Qual è la distorsione dei valori dei pixel nelle immagini ottenute usando questo metodo? Grazie!

EDIT: Dopo aver riflettuto sulla questione, ho capito che la FFT è un'approssimazione (ancor più della DFT) della funzione originale in termini di armoniche (funzioni sinusoidali), che equivarrebbe a una sorta di interpolazione trigonometrica. Ricordo una formula di "interpolazione di serie di Fourier" per dati discreti che era un'interpolazione trigonometrica, ma non sono sicuro che sia collegato.


La trasformata di Fourier veloce (FFT) è un algoritmo per la trasformata di Fourier discreta. Il DFT non è un'approssimazione della funzione originale in termini di armoniche, ma piuttosto una proiezione di un segnale su una complessa base ortogonale esponenziale.
Bryan,

Va bene, ma il segnale stesso è un'approssimazione campionata e quantizzata di una certa distribuzione di intensità e il DFT è limitato rispetto al contenuto armonico rispetto a quella distribuzione teorica. Puoi ottenere il segnale esatto da IDFT, ma ci saranno dei pregiudizi se fai cose (come lo spostamento) su di esso prima che IDFT lo ricolleghi. Oppure mi sfugge qualcosa?
Neuviemeporte,

Il DFT prende effettivamente input discretizzati, ma non si limita agli input quantizzati. Qual è il segnale non importa. Come hai sottolineato, puoi ottenere il segnale esatto. Tuttavia, non sono sicuro di cosa intendi per "spostamento". Le proprietà di spostamento nel dominio della frequenza sono ben note (traduzione in frequenza complessa nel dominio del tempo). Se il tuo desiderio è di spostarti nel dominio del "tempo", allora devi pensare al doppio DFT di quello.
Bryan,

1
Voglio dire che se eseguo un'operazione sul DFT di un segnale (come nel mio caso - spostamento subpixel di un'immagine nel "dominio pixel" usando il teorema dello spostamento di Fourier), l'IDFT restituirà risultati interpolati come spiegato da @ hotpaw2 risposta. Questa interpolazione è imperfetta perché il segnale non è limitato dalla banda e il DFT stesso è stato calcolato da un set finito di campioni quantizzati (0-255).
neuviemeporte,

Risposte:


4

Un DFT / FFT, oltre a zero-padding aggiunto nel dominio della frequenza, quindi un IDFT / IFFT più lungo, restituisce punti interpolati. Questi punti saranno interpolati usando un periodico kernel Sinc, che è una perfetta interpolazione per i dati originali che è strettamente limitata alla banda inferiore alla metà della frequenza di campionamento originale. Tuttavia, i dati verranno elaborati come se fossero avvolti in modo circolare, il che potrebbe produrre risultati strani ai bordi di alcune immagini. Quindi potresti voler riempire i bordi della fonte originale con un buon riempitivo o un colore di inquadratura prima dell'interpolazione.

Se esegui il upsamping di 2X (azzera l'FFT per raddoppiare la lunghezza prima dell'IFFT), puoi fare uno spostamento di mezzo pixel usando i punti interpolati. 3X per un terzo spostamento di pixel, ecc. Per lo spostamento, è possibile eliminare i punti originali più eventuali punti interpolati in eccesso per ottenere la dimensione desiderata.


5
@ hotpaw2: il kernel interpolato per il DFT non è un sinc () di estensione infinita, in effetti il ​​DFT è una trasformazione discreta e finita. L'interpolazione del DFT equivale alla convoluzione con il kernel di Dirichlet, chiamato anche periodic sinc () da alcuni autori: en.wikipedia.org/wiki/Dirichlet_kernel
Arrigo,

@Arrigo: Accetto. Risposta modificata da correggere.
hotpaw2,

@ hotpaw2: quando pad FFT a dimensioni doppie, l'IFFT produrrà una ricostruzione di dimensioni doppie. Non sei sicuro di cosa fare con il surplus? Grazie
neuviemeporte il

Butta via i punti in eccesso che non ti servono. In un upcampione 2X, ogni altro viene spostato, alternandosi ai punti originali ricostruiti. In un upcampione 3X, si ottengono 2 punti spostati (di 1/3 e di 2/3) in alternanza con gli originali. Ecc. Più si campiona, più si butta via.
hotpaw2,

7

Esistono diverse informazioni chiave necessarie per comprendere in che modo DFT consente di spostare un'immagine.

Innanzitutto, la teoria di Fourier: probabilmente è più facile esaminare prima il caso continuo (cioè, analogico). Immagina di avere qualche funzione, chiamala g (t). Per semplicità, supponiamo che g (t) sia una registrazione audio analogica, quindi è una funzione monodimensionale, che è continua e rappresenta la pressione istantanea in funzione del tempo.

Ora, g (t) è un modo in cui possiamo rappresentare la nostra registrazione audio. Un altro è G (f). G (f) è la trasformata di Fourier di g (t). Quindi, G (f) == FT (g (t)). G (f) ha tutte le stesse informazioni di g (t), ma rappresenta tali informazioni nel dominio della frequenza anziché nel dominio del tempo. Ci sono alcuni dettagli pignoli sulle trasformazioni di Fourier, che non menzionerò.

Puoi pensare a G (f) come alla "distribuzione delle frequenze" contenuta in g (t). Quindi, se g (t) è un'onda sinusoidale (cioè un tono puro), allora G (f) sarà zero ovunque, tranne alla frequenza di quel tono. Questo è probabilmente un buon punto per menzionare che G (f) è in generale una funzione complessa - vale a dire che restituisce numeri complessi, che si può pensare di avere una componente reale e immaginaria o una grandezza e una fase.

δ(w)δ

Ok, quindi ora abbiamo FT continui sotto la nostra cintura.

Ecco la seconda intuizione: una trasformata discreta di Fourier è verso una trasformata di Fourier come un segnale campionato è verso un segnale analogico. In questo caso, il "discreto" si riferisce alla quantizzazione del dominio della funzione (tempo o frequenza), non al suo intervallo. (Il segnale digitale campionato che ricevi dalla tua scheda audio è quantizzato sia nel dominio che nell'intervallo.)

Il flusso di byte digitale che si ottiene dalla scheda audio contiene "campioni" del segnale continuo (analogico) originale dal microfono. Se prendiamo il DFT del nostro campione g (t), otteniamo ancora un G (f). G (f), ricorda, è solo un modo diverso di rappresentare le informazioni contenute in g (t). Se abbiamo obbedito alla teoria di Nyquist , il segnale campionato g (t) contiene tutta l '"intelligenza" del segnale continuo originale, quindi il nostro discreto G (f) deve contenere tutte le informazioni dal nostro segnale continuo originale. Tra parentesi, G (f) è ancora una funzione complessa.

È qui che entra in gioco la magia dello spostamento dei sub-pixel, ma in questo caso scriverò di spostare il segnale audio nel tempo di meno di un campione, poiché è la stessa cosa.

eioπ2

Ciò significa che possiamo spostare la nostra registrazione audio nel tempo (di qualsiasi quantità scegliamo, inclusa una frazione del tempo di campionamento) semplicemente modificando la fase di G (t). In realtà, questa affermazione è forse un po 'troppo casuale. Per un segnale campionato non quantizzato, la fase può essere regolata arbitrariamente (questo è uno dei motivi per cui ho fatto la distinzione tra quantizzazione di dominio e intervallo prima). Tuttavia, per un segnale campionato quantizzato (il nostro flusso di byte di audio, ad esempio) la dimensione del passo di quantizzazione (cioè il numero di bit) determina la risoluzione con cui possiamo regolare la fase. Quando invertiamo la trasformata di Fourier G (f) (o DIFT, per questo segnale campionato), il nuovo set di campioni g '(t) = DIFT (G (F)) verrà spostato nel tempo della quantità che selezioniamo.

Applicarlo ai pixel significa semplicemente usare un FT bidimensionale invece del FT monodimensionale discusso qui.

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.