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?
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?
Respuestas:
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 rgb2hsv
y hsv2rgb
.
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:
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 :)
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.
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!
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.
Matlab
La función para convertir una imagen RGB a un plano HSV es rgb2hsv('/inputimage_name')
.
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.
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:
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.