¿Se puede valorar la saturación de colores de una imagen a partir del histograma RGB?

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:


image

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.


image

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.


image

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


image

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:


image

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.


image

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%.


image

Y ahora los correspondientes a saturación de 50% y 25% manteniendo la luminosidad


image


image
Y los tres parches combinados.

image

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.
IMG_8338
image

Aumentemos ahora bastante la saturación general de la imagen.


image

Y ahora bastante desaturada


image

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.

2 Me gusta

La observación del histograma parece un camino muy enrevesado para juzgar la saturación; no obstante, lo he utilizado mucho para encontrar dominantes de color en paisajes con mucha presencia de la nieve. Como se supone que la nieve es blanca o, todo lo más, gris cuando está en sombra, los diferentes picos correspondientes a la nieve, que suelen ser fáciles de identificar, tendrían que superponerse. Para ello, basta con modificar el balance de blancos hasta que coincidan.
El problema puede residir en que la nieve en sombra suele tener un componente azulado que no existe en la nieve soleada. En estos casos, no queda otra que una solución de compromiso o trabajar por zonas aplicando una corrección específica para las sombras.

1 me gusta

Sí, efectivamente yo también lo uso a veces para ese tipo de cosas. Además como esa nieve suele tener una luminosidad bastante alta en la imagen suele haber un pico en la zona de altas luces fácil de distinguir.
Así puedes ajustar los picos para que coincidan, alguna vez lo he usado.

Claro que también se puede usar un parche para medir el color de la nieve o usarlo para el balance de blancos y partir de ahí, protegiendo luego las zona de altas luces de las ediciones posteriores que afecten al color, si esa zona de nieve resulta fácil de seleccionar combinada con máscaras de luminosidad.

Si estás conforme con los colores del resto también se puede hacer una desaturación selectiva con máscaras de luminosidad y selección para afectar sólo a la nieve.
También eso lo he usado.
Claro que depende de cada situación y lo fácil que sea hacer la selección
Soy muy perezoso para selecciones detalladas a base de pintar.

Estoy mirando los histogramas de tipo vetoscopio y esos sí que te dan una información clara sobre la saturación de la imagen y en qué tonos se esá produciendo esa saturación.

Claro que habrá que aprender a mirarlos.

1 me gusta

No te has aburrido eh Fer??? jajaja, Yo mientras haciendo lo que mejor se me dá… fotos, jajaja.

Mucha tela y creo que he entendido algo de lo que propones, :see_no_evil:, soy muy torpe para estos niveles de ejercicios. Como en mi caso hago mas o menos todo en base al histograma, voy viendo si se “revienta” algun color y lo corrijo, aunque me ha quedado claro que no es la mejor solución.

Pero como creo tambien que aqui ya se me ha puesto el apodo de “el saturado”, jajaja, pues ya voy con un cuidado de aupa. Y voy poniendo sobreaviso a los compis, de momento nadie se ha quejado de la foto de la Lavanda…

No obstante me alegro si has sacado alguna conclusion “decente”, de lo que he generado… Y seguro que le va a venir muy bien al personal.

P.D. Donde puedo subir el Time lapse cuando lo edite??? El sistema no me deja subir archivos MP4, por lo menos desde el movil. :man_shrugging:

Uy lo del timelaps me pillas… no tenemos algo específico en el foro… a ver que consulto donde puede ser la mejor opción, tampoco vamos a abrir una categoría para un par de ellos… quizás en la propia de paisajes.

Ya vemos.

Lo del histograma es que como no proporiona ninguna visión espacial, los picos que ves no sabes si se corresponden entre sí o no (a la misma zona, quiero decir) puedes tener dos picos muy juntos que parecerían poco saturados y corresponder a dos zonas muy separadas de la imagen y muy saturadas.

Pero sí que sirve el ir viendo si al aumentarla (ves que se van separando los picos) se hacen muy agudos o así.

