¿Debería la codificación JPEG tener en cuenta la gamma?

11

Cuando una imagen se codifica utilizando JPEG, los píxeles RGB se codifican primero en YUV, y luego los canales UV se disminuyen. Antes de hacer el DCT y codificar los coeficientes, JPEG no corrige gamma el canal Y. ¿Es esto correcto? ¿No deberíamos determinar los coeficientes DCT que más afectarán nuestro resultado visto?

Mokosha
fuente
No lo sé, pero ciertamente no tiene sentido no corregir gamma.
joojaa
No estoy publicando esto como respuesta ya que no estoy seguro de ello, pero la percepción del brillo de la visión humana no es lineal. De hecho, sRGB hace un buen trabajo compensando eso y brindando la mayor precisión en las áreas que importan. Por lo tanto, es posible que la corrección gamma antes de comprimir la luma en realidad produzca peores resultados.
yuriks
AFAIK, los estándares de video suponen R'G'B ', es decir. un espacio de color no lineal, al aplicar las transformaciones de color 3x3 a / desde YCbCr. En una aplicación como el video donde uno quiere maximizar la calidad por bit, no tiene sentido usar lineal. Creo que las secciones 27 y 29 de las Preguntas frecuentes sobre el color de Charles Poyton lo expresan más claramente: poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC27
Simon F
"Video desmitificado" también dice: "YCbCr es el espacio de color originalmente definido por BT.601, y ahora se usa para todos los formatos de video de componentes digitales ... La notación técnicamente correcta es Y'Cb'Cr 'ya que los tres componentes son derivado de R'G'B '".
Simon F
El exponente gamma se almacena en datos exif JPEG. la mayoría del software lo ignora por completo. pero puede suponer que después de decodificar un jpeg ya está en el espacio gamma, por lo que no hay conversión que hacer antes de enviar el valor rgb en el búfer de visualización.
v.oddou

Respuestas:

2

De acuerdo con Wikipedia (inserte el descargo de responsabilidad estándar precisión RE)

JPEG no define qué codificación de color se utilizará para las imágenes. JFIF define el modelo de color que se utilizará: Y para escala de grises o YCbCr según lo definido por CCIR 601.

YCbCr es un formato no lineal. Como mencioné anteriormente, "Video Demystified" dice:

"YCbCr es el espacio de color originalmente definido por BT.601, y ahora se usa para todos los formatos de video de componentes digitales ... La notación técnicamente correcta es Y'Cb'Cr 'ya que los tres componentes se derivan de R'G'B "."

y los estados de preguntas frecuentes sobre el color de Charles Poynton

Los sistemas de video aproximan la respuesta de la visión a la luminosidad utilizando señales R'G'B 'que están sujetas a una función de potencia de 0.45.

Con la compresión, buscamos la mejor representación visual por bit y, dado que el ojo no es lineal aproximadamente de esta manera, tiene sentido usar representaciones no lineales.

Simon F
fuente
A partir de estos detalles, según tengo entendido, JPEG espera que los valores RGB de entrada se codifiquen de manera que la pantalla aplique una función de potencia en la pantalla. Para recrear los valores RGB específicos, deben no ser corregidos antes de la codificación.
Mokosha
1
El problema con decirlo así es que es un poco ambiguo. Probablemente deberíamos decir que, si sus datos "RGB" son, de hecho, R'G'B '(y supongamos que sRGB cae en esa categoría), entonces no debe modificar los valores antes de aplicar R'G'B' => Matriz YCbCr. Sin embargo, si los datos, por ejemplo, se han calculado con un renderizador (posiblemente lineal), se han procesado utilizando la reducción de escala (que debe hacerse en un espacio lineal) o, por ejemplo, se han capturado (y limpiado) con un CCD (que yo pensar es lineal), luego debe reasignarse antes de la compresión JPEG.
Simon F
7

La respuesta corta es "no", por razones cubiertas en el memo de Alvy Ray Smith, Corrección gamma . Gamma no se trata de la no linealidad en la percepción humana, se trata de la no linealidad en los dispositivos de visualización (y, supongo, los dispositivos de adquisición también).

Seudónimo
fuente