A raíz de este comentario del compañero @Atvjavi y de su respuesta al mío, se me planteó esta duda.
¿Es posible mirando sólo el histograma de una imagen saber si una foto la hemos sobresaturado?
A mi nunca se me había ocurrido usar el histograma para valorar eso, y no lo creía muy posible.
Así que me he puesto manos a lo obra para tratar de comprobarlo: ¿cómo se modifica el histograma a medida que aumenta la saturación?
Para ello se me ocurre simplificar la imagen al máximo y empezar por un parche monocolor de colores primarios y comparar los histogramas variando únicamente la saturación entre ellos.
Con ese fin, he creado una imagen de fondo negro con un parche de color rojo puro y luminosidad media al que luego vaya variando la saturación.
Tomo como referencia el que sería un RGB (255,0,0) o #FF0000 (255 de rojo y el resto 0) que sería el rojo más puro (saturado) y luminoso posible.
En HSL ese color sería un color rojo saturado y de luminosidad media: H=0 S= 100% L= 50%.
Ésta sería la imagen y su histograma:
Lógicamente es un pico en el canal rojo en el valor más alto posible de rojo, aunque su luminosidad es intermedia.
Veamos ahora un rojo menos saturado, con saturación media y misma luminosidad, tomemos un valor H=0, S=50% , L= 50% lo que correspondería en RGB a (191,64,64) o #BF4040.
El valor de rojo baja algo y aparecen azul y verde en cantidades iguales, lógicamente, para mantener la luminosidad.
Veamos imagen e histograma.
Vemos lógicamente que en el histograma el pico del rojo se desplaza a la izda y aparecen otros dos picos en la misma posición en verde y azul (en la imagen el verde no se ve porque está superpuesto) en valores significativamente más bajos.
Y ahora con un rojo aún menos saturado H=0,S=25%,L=50% o RGB (159,96,96) #9F6060, canal rojo aún más bajo y el verde y azul iguales pero con valores más altos y parecidos al valor del rojo.
Si seguimos bajando la saturación, los valores de rojo, verde y azul se van igualando, hasta legar al gris medio (para luminosidad del 50% en el caso de saturación 0.
H=0,S=0%,L=50% RGB (128,128,128) #808080
En este caso los tres picos coinciden en el punto intermedio del histograma (en la imagen sólo aparece el azul por la forma en que el programa dibuja los canales superponiendo uno sobre otro).
Luego no parece fácil distinguir si un color está saturado o no sólo por el histograma.
Un color saturado en uno de los canales primarios, tendrá un único pico, si no está tan saturado, aparecerán picos en los otros canales más o menos separados, estarán más juntos cuanto menos saturado esté.
Cuando empezamos a tener más colores, la cosa empieza a complicarse.
Veamos el histograma de las tres zonas de color superpuestas:
La cosa empieza a complicarse a la hora de interpretar el histograma y aquí estamso viendo únicamente tres parches de color en un color rojo que es uno de los colores primarios, si lo analizamos en otros colores que no sean primarios, la cosa puede ser más compleja, no será fácil interpretarlo.
El que el pico del rojo está más a la derecha o a la izda no está relacionado con la saturación en sí del color, o el hecho de que haya pico en el extremo derecho o izdo del histograma, si no en todo caso con la luminosidad y que haya algún canal quemado o empastado.
De hecho, si vemos el histograma de un color rojo saturado pero con una luminosidad superior a la luminosidad media, veremos que el pico se mantiene, sólo que los valores de azul y verde aumentan.
Por ejemplo un rojo saturado de luminosidad alta (H=0,S=100%,L=75) tiene unos valores RGB (255,128,128) #FF8080.
Vemos que no parece rojo, si no más bien rosa, esto es porque tanto los dispositivo como nuestra visión tienen un límite en el la cantidad de rojo que pueden añadir/apreciar y al aumentar la luminosidad añadiendo más azul y rojo, nuestra apreciación es que no es tan rojo.
El pico de rojo no se ha movido, pero se han añadido picos de azul y verde.
Por tanto juzgar la saturación por la posición más al borde del histograma o menos no es correcto, la saturación viene más bien dada por la distancia entre picos de los colores primarios que componen el color dado.
Si en vez de un color primario es un color diferente, con proporciones relativas dadas de los primarios el juzgar o identificar los picos puede ser mucho más complicado.
Pensemos en un color secundario o substractivo: el complementario del rojo, el celeste o cyan (RGB (0,255,255) #00FFFF H=180, S=100%, L=50%.
Y ahora los correspondientes a saturación de 50% y 25% manteniendo la luminosidad
Y los tres parches combinados.
Como digo demasiados picos como para juzgar distancia entre ellos, y si empezamos a añadir colores que no sean los fundamentales pues más complicado.
Y no digamos en una imagen real donde hay muchos colores no primarios mezclados en la imagen, tratar de discernir picos y la separación entre ellos no creo que sea viable.
Veamos una imagen en la que se combinan diferentes colores, cambiemos la saturación a ver si somos capaces de distinguir cambios en los histogramas que nos permitan saber si la saturación es mayor o menor.
En esta imagen predominan los tonos amarillentos de los edificios, verdes de la vegetación y al fondo azules del cielo.
Esta es la imagen tal y como sale de la cámara con un revelado neutro y su histograma.
Aumentemos ahora bastante la saturación general de la imagen.
Y ahora bastante desaturada
Si comparamos los histogramas entre sí, claro que apreciamos diferencias.
En la imagen saturada, los canales se separan más entre sí con respecto a la original, apretándose algunos más hacia los extresmos, como el rojo donde empieza a aparecer un pico en el rojo que antes no estaba.
En la desaturada sin embargo, se aproximan más entre ellos y el histograma tiene a ser más acampanado.
Así que eso nos puede dar una indicación de que estamos saturando demasiado o que no está muy saturado, si tenemos en mente el histograma original.
Claro que seguramente no necesitemos histograma para apreciar que la segunda está muy saturada.
Sin embargo el hecho de que tengamos un histograma como el segundo con un pico en el canal rojo en la derecha, si no sabemos el de partida, no indica por sí solo que la imagen esté saturada.
Dado que como vimos podemos tener valores de rojo muy saturados pero donde el canal del rojo no esté a la derecha, si no con luminosidades más bajas y haya picos más en la zona central.
El histograma último tampoco nos indica que la imagen esté desaturada, puesto que lo que importa no es dónde está el pico si a la derecha o la izda, si no la relación entre los picos de los canales que estén más o menos separados PARA UNA MISMA ZONA de la imagen y esa noción se ha perdido en el histograma, los picos que vemos no sabemos si se corresponden a la misma zona u a otra.
Nos puede servir de ayuda cuando sabemos del histograma del que partimos y vemos cómo va evolucionando, pero no podemos juzgar la saturación de la imagen a partir únicamente del histograma tradicional.
¿Qué tipo de histograma nos permitiría juzgar eso?
Bueno evidentemente un histograma HSL pero no sé de programas que lo implementen, no sé si alguno de los otros histogramas que algunos programas muestran puede ayudar a interpretar la saturación de la imagen.
Tal vez un histograma de waveform o de vectorscopio que se usan mucho en video y traen algunso programas como el Darktable permita juzgar este tipo de cosas con más facilidad.
Habrá que ir investigando pero hay que acostumbrarse a interpretarlos.