Czy kodowanie JPEG powinno uwzględniać gamma?


11

Kiedy obraz jest kodowany przy pomocy JPEG, piksele RGB są najpierw kodowane do YUV, a następnie próbkowane w dół kanały UV. Przed faktycznym wykonaniem DCT i zakodowaniem współczynników JPEG nie koryguje gamma kanału Y. Czy to jest poprawne? Czy nie powinniśmy określać współczynników DCT, które będą miały największy wpływ na nasz oglądany wynik?


Nie wiem, ale z pewnością ma sens nie korygowanie gamma.
— joojaa,

Nie zamieszczam tego jako odpowiedzi, ponieważ nie jestem do tego pewny, ale postrzeganie jasności przez ludzkie postrzeganie nie jest liniowe. W rzeczywistości sRGB ma całkiem niezłą pracę, kompensując to i zapewniając największą precyzję w istotnych obszarach. Może się więc okazać, że korekcja gamma przed kompresją lumy może faktycznie przynieść gorsze wyniki.
— yuriks,

AFAIK, standardy wideo zakładają R'G'B ', tj. nieliniowa przestrzeń kolorów przy zastosowaniu przekształceń kolorów 3x3 do / z YCbCr. W aplikacjach takich jak wideo, w których chce się zmaksymalizować jakość na bit, nie ma sensu stosowanie liniowości. Myślę, że rozdziały 27 i 29 FAQ Charlesa Poytona dotyczące kolorów wyrażają to jaśniej: poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC27
— Simon F

„Odszyfrowane wideo” mówi również: „YCbCr to przestrzeń kolorów pierwotnie zdefiniowana przez BT.601, a teraz używana dla wszystkich cyfrowych formatów komponentowych wideo.… Technicznie poprawną notacją jest Y'Cb'Cr”, ponieważ wszystkie trzy komponenty są otrzymane z R'G'B '. ”
— Simon F

Wykładnik gamma jest przechowywany w danych JPEG exif. większość oprogramowania całkowicie go ignoruje. ale można założyć, że po dekodowaniu pliku jpeg jest już w przestrzeni gamma, więc nie trzeba wykonywać konwersji przed wysłaniem wartości rgb do bufora wyświetlacza.
— v.oddou

Odpowiedzi:


2

Według Wikipedii (wstaw standardową dokładność zastrzeżenia RE):

JPEG nie określa, jakie kodowanie kolorów ma być stosowane w przypadku obrazów. JFIF definiuje model kolorów, który ma być używany: Y dla skali szarości lub YCbCr zgodnie z definicją CCIR 601.

YCbCr jest formatem nieliniowym. Jak wspomniałem wcześniej, „Video Demystified” stwierdza:

„YCbCr to przestrzeń kolorów pierwotnie zdefiniowana przez BT.601, a obecnie używana dla wszystkich cyfrowych formatów komponentowych wideo.… Technicznie poprawną notacją jest Y'Cb'Cr ', ponieważ wszystkie trzy komponenty pochodzą z R'G'B „.”

Charles' Poynton za Kolor FAQ Zjednoczone

Systemy wideo aproksymują odpowiedź światła na widzenie za pomocą sygnałów R'G'B ', z których każdy podlega funkcji mocy 0,45.

W przypadku kompresji dążymy do najlepszej reprezentacji wizualnej na bit, a ponieważ oko jest w przybliżeniu nieliniowe w ten sposób, sensowne jest stosowanie reprezentacji nieliniowych.


Z tych szczegółów, jak rozumiem, JPEG oczekuje, że wejściowe wartości RGB zostaną zakodowane w taki sposób, że wyświetlacz zastosuje funkcję zasilania po wyświetleniu. W celu odtworzenia tych szczególnych wartości RGB, powinny one nie zostać wyrównane przed kodowaniem.
— Mokosha

1
Problem w stwierdzeniu tego w ten sposób polega na tym, że jest to trochę niejednoznaczne. Prawdopodobnie powinniśmy stwierdzić, że jeśli twoje dane „RGB” są w rzeczywistości R'G'B ”(i załóżmy, że sRGB należy do tej kategorii), nie powinieneś modyfikować wartości przed zastosowaniem R'G'B” => Macierz YCbCr. Jeśli jednak dane zostały, powiedzmy, obliczone za pomocą mechanizmu renderującego (więc możliwie liniowego), zostały przetworzone przy użyciu skalowania w dół (co powinno być wykonane w przestrzeni liniowej) lub, powiedzmy, przechwycone (i wyczyszczone) za pomocą CCD (który ja think jest liniowy), a następnie należy go odwzorować przed kompresją JPEG.
— Simon F

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.