2011-09-11 16 views
6

Ho cercato di ottenere una visualizzazione per alcuni giorni. Sto generando un'immagine di diffrazione e voglio colorarla a seconda della lunghezza d'onda della luce.
Il modo più semplice per ottenere il colore giusto era usando lo spazio HSV con H variabile con la lunghezza d'onda e S, V impostato su 1.0
Ahimè, non riesco a trovare una formula/algoritmo/modo per mescolare colori diversi nel Spazio HSV.aggiunta/miscelazione dei colori in HSV Space

Esiste una formula per la miscelazione in HSV o forse un altro modo comprensibile?

+0

È possibile trovare questa domanda precedente informativa: http://stackoverflow.com/questions/6130621/algorithm-for-finding-the-color-between-two-others-in-the-colorspace-of-painted –

risposta

6

Onestamente, convertivo l'RGB, mediavo i componenti e convertivo nuovamente in HSV.

Non è il modo più efficiente, ma presumibilmente è necessario o necessario RGB < -> codice HSV e il calcolo RGB è probabilmente molto più semplice.

+0

I Hai fatto come hai suggerito e funziona. – Nox

+0

È più come 1. per ogni lunghezza d'onda: calcola l'intensità per ciascun pixel. Normalizza, aggiungi alla ** doppia ** matrice (immagine). 2. Prima di scrivere: normalizza l'immagine Array, ridimensiona di 255,0, esegui il cast in ** int ** 3. Infine archivia in File (PPM raw o con un po 'di lavoro PNG) L'unica cosa che rimane sarà controllare in qualche modo se le immagini sono fisicamente corrette. – Nox

+1

Non capisco perfettamente, anche se sembra interessante. Se stai normalizzando i colori RGB, li proietti su una regione curva dello spazio colore. Tbh per il salvataggio, in questi giorni scriverei solo byte non elaborati e utilizzare ImageMagick sulla riga di comando per trasformarlo in un file PNG. – andrewmu

5

Uno dei riferimenti standard Computer Graphics: Principles and Practice di Foley et al. ha questo da dire nella sezione 13.3.7 "interpolazione in Color Space":

"Quando due immagini sono miscelati [...] i colori possono essere molto lontano, e un modello additivo, come ad esempio RGB, è Se, d'altra parte, l'obiettivo è quello di interpolare tra due colori di tonalità fissa (o saturazione) e mantenere la tonalità fissa (o saturazione) per tutti i colori interpolati, allora è preferibile HSV o HLS. -saturation interpolazione in HSV o HSL è non visto come aver fissato la saturazione da parte dello spettatore [...]"

Quindi sono d'accordo con il suggerimento di @andrewmu, che sembra t è il miglior consiglio in generale.

+0

Cosa fare se si desidera miscelare più di due colori nello spazio HSV (luminosità e saturazione impostate su 1)? Puoi semplicemente aggiungere i vettori di colore sulla ruota dei colori? Se aggiungi tutto il colore dell'arcobaleno in questo modo (intorno al volante), dovresti ottenere un colore bianco, giusto? – pkout