Skalowanie obrazu — Image scaling

Obraz skalowany ze skalowaniem najbliższego sąsiada (po lewej) i skalowaniem 2×SaI (po prawej)

W grafice komputerowej i fotografii cyfrowej , obraz skalowanie odnosi się do zmiany rozmiaru obrazu cyfrowego. W technologii wideo powiększenie materiału cyfrowego jest znane jako upscaling lub zwiększanie rozdzielczości .

Podczas skalowania obrazu grafiki wektorowej elementy podstawowe grafiki , z których składa się obraz, mogą być skalowane za pomocą przekształceń geometrycznych bez utraty jakości obrazu . Podczas skalowania obrazu grafiki rastrowej należy wygenerować nowy obraz o większej lub mniejszej liczbie pikseli. W przypadku zmniejszania liczby pikseli (skalowania) zwykle powoduje to widoczną utratę jakości. Z punktu widzenia cyfrowego przetwarzania sygnałów skalowanie grafiki rastrowej jest dwuwymiarowym przykładem konwersji częstotliwości próbkowania , konwersji dyskretnego sygnału z częstotliwości próbkowania (w tym przypadku lokalnej częstotliwości próbkowania) na inną.

Matematyczny

Skalowanie obrazu może być interpretowane jako forma ponownego próbkowania obrazu lub rekonstrukcji obrazu z punktu widzenia twierdzenia o próbkowaniu Nyquista . Zgodnie z twierdzeniem, próbkowanie w dół do mniejszego obrazu z oryginału o wyższej rozdzielczości można przeprowadzić tylko po zastosowaniu odpowiedniego filtra antyaliasingu 2D, aby zapobiec artefaktom aliasingu. Obraz jest zredukowany do informacji, które może nieść mniejszy obraz.

W przypadku próbkowania w górę, filtr rekonstrukcyjny zastępuje filtr antyaliasingowy.

Bardziej wyrafinowane podejście do skalowania w górę traktuje problem jako problem odwrotny , rozwiązując kwestię generowania wiarygodnego obrazu, który po przeskalowaniu wyglądałby jak obraz wejściowy. W tym celu zastosowano różne techniki, w tym techniki optymalizacji z terminami regularyzacyjnymi i wykorzystanie uczenia maszynowego na przykładach.

Algorytmy

Rozmiar obrazu można zmienić na kilka sposobów.

Interpolacja najbliższego sąsiada

Jednym z prostszych sposobów zwiększania rozmiaru obrazu jest interpolacja najbliższego sąsiedztwa , polegająca na zastąpieniu każdego piksela najbliższym pikselem na wyjściu; w przypadku skalowania w górę oznacza to, że będzie obecnych wiele pikseli tego samego koloru. Może to zachować ostre szczegóły w grafice pikselowej, ale także wprowadzić postrzępione obrazy, które wcześniej były płynne. „Najbliższy” w najbliższym sąsiedztwie nie musi być matematycznym najbliższym. Jedną z powszechnych implementacji jest zawsze zaokrąglanie do zera. Zaokrąglanie w ten sposób daje mniej artefaktów i jest szybsze do obliczenia.

Algorytmy dwuliniowe i dwusześcienne

Interpolacja dwuliniowa działa poprzez interpolację wartości kolorów pikseli, wprowadzając ciągłe przejście do wyjścia, nawet jeśli oryginalny materiał ma dyskretne przejścia. Chociaż jest to pożądane w przypadku obrazów o ciągłych tonach, algorytm ten zmniejsza kontrast (ostre krawędzie) w sposób, który może być niepożądany w przypadku grafiki liniowej. Interpolacja dwusześcienna daje znacznie lepsze wyniki, ze wzrostem kosztów obliczeniowych.

Resampling Sinca i Lanczosa