Pero para eso hay mejores opciones.
Los histogramas de vectorscopio son ideales para eso, pero no todos los programas los tienen y todavía no me he metido mucho a entender qué infromación proporcionan y hay diversos tipos.
Es como una rueda de colro con los vectores saliendo desde el centro según su hue y con una longitud que depende de la saturación o de la luminancia según el tipo, pero ya digo tengo que mirarlos más a fondo.
El Darktable los tiene.
Otra alternativa son los waveform que son como contar los pixels del histograma pero por columnas (o filas) y representar en cada canal el nivel alcanzado por los de esa fila.
Te dan una cierta información espacial de cómo evolucionan los colores de izda a dcha de la imagen o de arriba abajo (tengo que mirarlos también).

El archivo que genera el time lapse es MP4, pero no solo para el time lapse estaria bien, cuando hago fotos de setas, suelo tambien hacer videos cortos del esquema de iluminacion, que seria bueno para que la gente pueda entender mejor como se ha hecho.

Por si no queda claro lo que quería decir con lo de que el histograma no da información espacial y puede haber dos imágenes una muy saturada y otra sin saturar y ambas con los mismos picos.

Aquí pongo el histograma de esta imagen con un círculo relleno de gris medio que no tiene nada de saturación.
Lógicamente sólo da un pico en el centro del histograma con todos los canales superpuestos (este programa sólo muestra el azul porque los superpone y es el último que dibuja).


image

Y ahora tres círculos de colores primarios puros, completamente saturados y luminosidad 50%


image

Como vemos ambos histogramas son idénticos, tres picos del rojo, verde y azul justo en el centro del histograma como corresponde a su luminosidad del 50% (con cualquier otra sería lo mismo pero con el pico en otra posición).
Sin embargo la primera imagen es una imagen completamente monocromática, sin ninguna saturación ni color, mientras que la segunda son tres parches de colores completamente saturados.

Por tanto el histograma por sí mismo no puede darnos información fiable sobre la saturación de una imagen.

1 me gusta

Interesante e instructivo hilo. Gracias por el trabajo.

Es algo que tampoco me había planteado, al entender el histograma como una herramienta para interpretar la luminosidad de la imagen.

Sí, es que es su finalidad, la verdad, pero bueno alguna otra conclusión se puede sacar.
Y hay otros histogramas como el vectorscopio o el waveform que dan mucha más información y otro tipo de información.
Pero hay que aprender a mirarlos e interpretarlos, porque aunque leas lo que son luego pasa como con las primeras veces que mirabas el histograma: cuesta aprender a interpretarlos.

En DT hay muchas opciones de histograma.

Hola,

Vaya curro Fernando, contagian esas ganas de saber. En mi modesta opinión el histograma muestra luminosidad, no saturación, dudo mucho que se pueda saber esto con el histograma, pero buen intento, bien expuesto y como se nota que eres profe.

Salu2.
Albert

1 me gusta

No, si yo opinaba lo mismo, que no se puede saber la saturación con un histograama tradicional, y las pruebas lo demuestran.
Pero me entró la curiosidad ante el comentario de Javi.

Hay algunos indicadores cuando ves la evolución dde tu histograma, poro por sí sólo no te lo indica claramente.

Normalmente en Darktable uso el histogramas de ondas. Habrá que probar en serio el vectorcopio, pero por el momento no parece fácil de interpretar, sobre todo cuando se expande en un área reducida o no hay mucha saturación.

En RGB(8 bits), la saturación se conoce por el nivel (0~255) Si el picker (gotero) te sitúa el nivel a 255, ese color esta al nivel máximo de saturación.

En el histograma eso no esta indicado (numéricamente), puedes tener una percepción según "la montañita si se acerca al límite superior o no. Pero eso es una estimación.

Saludos.

No, en absoluto, la saturación de una imagen nada tiene que ver con el nivel de brillo de uno de sus canales.

