Istnieją 2 główne czynniki, które wydają się prowadzić do cyfrowych artefaktów podczas tworzenia obrazów JPEG: Aliasing i Kompresja.
Przykład:
Konwersja formatu PNG ze znakami na format JPEG lub umieszczenie obrazów wektorowych nad fotografią spowoduje pikselizację ich krawędzi. Antyaliasing generuje wokół nich rodzaj rozmycia, ale jeśli obraz jest stratnie skompresowany , część szczegółów również zostaje utracona, dlatego rozmycie i pikselizacja mogą stać się mniej zauważalne.
Czy to jest właściwe? Tzn. Ponieważ bezstratna kompresja generuje bardzo szczegółowy obraz, artefakty wynikające z aliasingu będą bardziej zauważalne, więc można znaleźć równowagę przy użyciu odpowiedniej kompresji, choć pogarszając jakość obrazu.
Edytować
Właśnie zapisałem ten plik JPEG w mspaint (3,46 KB):
Oto ten sam plik JPEG z maksymalną kompresją (najniższa jakość, 0,5 KB):
Oto jeszcze ten sam JPEG z kompresją 50% (zauważ różnicę rozmiaru, 1,29 KB):
Ta sama 50% kompresja, ale zapisana jako „progresywny JPG”, zachowała oryginalne dane EXIF i XMP oraz „próbowała zapisać z oryginalną jakością JPG” (można zauważyć, że wokół nie ma szarych pikseli, 2,96 KB):
I na koniec taki sam jak poprzednio przy wyłączonym podpróbkowaniu barwy (ten sam rozmiar pliku, 2,96 KB):
źródło
mozjpeg
kompresor ma specjalną sztuczkę, aby wytwarzać mniej zniekształceń na tego rodzaju obrazach. (i ogólnie jest on bardziej wydajny niż zwykłe pisarki JPEG). Próbowałeś?Odpowiedzi:
Kompresja JPEG obejmuje trzy główne kroki:
Podpróbkowanie barwy . Obraz jest konwertowany z RGB na przestrzeń kolorów YCbCr, w której luma lub jasność (Y) są przechowywane oddzielnie od składników barwy lub koloru, Cb i Cr. Składnik Y jest utrzymywany w pełnej rozdzielczości, ale Cb i Cr są próbkowane w dół, zazwyczaj do połowy rozdzielczości na każdej osi. Wykorzystuje to fakt, że ludzki system wzrokowy jest bardziej wrażliwy na drobne szczegóły jasności niż koloru.
Kwantyzacja częstotliwości. Obrazy Y, Cb i Cr są przekształcane w reprezentację częstotliwości, dzieląc je na bloki 8x8 i stosując dyskretną transformację kosinusową (wariant transformaty Fouriera) do każdego bloku. Wynikiem jest macierz liczb, które opisują amplitudy różnych częstotliwości przestrzennych w bloku. Liczby te można następnie skwantyzować (zaokrąglić do wybranej liczby bitów precyzji). Różne poziomy kwantyzacji są stosowane dla różnych częstotliwości, wykorzystując względnie niższą wrażliwość naszego układu wzrokowego na wysokie częstotliwości. Tutaj właśnie pojawia się ustawienie jakości kodera JPEG: niższe jakości wykorzystują bardziej zgrubną kwantyzację.
Kodowanie entropii . Skwantowane wartości DCT są przekazywane przez koder entropijny, który bezstratnie kompresuje strumień bitów, używając mniejszej liczby bitów do reprezentowania bardziej powszechnych wartości, podobnie jak plik zip.
Kroki 1 i 2 są stratne i każdy z nich wytwarza swój własny rodzaj artefaktów (choć nakładają się na siebie). Podpróbkowanie barwy ma tendencję do rozmycia ostrych krawędzi między regionami o różnych kolorach. Jest to szczególnie widoczne w grafice wektorowej, w której jaskrawe kształty wychwytują błędne postrzępione krawędzie. Kwantyzacja częstotliwości ogólnie zaciera drobne szczegóły, a także tworzy artefakty w kształcie bloku przy niskich ustawieniach jakości, ponieważ DCT odbywa się na zasadzie blok po bloku. Jest to szczególnie widoczne na tekście.
Dlatego JPEG zwykle nie jest używany do obrazów zawierających grafikę wektorową lub tekst - jego algorytmy kompresji są słabo dostosowane do tych przypadków, chociaż działają dobrze w przypadku zdjęć i innych obrazów o złożonej teksturze i niezbyt ostrych krawędziach.
źródło