Widziałem więc bicubic i fraktale wymienione jako metody powiększania zdjęć. Jakie są szczegóły techniczne tego, jak one działają i dlaczego / kiedy jeden jest lepszy od drugiego?
Po pierwsze, powiększanie obrazu polega na przesuwaniu pikseli o określoną wartość i wypełnianiu przestrzeni między poprzednio sąsiadującymi pikselami o podobnej treści. Można tego dokonać przez podstawowe wytwarzanie pikseli (dwubiegunowe filtrowanie) lub za pomocą bardziej złożonych środków, takich jak konwersja obrazu do reprezentacji wektorowej i skalowanie w przestrzeni wektorowej.
Filtrowanie dwubiegunowe, wraz z filtrowaniem dwuliniowym, wykorzystuje stosunkowo prostą krzywą funkcyjną do mieszania kolorów sąsiednich pikseli podczas powiększania obrazu. Dwuliniowa wykorzystuje liniową krzywą funkcji, natomiast Bicubic używa sześciennej krzywej funkcji splajnu (cspline). Filtrowanie dwubiegunowe generuje ogólnie gładsze wyniki, jednak oba algorytmy ostatecznie łączą ze sobą wartości sąsiednich pikseli za pomocą krzywej funkcyjnej, aby „wypełnić luki” podczas powiększania obrazu. Należy zauważyć, że skalowanie bicubiczne jest generalnie bezstratne, ponieważ tak naprawdę generowana jest tylko przestrzeń między oryginalnymi pikselami. W zależności od niuansów poszczególnych implementacji oryginalne piksele mogą się nieznacznie zmienić, jednak w przeważającej części oryginalne dane są zachowywane, a nowe dane są przygotowywane do wypełnienia w miarę powiększania obrazu.
Fraktalne podejście do skalowania obrazu ma zupełnie inne podejście. Bardziej złożone algorytmy są wykorzystywane do analizy zawartości obrazu, identyfikacji krawędzi i „obiektów”, a ostatecznie przekształcenia obrazu w fraktalny format wektorowy. Po wektoryzacji obrazu można go przeskalować „bezstratnie” w przestrzeni wektorowej, a następnie ponownie renderować w większym rozmiarze. Algorytmy fraktalne, takie jak oryginalne fraktale, wykorzystują algorytm wektora fraktalnego do skalowania obrazu przy zachowaniu gładkich, ostrych krawędzi. Takie podejście jest przydatne, gdy obraz ma początkowo ostre i rozpoznawalne krawędzie jako kluczowy czynnik, a utrzymanie wyraźnej ostrości na tych krawędziach jest ważne.
Ponadto Oryginalni Fractals próbują zachować nie-krawędziowe szczegóły poprzez koncepcję „samopodobieństwa”, zachowując szczegóły, biorąc pod uwagę, że treść obrazu ma charakter fraktalny, i ponownie renderują zawartość niebędącą krawędzią z algorytmów fraktalnych. Ma to przypuszczalną zaletę, a nie tylko wytwarzanie informacji z sąsiednich pikseli, ale można generować nową zawartość na podstawie wzorów złożonych z wielu pikseli. Podejście to może działać świetnie przy zwiększaniu skali o około 200%, jednak podstawowa wektorowa natura skalowania staje się bardziej widoczna podczas skalowania do większych rozmiarów. Należy również zauważyć, że ta metoda skalowania nie jest bezstratna, a niektóre drobne szczegóły pikseli mogą zostać odrzucone, gdy algorytm próbuje znaleźć fraktalwzorce, które można replikować. Ekstremalne skalowanie w górę może skutkować widoczną replikacją wzoru, a drobne szczegóły krawędzi mogą zostać usunięte, aby zachować gładkie, ostre krawędzie przy wszystkich rozmiarach obrazu.
BenVista zapewnia również zastrzeżony algorytm nazwany S-Spline. Istnieje niewiele informacji na temat specyfiki tego algorytmu, jednak wydaje się, że jest to inny algorytm oparty na krzywej funkcji. Skalowanie S-Spline Max w PhotoZoom Pro, podobnie jak oryginalne fraktale, doskonale wykonuje definicję krawędzi. Algorytm ten może również skalować do około 200%, jednak przesunięcie tego algorytmu znacznie dalej powoduje widoczną degradację i wygładzenie szczegółów krawędzi. Wydaje się, że ogólnym kompromisem w algorytmach skalowania jest albo maksymalne zdefiniowanie krawędzi, albo maksymalne zachowanie szczegółów. Należy również zauważyć, że większość algorytmów skalowania innych firm, w tym Genuine Fractals i BenVista PhotoZoom Pro, automatycznie domyślnie stosuje maskę wyostrzającą do końcowego obrazu.
Możliwe jest stosowanie bicubic w sposób iteracyjny. Podstawowym celem dwubiegunowego skalowania jest to, że produkuje on więcej informacji, im większa jest skala, przy najwyższym koszcie ostrości. Wykonując skalowanie bicubic z przyrostem 3-5%, zachowujesz znacznie bardziej oryginalne lub prawie oryginalne detale i produkujesz znacznie mniej obrazu na każdym kroku. Ostateczne wyniki iteracyjnego (lub schodkowego) skalowania bicubic mogą zachować znacznie większą definicję krawędzi, bez utraty drobnych szczegółów. Koszt jest jednak znacznie większą osobistą inwestycją w skalowanie, ponieważ w tej chwili nie ma prefabrykowanych aplikacji, które zrobiłyby to za Ciebie. Musisz ręcznie obliczyć nową szerokość i wysokość obrazu na każdym kroku, mnożąc poprzednią szerokość lub wysokość przez procent skalowania i podłączając tę liczbę do programu do edycji obrazu ” s bicubic narzędzie do skalowania. Rezultaty końcowe mogą być wspaniałe i tak ostre jak obraz bicibic z maskowaniem wyostrzającym. Granice, o ile większy można skalować obraz bez widocznej szkody, są znacznie większe niż w przypadku innych algorytmów, co najmniej 400%, a może nawet więcej.
Hmm Łatwo byłoby napisać skrypt iteracyjnego skalowania bicubic jako skryptu gimp lub akcji w Photoshopie ....
Przeczytaj Profil
Próbowałem tego jako działania w Photoshopie, ale nie udało mi się, ponieważ wymagało to obliczeń. Tak naprawdę nie robię dużo skryptów w Photoshopie, więc nie jestem pewien, czy obsługuje on funkcje matematyczne czy skrypty.
jrista
2
+1 Wow, fantastyczna szczegółowa odpowiedź. Myślałem, że to nudne pytanie, dopóki nie przeczytam twojej odpowiedzi.
fmark
Właśnie przetestowałem wielokrotną zmianę rozdzielczości w Paint.net, ale wyniki nie były takie, jak podano w tej odpowiedzi, obraz wielokrotnie przeskalowany spowodował tyle rozmycia, co ten sam obraz ponownie próbkowany tylko raz. Próbowałem z tym samym obrazem zmieniającym rozmiar na 200% i iteracyjnie 104% za każdym razem, aż osiągną w przybliżeniu te same wymiary pikseli.
Jahaziel
1
Jeśli chcesz przykład iteracyjnego bicubika wykonanego na obrazie, który skorzystał z tej metody, spójrz na moją analizę tutaj: Emprical Study: Extreme digital
Odpowiedzi:
Po pierwsze, powiększanie obrazu polega na przesuwaniu pikseli o określoną wartość i wypełnianiu przestrzeni między poprzednio sąsiadującymi pikselami o podobnej treści. Można tego dokonać przez podstawowe wytwarzanie pikseli (dwubiegunowe filtrowanie) lub za pomocą bardziej złożonych środków, takich jak konwersja obrazu do reprezentacji wektorowej i skalowanie w przestrzeni wektorowej.
Filtrowanie dwubiegunowe, wraz z filtrowaniem dwuliniowym, wykorzystuje stosunkowo prostą krzywą funkcyjną do mieszania kolorów sąsiednich pikseli podczas powiększania obrazu. Dwuliniowa wykorzystuje liniową krzywą funkcji, natomiast Bicubic używa sześciennej krzywej funkcji splajnu (cspline). Filtrowanie dwubiegunowe generuje ogólnie gładsze wyniki, jednak oba algorytmy ostatecznie łączą ze sobą wartości sąsiednich pikseli za pomocą krzywej funkcyjnej, aby „wypełnić luki” podczas powiększania obrazu. Należy zauważyć, że skalowanie bicubiczne jest generalnie bezstratne, ponieważ tak naprawdę generowana jest tylko przestrzeń między oryginalnymi pikselami. W zależności od niuansów poszczególnych implementacji oryginalne piksele mogą się nieznacznie zmienić, jednak w przeważającej części oryginalne dane są zachowywane, a nowe dane są przygotowywane do wypełnienia w miarę powiększania obrazu.
Fraktalne podejście do skalowania obrazu ma zupełnie inne podejście. Bardziej złożone algorytmy są wykorzystywane do analizy zawartości obrazu, identyfikacji krawędzi i „obiektów”, a ostatecznie przekształcenia obrazu w fraktalny format wektorowy. Po wektoryzacji obrazu można go przeskalować „bezstratnie” w przestrzeni wektorowej, a następnie ponownie renderować w większym rozmiarze. Algorytmy fraktalne, takie jak oryginalne fraktale, wykorzystują algorytm wektora fraktalnego do skalowania obrazu przy zachowaniu gładkich, ostrych krawędzi. Takie podejście jest przydatne, gdy obraz ma początkowo ostre i rozpoznawalne krawędzie jako kluczowy czynnik, a utrzymanie wyraźnej ostrości na tych krawędziach jest ważne.
Ponadto Oryginalni Fractals próbują zachować nie-krawędziowe szczegóły poprzez koncepcję „samopodobieństwa”, zachowując szczegóły, biorąc pod uwagę, że treść obrazu ma charakter fraktalny, i ponownie renderują zawartość niebędącą krawędzią z algorytmów fraktalnych. Ma to przypuszczalną zaletę, a nie tylko wytwarzanie informacji z sąsiednich pikseli, ale można generować nową zawartość na podstawie wzorów złożonych z wielu pikseli. Podejście to może działać świetnie przy zwiększaniu skali o około 200%, jednak podstawowa wektorowa natura skalowania staje się bardziej widoczna podczas skalowania do większych rozmiarów. Należy również zauważyć, że ta metoda skalowania nie jest bezstratna, a niektóre drobne szczegóły pikseli mogą zostać odrzucone, gdy algorytm próbuje znaleźć fraktalwzorce, które można replikować. Ekstremalne skalowanie w górę może skutkować widoczną replikacją wzoru, a drobne szczegóły krawędzi mogą zostać usunięte, aby zachować gładkie, ostre krawędzie przy wszystkich rozmiarach obrazu.
BenVista zapewnia również zastrzeżony algorytm nazwany S-Spline. Istnieje niewiele informacji na temat specyfiki tego algorytmu, jednak wydaje się, że jest to inny algorytm oparty na krzywej funkcji. Skalowanie S-Spline Max w PhotoZoom Pro, podobnie jak oryginalne fraktale, doskonale wykonuje definicję krawędzi. Algorytm ten może również skalować do około 200%, jednak przesunięcie tego algorytmu znacznie dalej powoduje widoczną degradację i wygładzenie szczegółów krawędzi. Wydaje się, że ogólnym kompromisem w algorytmach skalowania jest albo maksymalne zdefiniowanie krawędzi, albo maksymalne zachowanie szczegółów. Należy również zauważyć, że większość algorytmów skalowania innych firm, w tym Genuine Fractals i BenVista PhotoZoom Pro, automatycznie domyślnie stosuje maskę wyostrzającą do końcowego obrazu.
Możliwe jest stosowanie bicubic w sposób iteracyjny. Podstawowym celem dwubiegunowego skalowania jest to, że produkuje on więcej informacji, im większa jest skala, przy najwyższym koszcie ostrości. Wykonując skalowanie bicubic z przyrostem 3-5%, zachowujesz znacznie bardziej oryginalne lub prawie oryginalne detale i produkujesz znacznie mniej obrazu na każdym kroku. Ostateczne wyniki iteracyjnego (lub schodkowego) skalowania bicubic mogą zachować znacznie większą definicję krawędzi, bez utraty drobnych szczegółów. Koszt jest jednak znacznie większą osobistą inwestycją w skalowanie, ponieważ w tej chwili nie ma prefabrykowanych aplikacji, które zrobiłyby to za Ciebie. Musisz ręcznie obliczyć nową szerokość i wysokość obrazu na każdym kroku, mnożąc poprzednią szerokość lub wysokość przez procent skalowania i podłączając tę liczbę do programu do edycji obrazu ” s bicubic narzędzie do skalowania. Rezultaty końcowe mogą być wspaniałe i tak ostre jak obraz bicibic z maskowaniem wyostrzającym. Granice, o ile większy można skalować obraz bez widocznej szkody, są znacznie większe niż w przypadku innych algorytmów, co najmniej 400%, a może nawet więcej.
źródło