Jak naprawdę działa przesunięcie obrazu subpikseli za pomocą DFT?


12

Próbuję ocenić jakość kilku metod interpolacji obrazu dla aplikacji, która wymaga generowania obrazów z przesunięciem subpikseli. Pomyślałem, że mogę porównać wyniki przesunięcia subpiksela za pomocą wszystkich tych wariantów interpolacji z jakimś idealnie przesuniętym obrazem, ale prawdopodobnie nie jest możliwe uzyskanie go (jaka byłaby wtedy potrzeba interpolacji?).

Myślałem o zastosowaniu przesunięcia DFT + w dziedzinie częstotliwości i nie jestem pewien, jak to naprawdę działa w porównaniu do jawnej interpolacji obrazu (za pomocą dwuliniowej, dwububowej itp.). Jestem pewien, że nie może wygenerować idealnie przesuniętego obrazu , ale nie mogę położyć na tym palca. Czy przesuwanie podpikseli z DFT jest równoważne stosowaniu interpolacji, a jeśli tak, to który? Jaki jest błąd wartości pikseli w obrazach uzyskanych tą metodą? Dzięki!

EDYCJA: Po przemyśleniu sprawy doszedłem do wniosku, że FFT jest przybliżeniem (a tym bardziej DFT) pierwotnej funkcji pod względem harmonicznych (funkcji sinusoidalnych), że sprowadzałoby się to do pewnego rodzaju interpolacji trygonometrycznej. Pamiętam formułę „interpolacji szeregów Fouriera” dla danych dyskretnych, która była interpolacją trygonometryczną, ale nie jestem pewien, czy jest ona połączona.


Szybka transformata Fouriera (FFT) to algorytm dyskretnej transformaty Fouriera. DFT nie jest przybliżeniem pierwotnej funkcji pod względem harmonicznych, ale raczej rzutem sygnału na złożoną wykładniczą podstawę ortogonalną.
Bryan,

Okej, ale sam sygnał jest próbkowanym i kwantowanym przybliżeniem pewnego rozkładu intensywności, a DFT jest ograniczony pod względem zawartości harmonicznych w porównaniu do tego teoretycznego rozkładu. Możesz odzyskać dokładny sygnał z IDFT, ale będzie pewne odchylenie, jeśli zrobisz coś (np. Przesunięcie) do niego przed IDFT z powrotem. A może coś mi brakuje?
neuviemeporte

DFT rzeczywiście przyjmuje dane dyskretne, ale nie ogranicza się do danych kwantyzowanych. Jaki sygnał jest bez znaczenia. Jak już zauważyłeś, możesz odzyskać dokładny sygnał. Nie jestem jednak pewien, co rozumiesz przez „przesunięcie”. Właściwości przesunięcia w dziedzinie częstotliwości są dobrze znane (złożone tłumaczenie częstotliwości w dziedzinie czasu). Jeśli chcesz przesunąć się w domenie „czasu”, musisz pomyśleć o podwójnym tego DFT.
Bryan

1
Mam na myśli, że jeśli wykonam jakąś operację na DFT sygnału (jak w moim przypadku - przesunięcie subpiksela obrazu w „domenie pikseli” za pomocą twierdzenia przesunięcia Fouriera), to IDFT zwróci wyniki interpolowane, jak wyjaśniono w @ hotpaw2 odpowiedź. Ta interpolacja jest niedoskonała, ponieważ sygnał nie jest ograniczony pasmem, a sam DFT został obliczony na podstawie skończonego zestawu skwantowanych (0–255) próbek.
neuviemeporte

Odpowiedzi:


4

DFT / FFT, plus dodane wypełnienie zerami w dziedzinie częstotliwości, a następnie dłuższy IDFT / IFFT, zwraca punkty interpolowane. Punkty te będą interpolowane przy użyciu okresowego jądra Sinc, które jest idealną interpolacją dla oryginalnych danych, które są ściśle ograniczone do pasma poniżej połowy oryginalnej częstotliwości próbkowania. Dane będą jednak traktowane tak, jakby były owinięte kołowo, co może powodować dziwne wyniki na krawędziach niektórych zdjęć. Przed interpolacją możesz więc wypełnić krawędzie oryginalnego źródła ładnym wypełnieniem lub kolorem.

Jeśli próbkujesz 2-krotnie (zero-pad FFT, aby podwoić długość przed IFFT), możesz wykonać przesunięcie o pół piksela za pomocą interpolowanych punktów. 3X dla trzeciego przesunięcia pikseli itp. W celu przesunięcia możesz wyrzucić oryginalne punkty plus wszelkie nadwyżki interpolowanych punktów, aby uzyskać pożądany rozmiar.


5
@ hotpaw2: jądro interpolujące dla DFT nie jest sinc () o nieskończonym stopniu, w rzeczywistości DFT jest dyskretną, skończoną transformacją. Interpolacja przez DFT jest równoważna splotowi z jądrem Dirichleta, zwanym również przez niektórych autorów okresowym sinc () : en.wikipedia.org/wiki/Dirichlet_kernel
Arrigo

@Arrigo: Zgadzam się. Edytowana odpowiedź do naprawy.
hotpaw2

