jaki jest pomysł na skalowanie obrazu za pomocą lanczos?

Interesują mnie algorytmy skalowania obrazów i zaimplementowałem metody dwuliniowe i dwuliniowe. Jednak słyszałem o lanczos i innych bardziej wyrafinowanych metodach jeszcze wyższej jakości skalowania obrazu i jestem bardzo ciekawy, jak one działają.

Czy ktoś mógłby wyjaśnić podstawową ideę skalowania obrazu za pomocą lanczos (zarówno skalowanie w górę, jak i w dół) i dlaczego skutkuje to wyższą jakością?

Mam doświadczenie w analizie Fouriera i zrobiłem jakiś sygnał przetwarzanie rzeczy w przeszłości, ale nie w odniesieniu do przetwarzania obrazu, więc nie bój się używać terminów takich jak "Pasmo przenoszenia" i takich w swojej odpowiedzi:)

EDIT: myślę, że to, co naprawdę chcę wiedzieć, to koncepcja i teoria za pomocą filtra splotowego dla interpolacji.

(uwaga: czytałem już artykuł na Wikipedii o resamplingu lanczosa, ale nie miał on dla mnie wystarczająco dużo szczegółów)

Wielkie dzięki!

Author: Juha Syrjälä, 2009-12-06

1 answers

[1]}wybór konkretnego filtra do przetwarzania obrazu jest czymś w rodzaju czarnej sztuki, ponieważ główne kryterium oceny wyniku jest subiektywne: w grafice komputerowej ostateczne pytanie brzmi prawie zawsze: "czy wygląda dobrze?". Istnieje wiele dobrych filtrów, a wybór między najlepszymi często sprowadza się do oceny.

To powiedziawszy, przejdę do jakiejś teorii...

Ponieważ znasz analizę Fouriera dla sygnału przetwarzanie, tak naprawdę nie trzeba wiedzieć dużo więcej, aby zastosować go do przetwarzania obrazu-wszystkie filtry natychmiastowego zainteresowania są "rozdzielne", co w zasadzie oznacza, że można je stosować niezależnie w kierunkach x i Y. Redukuje to problem resamplingu obrazu (2-D) do problemu resamplingu sygnału (1-D). Zamiast funkcji czasu (t), twój sygnał jest funkcją jednej z osi współrzędnych (powiedzmy, x); Wszystko inne jest dokładnie takie samo.

Ostatecznie powód jeśli zmniejszasz rozdzielczość, musisz odfiltrować oryginalne dane o wysokiej częstotliwości, których nowa, niższa rozdzielczość nie obsługuje, lub zostaną dodane do niepowiązanych częstotliwości.

Więc. Podczas filtrowania niechcianych częstotliwości z oryginału, chcesz zachować jak najwięcej oryginalnego sygnału, jak to możliwe. Ponadto nie chcesz zniekształcić sygnału, który zachowujesz. Wreszcie chcesz zgasić niechciane częstotliwości tak całkowicie, jak to możliwe. Oznacza to teoretycznie, że dobrym filtrem powinna być funkcja " box " w przestrzeni częstotliwości: z zerową odpowiedzią dla częstotliwości powyżej granicy, odpowiedzią jedności dla częstotliwości poniżej granicy i funkcją kroku pomiędzy. I, teoretycznie, ta odpowiedź jest osiągalna: jak być może wiesz, prosty filtr sinc da ci dokładnie to.
Są z tym dwa problemy. Po pierwsze, prosty filtr sinc jest nieograniczony i nie spada off bardzo szybko; oznacza to, że robi proste splot będzie bardzo powolny. Zamiast bezpośredniego splatania, szybsze jest użycie FFT i filtrowanie w przestrzeni częstotliwości...

Jednakże, jeśli faktycznie używasz prostego filtra sinc, problem polega na tym, że nie wygląda on zbyt dobrze! Jak mówi pytanie pokrewne, percepcyjnie istnieją artefakty dzwonienia i praktycznie nie ma całkowicie zadowalającego sposobu radzenia sobie z wartościami ujemnymi, które wynikają z "undershoot"

Na koniec: jednym ze sposobów radzenia sobie z tym problemem jest rozpoczęcie od filtra sinc (ze względu na jego dobre właściwości teoretyczne) i dostosowanie go, aż będziesz miał coś, co rozwiąże Twoje inne problemy. W szczególności, to da ci coś takiego jak filtr Lanczos:

Lanczos filter:       L(x)     = sinc(pi x) sinc(pi x/a) box(|x|<a)
frequency response: F[L(x)](f) = box(|f|<1/2) * box(|f|<1/2a) * sinc(2 pi f a)

    [note that "*" here is convolution, not multiplication]
       [also, I am ignoring normalization completely...]

Proszę pamiętać, że nie ma magii o tym wszystkim. Istnieje wiele różnych okien dostępnych, które działają tak samo dobrze. Ponadto, dla a=1 i 2, Pasmo przenoszenia nie przypomina funkcji krokowej. Mam jednak nadzieję, że to odpowie na twoje pytanie "dlaczego sinc" i da ci pojęcie o odpowiedziach częstotliwościowych i tak dalej.

 34
Author: comingstorm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-09 17:32:36