¿Por qué usamos el espacio de color HSV con tanta frecuencia en la visión y el procesamiento de imágenes?

64

Veo el espacio de color HSV utilizado en todo el lugar: para seguimiento, detección humana, etc. Me pregunto, ¿por qué? ¿Qué tiene este espacio de color que lo hace mejor que usar RGB?

gachas de avena
fuente
3
Esta es una muy buena pregunta. En mi opinión, se beneficiaría de ser un poco más detallado: qué es HSV, qué es RGB. Como la mayoría de las respuestas están comparando HSV con RGB, el título podría reformularse para comparar estos dos espacios de color.
PhilMacKay
2
Otra buena pregunta podría ser: "¿Por qué se usa HSV por todas partes en lugar de HSL?"
posfan12

Respuestas:

60

La respuesta simple es que, a diferencia de RGB , HSV separa la luma , o la intensidad de la imagen, del croma o la información de color. Esto es muy útil en muchas aplicaciones. Por ejemplo, si desea hacer la ecualización del histograma de una imagen en color, probablemente quiera hacerlo solo en el componente de intensidad y dejar solo los componentes de color. De lo contrario, obtendrás colores muy extraños.

En la visión por computadora, a menudo desea separar los componentes de color de la intensidad por varias razones, como la solidez de los cambios de iluminación o la eliminación de sombras.

Sin embargo, tenga en cuenta que HSV es uno de los muchos espacios de color que separan el color de la intensidad (Ver YCbCr, Lab, etc.). HSV a menudo se usa simplemente porque el código para convertir entre RGB y HSV está ampliamente disponible y también se puede implementar fácilmente. Por ejemplo, Image Processing Toolbox para MATLAB incluye funciones rgb2hsvy hsv2rgb.

Dima
fuente
42

La información de color suele ser mucho más ruidosa que la información de HSV.

Permíteme darte un ejemplo: algunos amigos y yo estuvimos involucrados en un proyecto relacionado con el reconocimiento de señales de tráfico en videos de escenas reales (ruido, sombras y, a veces, oclusión presente). Era parte de un proyecto más grande, por lo que nos dio tiempo para probar diferentes enfoques para este problema en particular (y reutilizar enfoques más antiguos). Yo no probé el enfoque basado en el color, pero recuerdo una información interesante: _ ¡El componente RGB dominante en un signo de PARADA a menudo no era rojo! (principalmente debido a las sombras)

Por lo general, puede obtener mejor información de un espacio de color HSV . Permítanme intentar dar un ejemplo de experiencia personal nuevamente: intente imaginar que tiene una imagen de un plano de un solo color con una sombra. En el espacio de color RGB, la parte de sombra probablemente tendrá características muy diferentes a la parte sin sombras. En el espacio de color HSV, es más probable que el componente de tono de ambos parches sea similar: la sombra influirá principalmente en el valor , o tal vez el componente de saturación , mientras que el tono , que indica el "color" primario (sin su brillo y diluido por el blanco / negro) no debería cambiar tanto.

Si estas explicaciones no le parecen intuitivas, sugiero:

  • intente comprender mejor los componentes utilizados para representar un color en el espacio de color HSV y renueve su conocimiento de RGB
  • Trate de ver las razones por las cuales se desarrolló este tipo de representación de color: siempre se basa de alguna forma en la interpretación humana del color.

    por ejemplo, a los niños no les gustan los objetos de alto valor == , prefieren los objetos altamente saturados , objetos en los que el color es intenso y no diluido

  • después de obtener esto y desarrollar algo de intuición, debe jugar con imágenes: intente descomponer varias imágenes en sus componentes RGB y HSV

    Su objetivo sería ver y comprender una diferencia en estas descomposiciones para imágenes que contienen sombras, iluminación intensa, reflejo de luz.

  • Si tiene un tipo particular de imágenes con las que le gusta jugar, intente descomponerlas: quién sabe, quizás RGB realmente sea más adecuado para sus necesidades que HSV :)

