Jak przestrzeń kolorów YCbCr jest reprezentowana na obrazie JPEG?


9

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?

Odpowiedzi:


3

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 .


Wzorce te odnoszą się do próbkowania częstotliwości wideo, a nie do kodowania JPEG.
whuber

@ whuber: Często są używane w dyskusji na temat kodowania wideo, ale JPEG obsługuje również luminancję z podwójną rozdzielczością chrominancji. W przypadku JPEG jest to jednak opcjonalne - barwa może być w pełnej rozdzielczości lub w połowie rozdzielczości.
Jerry Coffin

1
GIMP będzie domyślnie używał podpróbkowania barwy podczas zapisywania JPEG, choć łatwo to zmienić. Nie pamiętam, czy dotyczy to również Photoshopa.
thomasrutter

@thomasrutter, Photoshop wybiera podpróbkowanie na podstawie wybranego ustawienia jakości. To nie jest niezależna opcja.
Mark Ransom

Nawiasem mówiąc, liczby odnoszą się do liczby próbek na 4 poziome piksele dla Y, Pr i Pb. Zatem 4: 4: 4 oznacza, że ​​wszystkie trzy kanały próbkują każdy piksel; 4: 2: 2 oznacza, że ​​kanały Pr i Pb próbkują tylko co drugi piksel w poziomie; 4: 1: 1 (nie sądzę, że jest to kiedykolwiek używane w fotografii, tylko w wideo) oznacza, że ​​Pr i Pb próbkują tylko co czwarty piksel w poziomie. 4: 2: 0 jest specjalnym odstępstwem od tej reguły. NIE oznacza to, że nie ma kanału Pb. Co to znaczy, że kanały Pb Pr i są o połowę w obu kierunku poziomym i pionowym, a nie tylko w poziomie.
thomasrutter,

24

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.

  1. 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.

  2. 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.

  3. 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).

  4. 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.

  5. 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,

  6. 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.


2
Myślę, że mój mózg właśnie eksplodował.
Nick Bedford,

Podpróbkowanie kolorów nie powoduje tylko „utraty rozdzielczości”. Wprowadza bardzo zauważalne artefakty, szczególnie w czerwonym kanale.
Mark Ransom

@ Mark Ransom te artefakty są niczym innym, jak wynikiem połowy rozdzielczości w kanałach kolorów i interpolacji koniecznej do uwzględnienia tego po dekompresji. Nie powinien on nigdy wytwarzać żadnych „zauważalnych artefaktów” innych niż spowodowane rozmyciem rozdzielczości, chociaż mogą istnieć pewne dekodery, które psują tę interpolację lub wykonują bardzo prostą interpolację najbliższego sąsiada, co powoduje blokowanie, które jest dość zauważalne dla czerwieni szczegóły na czarnym (lub magenta na niebieskim, itp.). Był to typowy problem na przykład w niektórych wczesnych odtwarzaczach DVD.
thomasrutter

5
Nie sądzę, że kiedykolwiek widziałem lepsze, łatwiejsze do zrozumienia wyjaśnienie kompresji obrazu JPEG lub naprawdę stratnej. definite +1
jay.lee

Przepraszam, nie chciałem sugerować, że podpróbkowanie powoduje artefakty. Po prostu istniejące błędy kwantyzacji zostają wysadzone dwukrotnie, co czyni je znacznie bardziej widocznymi. Myślę, że ważne jest, aby wiedzieć, że widoczny efekt podpróbkowania jest czymś więcej niż tylko odrobiną rozmycia.
Mark Ransom,

1

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.


-1

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 .


Zostało to określone w pytaniu. Podaj bardziej szczegółową odpowiedź.
Nick Bedford,

@Nick Gdzie dokładnie to „podano” w pytaniu? Pytanie w obecnym brzmieniu brzmi: „W przestrzeni kolorów YCbCr dla 24-bitowego obrazu JPEG, w jaki sposób są rozprowadzane bity?” Powiedziałem, w jaki sposób są dystrybuowane, zakładając - jak każdy, kto rozumie pytanie - że kanały to Y, Cb i Cr. Moja odpowiedź jest poprawnym streszczeniem artykułu z Wikipedii. Polityka SE polega na dostarczaniu streszczeń, a nie na hurtowym kopiowaniu materiałów (choć przyznaję, że to proste przykłady długich cytatów w innych miejscach na tej stronie).
whuber

Myślę, że tego rodzaju odpowiedź, choć nie tak wielka jak pełne wyjaśnienie, jest znacznie lepsza niż ta, która po prostu wycina i wkleja z Wikipedii, a nawet parafrazuje cały artykuł z Wikipedii. Jeśli Wikipedia jest dobra, pomocne jest informowanie o niej ludzi. A jeśli to wszystko, twoja odpowiedź wnosi swój wkład, bycie szczerym i po prostu szybkie podsumowanie i link jest właściwym rozwiązaniem.
Proszę przeczytać mój profil
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.