W teorii resampling Sinc zapewnia najlepszą możliwą rekonstrukcję dla sygnału o idealnie ograniczonym paśmie. W praktyce założenia stojące za sinc resamplingiem nie są całkowicie spełnione przez obrazy cyfrowe w świecie rzeczywistym. Lepsze wyniki daje resampling Lanczosa , aproksymacja do metody sinc. Interpolację dwusześcienną można uważać za wydajną obliczeniowo aproksymację resamplingu Lanczosa.

Pobieranie próbek w pudełku

Słabością algorytmów dwuliniowych, dwusześciennych i pokrewnych jest to, że próbkują określoną liczbę pikseli. Gdy skalowanie w dół poniżej pewnego progu, na przykład więcej niż dwa razy dla wszystkich algorytmów bi-samplingu, algorytmy będą próbkować niesąsiadujące piksele, co powoduje zarówno utratę danych, jak i przybliżone wyniki.

Trywialnym rozwiązaniem tego problemu jest próbkowanie pudełek, które polega na uznaniu piksela docelowego za pudełko na oryginalnym obrazie i próbkowaniu wszystkich pikseli wewnątrz pudełka. Gwarantuje to, że wszystkie piksele wejściowe mają udział w wyjściu. Główną słabością tego algorytmu jest to, że trudno go zoptymalizować.

Mipmap

Innym rozwiązaniem problemu downscale skalowania bi-samplingu są mipmapy . Mipmapa to wstępnie przeskalowany zestaw kopii w zmniejszonej skali. Gdy skalowanie w dół jest używane jako źródło, najbliższa większa mipmapa, aby zapewnić, że nie zostanie użyte skalowanie poniżej użytecznego progu skalowania dwuliniowego. Ten algorytm jest szybki i łatwy do optymalizacji. Jest to standard w wielu frameworkach, takich jak OpenGL . Kosztem jest użycie większej ilości pamięci obrazu, dokładnie o jedną trzecią więcej w standardowej implementacji.

Metody transformacji Fouriera

Prosta interpolacja oparta na transformacji Fouriera dopasowuje domenę częstotliwości z zerowymi składowymi (gładkie podejście oparte na oknie zmniejszyłoby dzwonienie ). Poza dobrą konserwacją (lub odzyskiwaniem) szczegółów, godne uwagi jest dzwonienie i okrążenie treści od lewej do prawej krawędzi (i na odwrót).

Interpolacja skierowana na krawędzi

Algorytmy interpolacji ukierunkowanej na krawędzie mają na celu zachowanie krawędzi obrazu po skalowaniu, w przeciwieństwie do innych algorytmów, które mogą wprowadzać artefakty klatki schodowej.

Przykładami algorytmów dla tego zadania są: New Edge-Directed Interpolation (NEDI), Edge-Guided Image Interpolation (EGGI), Iterative Curvature-Based Interpolation (ICBI) i Directional Cubic Convolution Interpolation (DCCI). Analiza z 2013 r. wykazała, że ​​DCCI uzyskało najlepsze wyniki w PSNR i SSIM w serii obrazów testowych.

hqx

W przypadku powiększania grafiki komputerowej o niskiej rozdzielczości i/lub kilku kolorach (zwykle od 2 do 256 kolorów) lepsze wyniki można osiągnąć za pomocą hqx lub innych algorytmów skalowania pixel-art . Tworzą one ostre krawędzie i zachowują wysoki poziom szczegółowości.

Wektoryzacja

Innym podejściem jest ekstrakcja wektora lub wektoryzacja . Wektoryzacja najpierw tworzy niezależną od rozdzielczości reprezentację wektorową grafiki, która ma być skalowana. Następnie wersja niezależna od rozdzielczości jest renderowana jako obraz rastrowy w żądanej rozdzielczości. Ta technika jest używana przez Adobe Illustrator , Live Trace i Inkscape . Skalowalna grafika wektorowa dobrze nadaje się do prostych obrazów geometrycznych, podczas gdy fotografie nie radzą sobie dobrze z wektoryzacją ze względu na ich złożoność.

