A codificação JPEG deve levar em consideração a gama?

11

Quando uma imagem é codificada usando JPEG, os pixels RGB são codificados primeiro em YUV e, em seguida, os canais UV são reduzidos. Antes de realmente fazer o DCT e codificar os coeficientes, o JPEG não corrige a gama do canal Y. Isso está correto? Não devemos determinar os coeficientes de DCT que mais afetarão nosso resultado visualizado?

Mokosha
fonte
Não sei, mas certamente faz sentido não corrigir a gama.
Joojaa
Não estou postando isso como resposta, pois não estou confiante, mas a percepção de brilho da visão humana não é linear. De fato, o sRGB faz um bom trabalho ao compensar isso e fornecer a maior precisão nas áreas importantes. Portanto, você pode achar que a correção de gama antes de comprimir luma pode realmente produzir resultados piores.
precisa saber é
AFAIK, os padrões de vídeo assumem R'G'B ', ie. um espaço de cores não linear, ao aplicar as transformações de cores 3x3 para / de YCbCr. Em um aplicativo como o vídeo em que se deseja maximizar a qualidade por bit, não faz sentido usar linear. Acho seções 27 e 29 da cor FAQ de Charles Poyton expressá-lo de forma mais clara: poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC27
Simon F
"Vídeo desmistificado" também diz: "YCbCr é o espaço de cores definido originalmente pelo BT.601 e agora usado para todos os formatos de vídeo de componentes digitais. .... A notação tecnicamente correta é Y'Cb'Cr ', pois todos os três componentes são derivado de R'G'B '. "
Simon F
O expoente gama é armazenado nos dados JPEG exif. a maioria dos softwares ignora-o totalmente. mas você pode assumir que, depois de decodificar um jpeg, ele já está no espaço gama, portanto não há conversão a ser feita antes de enviar o valor de rgb no buffer do monitor.
precisa saber é o seguinte

Respostas:

2

De acordo com a Wikipedia (insira a exoneração de responsabilidade padrão RE precisão):

O JPEG não define qual codificação de cores deve ser usada para as imagens. JFIF define o modelo de cores a ser usado: Y para escala de cinza ou YCbCr, conforme definido pelo CCIR 601.

YCbCr é um formato não linear. Como mencionei anteriormente, "Video Demystified" afirma:

"YCbCr é o espaço de cores originalmente definido pelo BT.601 e agora usado para todos os formatos de vídeo componente digital. .... A notação tecnicamente correta é Y'Cb'Cr ', pois todos os três componentes são derivados de R'G'B '. "

e de Charles' Poynton Cor FAQ estados

Os sistemas de vídeo aproximam a resposta da visão da luminosidade usando sinais R'G'B 'que estão sujeitos a uma função de potência de 0,45.

Com a compressão, buscamos a melhor representação visual por bit e, como o olho é não linear aproximadamente dessa maneira, faz sentido usar representações não lineares.

Simon F
fonte
A partir desses detalhes, como eu o entendo, o JPEG espera que os valores RGB de entrada sejam codificados de forma que o monitor aplique uma função de energia no monitor. Para recriar esses valores RGB específicos, eles não devem ser corrigidos antes da codificação.
Mokosha
1
O problema de declarar assim é que é um pouco ambíguo. Provavelmente, devemos afirmar que, se seus dados "RGB" forem, de fato, R'G'B '(e vamos supor que o sRGB se enquadre nessa categoria), você não deve modificar os valores antes de aplicar o R'G'B' => Matriz YCbCr. Se, no entanto, os dados foram, digamos, computados com um renderizador (possivelmente linear), processados ​​usando downscaling (que deve ser feito em espaço linear) ou, digamos, capturados (e limpos) com um CCD (que eu pense que é linear), então ele precisa ser remapeado antes da compactação JPEG.
Simon F
7

A resposta curta é "não", por motivos abordados no memorando de Alvy Ray Smith, Gamma Correction . Gamma não é sobre não-linearidade na percepção humana, é sobre não-linearidade em dispositivos de exibição (e, suponho, dispositivos de aquisição também).

Pseudônimo
fonte