penelope
fuente
1
Si es una sombra, debería cambiar solo el brillo, no la saturación.
Andrey Rubshtein
@Andrey, como dije, no trabajé yo mismo en el enfoque basado en el color, pero puedo especular que si no fuera solo una sombra, probablemente alguna iluminación indirecta del entorno o algo similar también jugó un papel.
Penélope
1
Tienes razón. Sin embargo, en el caso de la iluminación indirecta, el Hue también puede cambiar.
Andrey Rubshtein
1
@Andrey De ahí mi redacción: "más probable", "similar", "principalmente influencia", ... Después de todo, no estaba explicando HSV, solo daba algunos ejemplos y conjeturas fundamentadas basadas en la experiencia. Y, la mejor manera de elegir el espacio de color más adecuado para cualquier aplicación es jugar con su base de datos de imágenes y diferentes espacios de color
penelope
3
Cualquier cosa en la sombra y, por lo tanto, no iluminada por la fuente de luz primaria (el sol) está siendo iluminada por la fuente de luz secundaria: el cielo, que es una luz gigante, brillante y muy azul. Para los ojos humanos, el rojo todavía se ve rojo, ya que nuestros ojos realizan mediciones de color relativas en lugar de un color absoluto, por lo que sus fotos en interiores sin flash se ven más amarillas de lo que cree que deberían. Y estoy totalmente de acuerdo en jugar con su base de datos de imágenes.
John Robertson el
8

Usar solo el componente Hue hace que el algoritmo sea menos sensible (si no invariable) a las variaciones de iluminación.

Otra opción popular es el espacio de color LAB, donde los canales AB representan el color y las distancias euclidianas en el espacio AB coinciden mejor con la percepción humana del color. Nuevamente, ignorar el canal L (Luminancia) hace que el algoritmo sea más robusto para iluminar las diferencias.

nimrodm
fuente
7

La mejor respuesta que puedo imaginar es: RGB tiene que ver con "detalles de implementación" con respecto a la forma en que RGB muestra el color, y HSV tiene que ver con los componentes del "color real". Otra forma de decir que esto sería RGB es la forma en que las computadoras tratan el color, y HSV intenta capturar los componentes de la forma en que los humanos percibimos el color.

Elaboraré:

El color es una percepción basada en ondas electromagnéticas. Las propiedades naturales de estas ondas son, por ejemplo, intensidad y frecuencia. Si barrimos la frecuencia de una onda de luz de infrarrojo a ultravioleta, percibiríamos visualmente una variación de color a lo largo de los colores del arco iris. Los colores del arco iris podrían considerarse "colores puros" porque están representados por ondas de frecuencia única.

Ahora el ojo humano solo puede responder, o "resonar" a tres frecuencias de luz principales, no sorprendentemente rojo, verde y azul. El hecho es que esta respuesta no es lineal, por lo que la retina puede distinguir un color puro dado (e implícitamente su "frecuencia") por la respuesta combinada de los tres componentes de color .

El espacio de color RGB existe como tal solo para imitar el funcionamiento interno de nuestra retina, de modo que la gran mayoría de los colores se pueden representar en las pantallas de la computadora por medio de un color conveniente (desde el punto de vista de la computadora) de 24 bits por píxel codificación. El espacio de color RGB no tiene una relación intrínseca con las propiedades naturales del color, ni con la interpretación humana del color.

Por ejemplo, cualquier operación aritmética realizada por canales en el espacio RGB (por ejemplo, generación de gradientes de color) da resultados muy crudos o incluso simplemente "incorrectos". Es por eso que se recomienda crear mapas de colores al convertir las paradas de color de RGB a otros espacios de color (HLS, Lab, etc.), realizar las interpolaciones y luego convertir los valores interpolados nuevamente a RGB.

¡Espero que esto ayude!

heltonbiker
fuente
2
No estoy de acuerdo. Hay tres dominios, no dos: humanos, computadora y física. El modelo RGB se deriva del ojo humano, que tiene tres receptores de color.
MSalters
@MSalters Creo que estamos hablando de las mismas cosas (aunque tal vez no me he dejado completamente claro). Las pantallas RGB están hechas para combinar con nuestro sistema de percepción del color. Tienen una contraparte de la computadora, las "coordenadas" (R, G, B). Dado que estas coordenadas se asignan a la implementación más bien que a las propiedades físicas, de "naturaleza real" del color, no son adecuadas para realizar algún procesamiento matemático, por ejemplo, interpolación de gradiente perceptualmente lineal, corrección de color, operaciones de brillo y saturación, etc.
heltonbiker
2

