2011-09-11 14 views
6

He estado tratando de obtener una visualización durante unos días. Estoy generando una imagen de difracción y quiero colorearla dependiendo de la longitud de onda de la luz.
La manera más fácil de obtener el color correcto fue mediante el uso del espacio HSV con H variando con la longitud de onda y S, V establecido en 1.0
Por desgracia, no puedo encontrar una fórmula/algoritmo/forma de mezclar diferentes colores en el Espacio HSV.agregando/mezclando colores en el espacio de HSV

¿Existe una fórmula para mezclar en HSV o quizás otra forma comprensible?

+0

Puede encontrar esta pregunta anterior informativa: http://stackoverflow.com/questions/6130621/algorithm-for-finding-the-color-between-two-others-in-the-colorspace-of-painted –

Respuesta

6

Honestamente, convertiría el RGB, promediaría los componentes y volvería a convertir a HSV.

No es la manera más eficiente, pero presumiblemente tendrá o necesitará RGB < -> código HSV y el cálculo RGB es probable que sea mucho más simple.

+0

I He hecho lo que sugirió y funciona. – Nox

+0

Es más como 1. para cada longitud de onda: calcule la intensidad de cada píxel. Normalizar, agregar a la matriz ** doble ** (imagen). 2. Antes de escribir: normalice la imagen Matriz, escale por 255.0, envíe a ** int ** 3. Finalmente guarde en Archivo (PPM en bruto o con un poco más de trabajo PNG) Lo único que queda será verificar de alguna manera si las imágenes son físicamente correctas. – Nox

+1

No entiendo completamente, aunque suena interesante. Si está normalizando los colores RGB, los proyectará en una región curva del espacio de color. Tbh para ahorrar, estos días solo escribo bytes sin formato y uso ImageMagick en la línea de comando para convertirlo en PNG. – andrewmu

5

Una de las referencias estándar Computer Graphics: Principles and Practice de Foley et al. tiene esto que decir en la sección 13.3.7 "interpolación en el espacio de color":

"Cuando se mezclan dos imágenes [...] los colores pueden ser bastante distante, y un modelo aditivo, tales como RGB, es Si, por otro lado, el objetivo es interpolar entre dos colores de tono fijo (o saturación) y mantener el tono fijo (o saturación) para todos los colores interpolados, entonces es preferible HSV o HLS. interpolación -saturation en VHS o HSL es no visto como habiendo fijado la saturación por el espectador [...]"

Así que ellos están de acuerdo con la sugerencia de @andrewmu, que parece t la mejor sugerencia en general.

+0

¿Qué sucede si desea mezclar más de dos colores en el espacio HSV (brillo y saturación establecidos en 1)? ¿Puedes agregar los vectores de color en la rueda de colores? Si agrega todo el color del arco iris de esta forma (en todo el contorno de la rueda), debería obtener un color blanco, ¿no? – pkout

Cuestiones relacionadas