Głębokie konwolucyjne sieci neuronowe

Ta metoda wykorzystuje uczenie maszynowe do bardziej szczegółowych obrazów, takich jak fotografie i złożone dzieła sztuki. Programy korzystające z tej metody to waifu2x , Imglarger i Neural Enhance.

Demonstracja konwencjonalnego upscalingu w porównaniu ze skalowaniem Waifu2x z redukcją szumów, z wykorzystaniem szczegółów Phosphorus i Hesperus autorstwa Evelyn De Morgan . Kliknij, aby zobaczyć pełne rozmiary.
Oryginalny obraz
Obraz powiększony o 200% za pomocą PaintShop Pro
Obraz powiększony o 200% przy użyciu waifu2x w trybie Zdjęcie ze średnią redukcją szumów
Obraz przeskalowany do 400% przy użyciu Topaz AI Gigapixel z niską redukcją szumów
Obraz przeskalowany do 400% przy użyciu RealSR DF2K-JPEG

Aplikacje

Generał

Skalowanie obrazu wykorzystywane jest m.in. w aplikacjach, przeglądarkach internetowych , edytorach obrazów , przeglądarkach obrazów i plików, programowych lupach, zoomie cyfrowym, procesie generowania obrazów miniatur oraz podczas wyprowadzania obrazów przez ekrany lub drukarki.

Wideo

Ta aplikacja służy do powiększania obrazów w kinie domowym dla urządzeń wyjściowych obsługujących HDTV z zawartości PAL-Resolution, na przykład z odtwarzacza DVD. Skalowanie w górę odbywa się w czasie rzeczywistym, a sygnał wyjściowy nie jest zapisywany.

Skalowanie pikseli

Ponieważ grafiki pixel-art mają zwykle niską rozdzielczość, polegają na ostrożnym umieszczeniu poszczególnych pikseli, często z ograniczoną paletą kolorów. Powoduje to, że grafika opiera się na stylizowanych wizualnych wskazówkach do definiowania złożonych kształtów o małej rozdzielczości, aż do pojedynczych pikseli. To sprawia, że ​​skalowanie grafiki pikselowej jest szczególnie trudnym problemem.

Opracowano wyspecjalizowane algorytmy do obsługi grafiki pikselowej, ponieważ tradycyjne algorytmy skalowania nie uwzględniają wskazówek percepcyjnych.

Ponieważ typową aplikacją jest poprawa wyglądu gier wideo czwartej generacji i wcześniejszych na emulatorach arcade i konsol , wiele z nich jest zaprojektowanych do uruchamiania w czasie rzeczywistym dla małych obrazów wejściowych z szybkością 60 klatek na sekundę.

Na szybkim sprzęcie te algorytmy są odpowiednie do gier i innego przetwarzania obrazu w czasie rzeczywistym. Algorytmy te zapewniają ostrą, wyraźną grafikę, minimalizując jednocześnie rozmycie. Algorytmy skalowania grafiki zostały zaimplementowane w szerokiej gamie emulatorów, takich jak HqMAME i DOSBox , a także w silnikach gier 2D i silnikach gier, takich jak ScummVM . Zyskali uznanie graczy, dla których te technologie przyczyniły się do odrodzenia doświadczeń z gier z lat 80. i 90. XX wieku.

Takie filtry są obecnie używane w komercyjnych emulatorach Xbox Live , Virtual Console i PSN, aby klasyczne gry o niskiej rozdzielczości były bardziej atrakcyjne wizualnie na nowoczesnych wyświetlaczach HD . Ostatnio wydane gry, które zawierają te filtry, to Sonic's Ultimate Genesis Collection , Castlevania: The Dracula X Chronicles , Castlevania: Symphony of the Night i Akumajō Dracula X Chi no Rondo .

Zobacz też

Bibliografia