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?

Mokosha
źródło
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.

Simon F.
źródło
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