Wiem, że 24-bitowy obraz poświęca 8 bitów dla R, G i B. Czy to tylko przestrzeń kolorów RGB. Jak w bitach YCbCr dla 24-bitowego obrazu JPEG rozdziela się bity?
9
Istnieje kilka formatów dla YCbCr. Mówiąc ogólnie, oko jest bardziej wrażliwe na zmiany luminancji (Y, jasność) niż na zmiany barwy (Cb, Cr, kolor). W związku z tym możliwe jest usunięcie niektórych informacji o barwie przy zachowaniu jakości obrazu.
Zatem najdroższym formatem jest 4: 4: 4, gdzie na każdy składnik luma (Y) przypada 1 składnik różnicy czerwonej (Cr) i jeden różnicy niebieskiej (Cb).
Następnie, stosując zasadę, o której wspomniałem, jest 4: 2: 2, gdzie dla każdego komponentu 2 Y jest 1 Cb i 1 Kr. I idzie nawet dalej do 4: 1: 1 i 4: 2: 0 itd. Więcej informacji tutaj .
JPEG może zaczynać się od 8 bitów na kanał R, G i B, ale gdy jest przechowywany w JPEG, jest przechowywany bardzo inaczej, gdzie nie ma prawdziwej „głębi bitowej”, ale zamiast tego wartości są przechowywane jako współczynniki częstotliwości o określonej precyzji.
W JPEG bardziej istotna jest szybkość kwantyzacji , która wpływa na ilość informacji wyrzucanych podczas etapu kwantyzacji kompresji, a tym samym na dokładność każdego współczynnika. Ta szybkość kwantyzacji jest ustawiana przez ustawienie „jakości” podczas zapisywania JPEG w Photoshopie. Nie ma to jednak związku z głębią bitową, jak na obrazie rastrowym, a można nawet powiedzieć, że obraz JPEG nie ma małej głębi w formacie JPEG, chociaż kodery / dekodery JPEG zaczynają się / kończą na 24-bit obraz rastrowy.
Innym ważnym czynnikiem istotnym przy zapisywaniu JPEG jest rodzaj podpróbkowania barwy . W formacie JPEG istnieje możliwość zmniejszenia o połowę poziomej lub pionowej i poziomej rozdzielczości kanałów kolorów (Pr i Pb) w stosunku do kanału luminancji (jasności). Podczas dekompresji kanały kolorów są interpolowane i w większości tematów fotograficznych nie robi to dużej różnicy.
Oto przybliżone podsumowanie przekształcania obrazu w JPEG.
Wartości RGB są konwertowane na wartości Y, Pb, Pr. Przestrzeń kolorów YPbPr lepiej nadaje się do wydajnej kompresji, ponieważ utrzymuje informacje o luminancji, które przenoszą najwięcej szczegółów, tylko w jednym kanale. Ta konwersja jest prostą operacją arytmetyczną, która jest całkowicie odwracalna, z wyjątkiem błędów zaokrąglania.
Jeśli używasz podpróbkowania kolorów (innymi słowy, używając trybu innego niż 4: 4: 4), wówczas rozdzielczość pionowa i / lub pozioma kanałów Pb i Pr są zmniejszone o połowę. Zatem kanały te będą miały inne wymiary pikseli niż kanał luminancji. Prowadzi to do trwałej utraty rozdzielczości w kanałach kolorów.
Dla każdego kanału obraz jest podzielony na bloki 8 pikseli na 8 pikseli, co daje 64 wartości liniowe dla każdego takiego bloku w każdym kanale. Jeśli kanał nie jest wielokrotnością 8 pikseli w żadnym z wymiarów, piksele brzegowe są powtarzane (i zostaną wyrzucone podczas dekompresji - w ten sposób kompresja JPEG jest zawsze bardziej wydajna z wymiarami będącymi wielokrotnością 8 pikseli lub 16, jeśli weźmiesz pod uwagę współczynnik w podpróbkowaniu barwy).
64 wartości w każdym bloku podlegają transformacji z domeny kosmicznej do dziedziny częstotliwości, w tym przypadku nazywanej dyskretną transformacją kosinusową. Otrzymujesz 64 współczynniki, z których każdy reprezentuje amplitudę konkretnej mapy częstotliwości na obszarze zajmowanym przez ten blok. Pierwsza wartość to najniższa częstotliwość, która jest faktycznie średnią wartością wszystkich pikseli, aż do ostatnich wartości, które opisują najwyższą składową częstotliwościową bloku. Wszystkie wcześniejsze wartości znacznie się różnią i są ważniejsze dla wyglądu ostatecznego obrazu niż późniejsze wartości w bloku. Ta operacja jest całkowicie odwracalna, o ile użyjesz wystarczającej precyzji.
Następnie jest krok kwantyzacji, w którym każdy z 64 współczynników uzyskanych w poprzednim etapie jest dzielony przez pewną liczbę (zwaną współczynnikiem kwantyzacji), a reszta jest wyrzucana. To tutaj najbardziej wpływa na precyzję próbek, ale tutaj uzyskuje się ogromne oszczędności miejsca dzięki JPEG w porównaniu do kompresji bezstratnej. Ponieważ wszystko jest w dziedzinie częstotliwości od czasu poprzedniej transformacji, utrata dokładności działa najlepiej, zachowując percepcyjną jakość obrazu, niż zwykła redukcja głębi bitowej / dokładności pikseli przed tą transformacją. Odwrotnością tej procedury jest po prostu pomnożenie przez tę samą liczbę, przez którą podzieliliśmy współczynniki, ale oczywiście, ponieważ wyrzuciłeś resztę, otrzymujesz mniejszą dokładność współczynników. Powoduje to trwałą utratę jakości,
Po kwantyzacji jest to typowe dla wielu późniejszych, mniej znaczących współczynników, które wynoszą zero, więc są one wyrzucane. Następnie (bezstratna) procedura kodowania o zmiennej długości koduje wszystkie pozostałe współczynniki w efektywny sposób, nawet jeśli każdy z nich może użyć innej liczby bitów.
Nie można powiedzieć, że pewien współczynnik kwantyzacji jest równoważny pewnej głębokości bitu, ponieważ kwantyzacja nie daje pasmowania, jak po zmniejszeniu głębokości bitu, ale zamiast tego daje ogólną utratę szczegółów w szczegółach, zaczynając od części, w których można to zauważyć mniej, ponieważ ma tak niską amplitudę dla swojej częstotliwości.
źródło
Reprezentowanie barwy (Cb Cr) w osobnych kanałach od lumy (Y) ma kolejny pozytywny wpływ na kompresję. Większość widocznych informacji znajduje się w kanale Luma. Ludzkie oczy tolerują zarówno niższą rozdzielczość przestrzenną, jak i bardziej agresywną kwantyzację w kanałach barwy. Tak więc agresywnie skompresowany obraz może ostatecznie zająć około 10% miejsca na pliki dla barwy, a reszta dla lumy, i nadal wygląda przyzwoicie.
Pod koniec dnia jest to nadal kompresja stratna.
źródło
Około 8 bitów na każdy kanał, ale istnieje kilka nieco innych sposobów na zrobienie tego. Szczegóły podano w artykule w Wikipedii na temat YCbCr .
źródło