To wiki społeczności, więc możesz naprawić ten straszny, okropny post.
Grrr, bez LaTeX. :) Chyba będę musiał zrobić co w mojej mocy.
Definicja:
Mamy obraz (PNG lub inny bezstratny format *) o nazwie A o rozmiarze A x od A y . Naszym celem jest skalowanie go o p = 50% .
Obraz („tablica”) B będzie wersją A „skalowanej bezpośrednio” . Będzie miał B s = 1 liczbę kroków.
A = B B s = B 1
Obraz („tablica”) C będzie wersją A „przyrostowo skalowaną” . Będzie miał C s = 2 liczbę kroków.
A ≅ C C s = C 2
The Fun Stuff:
A = B 1 = B 0 × p
C 1 = C 0 × p 1 ÷ C s
A ≅ C 2 = C 1 × p 1 ÷ C s
Czy widzisz te ułamkowe moce? Teoretycznie obniżą jakość obrazów rastrowych (rastry wewnątrz wektorów zależą od implementacji). Ile? Przekonamy się, że dalej ...
Dobre rzeczy:
C e = 0, jeżeli p 1 ÷ C s ∈ ℤ
C e = C s, jeżeli p 1 ÷ C s ∉ ℤ
Gdzie e oznacza błąd maksymalny (najgorszy scenariusz), z powodu błędów zaokrąglania liczb całkowitych.
Teraz wszystko zależy od algorytmu zmniejszania skali (Super Sampling, Bicubic, Lanczos sampling, Nearest Neighbor itp.).
Jeśli używamy najbliższego sąsiada (The worst algorytm cokolwiek o dowolnej jakości), „prawdziwa” błędu maksymalnego ( C t ) będzie równa C e . Jeśli korzystamy z dowolnego innego algorytmu, komplikuje się, ale nie będzie tak źle. (Jeśli chcesz techniczne wyjaśnienie, dlaczego nie będzie tak złe, jak najbliższy sąsiad, nie mogę dać ci jednego, bo to tylko zgadywanie. UWAGA: Hej matematycy! Napraw to!)
Kochaj swojego bliźniego:
Stwórzmy „tablicę” obrazów D o D x = 100 , D y = 100 i D s = 10 . p jest nadal takie samo: p = 50% .
Algorytm najbliższego sąsiada (straszna definicja, wiem):
N (I, p) = scal XXDuplikaty (floorAllImageXYs (I x, y × p), I) , gdzie mnożone są tylko same x, y ; nie ich wartości kolorów (RGB)! Wiem, że tak naprawdę nie możesz tego zrobić z matematyki, i właśnie dlatego nie jestem LEGENDARNYM MATEMATYKIEM proroctwa.
( mergeXYDuplicates () zachowuje tylko najniższe / lewe „ x ” elementy „ x ” w oryginalnym obrazie I dla wszystkich znalezionych duplikatów i odrzuca resztę).
Weźmy losowy piksel: D 0 39,23 . Następnie stosuj D n + 1 = N (D n , p 1 ÷ D s ) = N (D n , ~ 93,3%) w kółko.
c n + 1 = podłoga (c n × ~ 93,3%)
c 1 = podłoga ((39,23) × ~ 93,3%) = podłoga ((36,3 21,4)) = (36,21)
c 2 = podłoga ((36,21) × ~ 93,3%) = (33,19)
c 3 = (30,17)
c 4 = (27,15)
c 5 = (25,13)
c 6 = (23,12)
c 7 = (21,11)
c 8 = (19,10)
c 9 = (17,9)
c 10 = (15,8)
Gdybyśmy tylko raz dokonali prostej skali, mielibyśmy:
b 1 = podłoga ((39,23) × 50%) = podłoga ((19,5,11,5)) = (19,11)
Porównajmy b i c :
b 1 = (19,11)
c 10 = (15,8)
To błąd (4,3) pikseli! Spróbujmy tego z końcowymi pikselami (99,99) i uwzględnij rzeczywisty rozmiar błędu. Nie powtórzę tutaj całej matematyki, ale powiem ci, że staje się (46,46) , błędem (3,3) w stosunku do tego, co powinno być, (49 , 49) .
Połączmy te wyniki z oryginałem: „prawdziwy błąd” to (1,0) . Wyobraź sobie, że dzieje się tak z każdym pikselem ... może to mieć znaczenie. Hmm ... Cóż, prawdopodobnie jest lepszy przykład. :)
Wniosek:
Jeśli obraz ma początkowo duży rozmiar, nie będzie miał znaczenia, chyba że wykonasz wiele pomniejszeń (patrz „Przykład z prawdziwego świata” poniżej).
Pogarsza się maksymalnie o jeden piksel na krok przyrostowy (w dół) w Najbliższym sąsiedztwie. Jeśli wykonasz dziesięć pomniejszeń, twój obraz będzie nieco gorszej jakości.
Przykład ze świata rzeczywistego:
(Kliknij na miniatury, aby powiększyć).
Skalowanie zmniejszane o 1% przyrostowo za pomocą Super Sampling:
Jak widać, Super Sampling „rozmywa” je, jeśli zastosowano je kilka razy. Jest to „dobre”, jeśli wykonujesz jedną przeskalowanie. Jest to złe, jeśli robisz to stopniowo.
* W zależności od edytora i formatu może to potencjalnie coś zmienić, więc upraszczam i nazywam to bezstratnym.
(100%-75%)*(100%-75%) != 50%
. Ale wierzę, że wiem, co masz na myśli, a odpowiedź na to brzmi „nie” i naprawdę nie będziesz w stanie powiedzieć różnicy, jeśli taka będzie.