Lo he comentado en el hilo.
La saturación tiene más que ver con la diferencia entre canales RGB, lo que les separa, pero no es fácil valorarlo en RGB, para eso están otros modos como HSL o HSV.

Si tienes un valor con el rojo en 255 y 0 en los otros dos canales, tienes un rojo lo más saturado posible, pero uno con 128 estará también igualmente saturado pero con menos brillo y luminosidad.

Otro rojo con 255 de valor pero con valores muy altos de verde y azul (250 por ejemplo) será un color con muy poca saturación (2% en concreto) y el blanco no está nada saturado y tiene todos sus canales en 255.
Así que la saturación nada tiene que ver con que tengas un pico en valores altos o bajos en determinado canal.

Y el hecho de que tengas tres picos en los canales muy cercanos a 255 en el histograma tampoco te indica que esa imagen no esté saturada puesto que esos picos del histograma no tienen por qué corresponderse necesariamente a la misma zona de la imagen (también está demostrado en el comentario que puse en segundo lugar).

Para valorar la saturación tenemos que usar un modelo de color que incluya la saturación.

Y en cuanto a histogramas, pues el vectorscopio que nos permite ver la saturación (y brillo según el modo que escojas) y qué color se satura.
Es como un diagrama polar, con un círculo de color donde se representan los colores puros y unos vectores radiales que indican el grado de saturación (más largos cuanto más saturado) en ese color en la imagen.
Pero tengo que estudiarlos un poco más esos histogramas, el concepto puede ser sencillo pero aprender a visualizarlos requiere costumbre.

Cada histograma tiene sus virtudes.
El tradicional que solemos usar es el que menos información da de la imagen, el waveform te proporciona casi la misma información y además información sobre la distribución espacial.

2 Me gusta

Me encanta leerte Fernando.

Saludos.
Albert .

Mi afirmación se basaba en este artículo de Guillero LUIJK en concreto tiene algunos mas, que tocan el tema, donde la saturación se mide y valora con el histograma. Técnicamente no puedo discutirte, pero a mi escasa formación se le hace mas entendible.

Saludos.

Si puedes asumir que esos picos que ven corresponden a la misma zona de la imagen, la saturación viene dada por la distancia entre los picos, cuanto más se separen unos de otros más saturado estará, cuanto más cerca menos saturación.

Que los valores estén más hacia las luces altas o bajas no tiene que ver con la saturación, puesto que la saturación es la misma en un rojo puro con 255 de brillo que con 128.

Además como queda demostrado antes, puedes tener tres picos en el histograma muy juntos que parecería una zona muy saturado y resulta que corresponde a tres zonas de similar tamaño con tres colores primarios altamente saturados, o al contrario, ya que en el histograma no puedes saber si esos picos corresponden a una zona u otra, no proporciona distribución espacial.

Aunque viendo la imagen y sobre todo la evolución del histograma te puedes hacer una idea de si estás pasándote o no con la saturación, si sólo te dan el histograma no hay forma de saber si la imagen tiene zonas altamente saturadas o no.

Y hay muchas mejores herramientas para valorar la saturación de la imagen (salvo si tu programa no las proporciona, claro).

Así es, otra forma de verlo que al final es lo mismo.

Ahora si hay histogramas que proporcionan informacion de saturacion como el vectorscopio.
Y otros con info parcial de posicion, por lineaso columnas, como los wave form.

Elclasico RGB es el mas pobre en informacion y mas rigido.

Es bueno poder tener esos otros, si bien hay que acostumbrarse a ellos.
En ello ando.

Con un monitor de forma de onda si que puedes valorar la saturación, el monitor te da información de la posición horizontal de la imagen (para la vertical tienes que ajustar la ventana de tiempo para que abarque solo algunas líneas y no la imagen completa). La saturación se ve como lo (poco) mezclado que estén los tres colores en una misma posición horizontal.

1 me gusta