Biorąc pod uwagę obraz z liczbami całkowitymi , interpolację tego obrazu w dowolnym dowolnym punkcie można zapisać jakoja( m , n )m , nm′, n′
ja~( m′, n′) = ∑m = ⌊ m′⌋ -w+1⌊ m′⌋ +w ∑n = ⌊ n′⌋ -w+1. N′⌋ +wja( m , n ) f ( m′- m , n′- n )
Wynik jest nadal jedynie przybliżeniem do prawdziwego podstawowego obrazu ciągłego a wszystko, co robią różne funkcje interpolacji, to zminimalizowanie błędu aproksymacji przy różnych ograniczeniach i celach.ja~ja( x , y)
W przetwarzaniu sygnału chciałbyś, aby funkcja interpolująca była idealnym filtrem dolnoprzepustowym. Jednak jego odpowiedź częstotliwościowa wymaga nieskończonego wsparcia i jest użyteczna tylko dla sygnałów o ograniczonym paśmie. Większość obrazów nie jest ograniczona pasmem, a przy przetwarzaniu obrazów należy wziąć pod uwagę inne czynniki (takie jak to, jak oko interpretuje obrazy. To, co jest matematycznie optymalne, może nie być atrakcyjne wizualnie). Wybór funkcji interpolacji, podobnie jak funkcji okna , zależy w dużym stopniu od konkretnego konkretnego problemu. Nie słyszałem o Connesie, Welchu i Parzenu (być może są one specyficzne dla domeny), ale pozostałe powinny być 2-D odpowiednikami funkcji matematycznych dla okna 1-D podanego w linku do Wikipedii powyżej.fa( m , n )
Podobnie jak w przypadku funkcji okna dla sygnałów czasowych, łatwo jest zrozumieć, co robi jądro interpolujące obraz, patrząc na jego odpowiedź częstotliwościową. Z mojej odpowiedzi na temat funkcji okna :
Dwa podstawowe czynniki opisujące funkcję okna to:
- Szerokość głównego płata (tj. Przy jakim przedziale częstotliwości jest moc połową mocy maksymalnej odpowiedzi)
- Tłumienie płatów bocznych (tj. Jak daleko w dół znajdują się płaty boczne od płata głównego). To mówi o wycieku widmowym w oknie.
Dotyczy to w zasadzie jąder interpolacyjnych. Wybór jest w zasadzie kompromisem między filtrowaniem częstotliwości (tłumienie linii bocznych), lokalizacją przestrzenną (szerokość płata głównego) i redukowaniem innych efektów, takich jak dzwonienie (efekt Gibbs), aliasing, rozmycie itp. Na przykład jądro z oscylacjami takimi ponieważ jądro sinc i jądro Lanczos4 wprowadzą na obrazie „dzwonienie” , podczas gdy ponowne próbkowanie Gaussa nie wprowadzi dzwonienia.
Oto uproszczony przykład w Mathematica, który pozwala zobaczyć efekty różnych funkcji interpolacji:
true = ExampleData[{"TestImage", "Lena"}];
resampling = {"Nearest", "Bilinear", "Biquadratic", "Bicubic",
"Gaussian", "Lanczos", "Cosine", "Hamming", "Hann", "Blackman",
"Bartlett", "Connes", "Welch", "Parzen", "Kaiser"};
small = ImageResize[true, Scaled[1/4]];
Tutaj true
reprezentuje obraz, który uważam za dyskretny odpowiednik „dokładnego” obrazu , i reprezentuje obraz w mniejszej skali (nie wiemy jak to zrobić Otrzymano). Będziemy interpolować przez 4x, aby dać który ma taki sam rozmiar jak oryginał. Poniżej pokazuję wyniki tej interpolacji i porównanie z prawdziwym obrazem:ja( x , y)small
ja( m , n )ja( m , n )ja~( m′, n′)
Możesz przekonać się, że różne funkcje interpolacji mają różne efekty. Najbliższe i kilka innych ma bardzo zgrubne cechy i zasadniczo można zobaczyć postrzępione linie (patrz obraz w pełnym rozmiarze, a nie wyświetlanie siatki). Bicubic, biquadratic i Parzen przezwyciężyły to, ale wprowadziły wiele rozmycia. Ze wszystkich jąder Lanczos wydaje się (wizualnie) najbardziej atrakcyjny i najlepiej sprawdza się w całej masie.
Spróbuję rozwinąć tę odpowiedź i podać bardziej intuicyjne przykłady pokazujące różnice, kiedy będę miał czas. Możesz przeczytać ten dość łatwy i pouczający artykuł, który znalazłem w Internecie (ostrzeżenie PDF).