HSV significa Hue-Saturation-Value. En realidad, es un tipo de representación de plano de color (como RGB, YCbCr, etc.).

Es un formato de representación de color independiente del dispositivo: la representación de color HSV es útil para detectar tipos de color específicos, por ejemplo: color de piel, color de fuego, etc.

MatlabLa función para convertir una imagen RGB a un plano HSV es rgb2hsv('/inputimage_name').

Nish
fuente
1

Te daré un ejemplo para entender. Al igual que nuestra mano tiene muchas partes de palma, palma trasera y debajo de eso. podemos ver diferentes variaciones de color en estas áreas, pero el tono para todas estas regiones no varía mucho, por lo que el valor del tono puede ser útil en la segmentación manual.

adicto al crack
fuente
1

No sé nada de eso que sea especialmente mejor con HSV en comparación con YUV o LAB que lo haría mejor para la extracción de características y la invariancia o visualización de la iluminación. Supongo que HSV es el más utilizado debido a la convención y la continuidad: es más fácil comparar resultados y comunicarse entre sí si ambos usan el mismo espacio de color.

Dicho esto, HSV (a diferencia de RGB) se usa en visión artificial por 2 razones que conozco:

  1. Visualización . Siempre que tenga información direccional densamente sobre una imagen, HSV es un buen espacio de color para la visualización. En lugar de trazar pequeños vectores sobre una imagen (lo desordenarán todo), puede trazar el color con HSV, colocando el vector direccional asignado a H (ángulo del vector) y S (magnitud del vector). Esto deja el componente Valor, que se puede configurar de varias maneras dependiendo de lo que desee lograr. Vea el siguiente ejemplo del conjunto de datos de flujo óptico middlebury. HSV se usa para mostrar direcciones densamente.

Ejemplo de middlebury DB sobre flujo óptico

  1. Característica de extracción e iluminación de invariancia , como se explica en las otras respuestas.
Stefan Karlsson
fuente
0

Como otros mencionaron, es beneficioso separar la luma del croma. La luma varía mucho en la escena según la cantidad de luz que cae sobre el objeto. La croma, por otro lado, se correlaciona mejor con las propiedades intrínsecas del objeto, y para que las imágenes con balance de blancos sean más o menos invariables.

Sin embargo, me gustaría agregar que HSV, HSL, o de hecho cualquier espacio de color con parametrización polar del plano de croma, son malas elecciones para ese propósito. Esto se debe a que introducen una singularidad en la línea de grises (¿qué tono es gris?), Lo que los hace muy sensibles al ruido y al balance de blancos. Además, comparar entre dos colores en un sistema de coordenadas polares no es tan sencillo. También tenga en cuenta que ni el valor en HSV ni la ligereza en HSL corresponden a la ligereza percibida por el ser humano ni a ninguna otra medida física de energía.

Hay muchos espacios de color lineales que brindan la misma separación luma-croma mientras conservan la linealidad (YCbCr, YUV) o modelan la visión humana correctamente (LUV, LAB). Con ellos, puede comparar dos colores usando una norma Euclidean L2 en sus cromaticidades, lo que resulta en un algoritmo más robusto en general.

¿Por qué HSV / HSL se usan con tanta frecuencia entonces? Difícil de dar una respuesta objetiva. Según mi experiencia, se debe principalmente a la ignorancia y la disponibilidad de rutinas de conversión RGB-> HSV. Tuve que trabajar con código cuyos autores no entendían la corrección gamma, y ​​mucho menos diferentes espacios de color. El código visto que convirtió RGB a HSV luego segmentó la imagen según el tono, sin tener en cuenta el hecho de que es una cantidad modular. Creo que podemos estar de acuerdo en que esas no fueron decisiones conscientes respaldadas por ningún motivo.

ybungalobill
fuente
-1

El modelo de color HSV está más correlacionado con la forma en que los humanos ven los objetos de color, en comparación con RGB, YUV, Lab, etc.

Vemos de qué color es el objeto (Hue), cuánto está saturado (Saturación) y cuánta luz blanca cae sobre él (Intesity).

Deepak
fuente