@ hotpaw2: kiedy wstawię FFT do dwukrotności rozmiaru, IFFT da rekonstrukcję dwukrotnie większą. Nie wiesz, co zrobić z nadwyżką? Dzięki
neuviemeporte

Wyrzuć nadwyżkę punktów, których nie potrzebujesz. W dwukrotnej próbie, co drugi jest przesuwany, naprzemiennie z zrekonstruowanymi oryginalnymi punktami. W próbce 3X otrzymujesz 2 przesunięte punkty (o 1/3 i 2/3) na przemian z oryginałami. Itd. Im więcej próbujesz, tym więcej wyrzucasz.
hotpaw2

7

Istnieje kilka kluczowych informacji potrzebnych do zrozumienia, w jaki sposób DFT umożliwia przesunięcie obrazu.

Po pierwsze, teoria Fouriera: Prawdopodobnie łatwiej jest najpierw spojrzeć na przypadek ciągły (tj. Analogowy). Wyobraź sobie, że masz jakąś funkcję, nazwij to g (t). Dla uproszczenia załóżmy, że g (t) jest analogowym nagraniem audio, więc jest to jednowymiarowa funkcja, która jest ciągła i reprezentuje chwilowe ciśnienie w funkcji czasu.

Teraz g (t) to jeden ze sposobów reprezentowania naszego nagrania audio. Kolejnym jest G (f). G (f) jest transformatą Fouriera g (t). Zatem G (f) == FT (g (t)). G (f) ma wszystkie te same informacje co g (t), ale reprezentuje tę informację w dziedzinie częstotliwości zamiast dziedziny czasu. Jest kilka drobiazgowych szczegółów na temat Transformacji Fouriera, o których nie wspomnę.

Możesz pomyśleć o G (f) jako o „rozkładzie częstotliwości” zawartym w g (t). Tak więc, jeśli g (t) jest falą sinusoidalną (tj. Czystym tonem), to G (f) będzie wszędzie zerowe, z wyjątkiem częstotliwości tego tonu. Prawdopodobnie warto wspomnieć, że G (f) jest ogólnie funkcją złożoną - to znaczy, że zwraca liczby zespolone, o których można myśleć, że mają rzeczywisty i wymyślony składnik lub wielkość i fazę.

Jedna mała dygresja tutaj: Ponieważ g (t) jest ciągłe (zarówno w dziedzinie, jak i zakresie), G (f) jest również ciągłe. Jak więc G (f) może być zerowe wszędzie oprócz częstotliwości tonowej? Cóż, FT (sin (wt)) = . Gdzie to funkcja delta Diraca .δδ(w)δ

Ok, więc teraz mamy ciągłe FT pod pasem.

Oto drugi wgląd: Dyskretna transformata Fouriera dotyczy transformaty Fouriera, podobnie jak próbkowany sygnał jest analogiczny. W tym przypadku „dyskretny” odnosi się do kwantyzacji dziedziny funkcji (czas lub częstotliwość), a nie jej zakresu. (Próbkowany sygnał cyfrowy otrzymywany z karty dźwiękowej jest kwantyzowany zarówno w dziedzinie, jak i zakresie).

Cyfrowy strumień bajtów otrzymany z karty dźwiękowej zawiera „próbki” oryginalnego ciągłego (analogowego) sygnału z mikrofonu. Jeśli weźmiemy DFT naszego próbkowanego g (t), nadal otrzymujemy G (f). Pamiętaj, że G (f) to po prostu inny sposób przedstawienia informacji zawartych w g (t). Jeśli zastosowaliśmy się do teorii Nyquista , próbkowany sygnał g (t) zawiera całą „inteligencję” pierwotnego sygnału ciągłego, więc nasza dyskretna G (f) musi zawierać wszystkie informacje z naszego oryginalnego sygnału ciągłego. W nawiasach G (f) jest nadal funkcją złożoną.

To tutaj pojawia się magia przesunięcia subpikseli, ale w tym przypadku napiszę o przesunięciu sygnału audio w czasie o mniej niż próbkę, ponieważ jest to ta sama rzecz.

eiπ2

Oznacza to, że możemy przesunąć nagranie audio w czasie (o dowolną kwotę, w tym ułamek czasu próbkowania), po prostu modyfikując fazę G (t). W rzeczywistości to stwierdzenie jest może nieco zbyt swobodne. W przypadku niekwantowanego, próbkowanego sygnału fazę można dowolnie dostosować (jest to część powodu, dla którego wcześniej rozróżniałem kwantyzację domeny i zakresu). Jednak w przypadku kwantowanego próbkowanego sygnału (na przykład naszego bajtowego strumienia audio) rozmiar kroku kwantyzacji (tj. Liczba bitów) określa rozdzielczość, z jaką możemy regulować fazę. Kiedy odwrócimy transformatę Fouriera G (f) (lub DIFT, dla tego próbkowanego sygnału), nowy zestaw próbek g '(t) = DIFT (G (F)) zostanie przesunięty w czasie o wybraną wartość.

Zastosowanie tego do pikseli oznacza po prostu użycie 2-wymiarowej FT zamiast 1-wymiarowej FT omówionej tutaj.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.