Sto provando a scrivere un programma per leggere i file curve GIMP e applicarli a un'immagine. Ho implementato con successo le curve per i canali rosso, verde e blu, ma non riesco a farlo funzionare per il valore pseudocanale.
Per i canali colore, creo solo una tabella di ricerca dalle curve e eseguo un'iterazione tra i pixel facendo qualcosa del tipo:
red = redlookup[red]
green = greenlookup[green]
blue = bluelookup[blue]
Bene finora, ottengo esattamente gli stessi risultati nel mio programma e in GIMP.
Nella pagina GIMP collegata sopra, si afferma che il canale del valore è definito come v = max(r, g, b)
ma non capisco come regolare ciascun canale di colore dalla ricerca di questo valore. Attualmente sono al ginocchio nel codice sorgente di GIMP, ma è piuttosto complicato.
In sintesi: se ho un array valuelookup
che rappresenta la curva per il valore pseudochannel, come posso usarlo per regolare i valori RGB per ogni pixel in un'immagine?
GIMP definisce i canali come segue:
Valore
The curve represents the Value, i.e. the brightness of pixels as you can see them in the composite image.
Rosso; Verde; Blu
The curve represents the quantity of color in each of the three RGB channels. Here, dark means little of the color. Light means a lot of the color.
I valori vanno da 0 a 255.