Showing posts with label colori. Show all posts
Showing posts with label colori. Show all posts

15 December 2012

E perché allora il cielo non è viola?

Ah! Io, io, io! Questa la so!
La risposta è: perché non esistono frequenze viola!
 
Per amor di precisione provo a ripescare le fonti che avevo letto ormai molto tempo fa, ai tempi delle api e di compiz, ma mi ritrovo, di nuovo, naufrago tra altre pagine di wikipedia che non conoscevo... e 'l naufragar m'è dolce!
 
Innanzitutto trovo conferma, credo, che lo spettro visibile va dal rosso al blu senza passare dal viola (su internet troverete un sacco di gradienti cromatici in cui compare il viola al di là del il blu, ma photoshop non è una fonte affidabile: se si cercano foto, e non immagini sintetiche, il viola non si vede — cfr. ad esempio , qui, qui o qui).
 
Però, vabbé, il termine violetto è ambiguo, e alcuni, in taluni contesti, io credo, intendono con esso riferirsi ad una specie di indaco, a quel profondo blu che starebbe ancora più in là del blu dello spettro. Perché non è che io sia proprio convinto che davvero, al limite del visibile, al blu si aggiunga una qualche pur debole tonalità di rosso: però non riesco a trovare in rete riferimenti autorevoli né in un senso, né nell'altro. Il dubbio, chiaramente, è che magari, chissà, la curva di sensibilità del cono "L", quello col picco di sensibilità più spostato verso le lunghezze d'onda più lunghe (rosse), abbia una qualche pur piccola gobbetta dalle parti delle onde più corte (blu) dove ha il suo picco di sensibilità il cono "S", in modo da dare, appunto, un tocco di rosso al blu più profondo. Non sono l'unico ad aver avanzato questa "spiegazione" del violetto spettrale oltre il blu: vedi ad esempio questa discussione su wikipedia, e in effetti si trovano in rete delle curve di sensibilità dei tre coni delle più varie (cfr. ad esempio quella della discussione citata prima; quest'altra, sempre da wikipedia, in cui c'è anche la sensibilità dei bastoncelli; questa, che invece di normalizzare sul picco, normalizza sull'area; quest'altra ancora, che sembrerebbe non-normalizzata; quest'altra ancora, anch'essa non-normalizzata e con in più addirittura una scala sull'asse delle ordinate, anche se manca l'unità di misura, e chissà se è lineare o logaritmica; questa, che in tutta la sua bruttezza mette bene in evidenza l'ipotetico sotto-picco del cono "L" nelle frequenze alte... e insomma, ce n'è per tutti i gusti). Però, dicevo, dalle foto "reali" dello spettro cromatico si potrebbe ben dedurre che di rosso non ce ne sia, su quel lato dell'arcobaleno.
 
Del resto io l'avevo ben imparato, ai tempi delle api e di compiz: il viola giace sul lato dritto del diagramma di cromaticità, quello a cui non corrisponde alcuna luce monocromatica: quei colori, cioè, che anche nella loro versione saturata (sulla linea, appunto, e non all'interno del diagramma), corrispondono necessariamente ad una sovrapposizione di frequenze blu e rosse.
Del resto io le avevo ben colte, ai tempi delle api e di compiz, le basi della visione dei colori: i tre tipi di coni — rosso, verde e blu — come tre dimensioni dello spazio di cromaticità, e ogni sfumatura di colore come un punto in quello spazio, individuato da(l logaritmo de)ll'intensità di eccitazione di ciascun tipo di coni. Perfetta corrispondenza con la rappresentazione cromatica nei monitor — dai vecchi tubi a raggi catodici, ai pannelli a cristalli liquidi, al plasma, o a LED — e di conseguenza nelle varie codifiche digitali, RGB per tutte.
Ecco, teoria tricromatica si chiama, e fu elaborata, leggo su wikipedia, nella prima metà del IX secolo da questi Thomas Young e Hermann von Helmholtz.
 
Se non fosse che ora, sempre su wikipedia, ho scoperto che si tratta solo della prima parte della storia, perché nella seconda metà di quello stesso secolo Ewald Hering elaborava la sua teoria dei colori complementari che, sebbene concepita come ipotesi alternativa alla teoria tricromatica, oggi trova fondamento nella moderna neurofisiologia. Questa infatti ha messo in luce processi di elaborazione dell'informazione visiva ulteriori rispetto al dato primario del livello di stimolazione dei tre tipi di coni, che si sono rivelati precisamente come i meccanismi biologici funzionali alla base della fenomenologia che Hering aveva individuato nella visione umana.
Volendo semplificare molto, l'elaborazione dell'informazione cromatica non si limita a considerare il livello di stimolazione dei diversi tipi di coni, ma anche le loro differenze: e del resto, a posteriori, chiamare i coni "M" e "L" rispettivamente "cono del verde" e "cono del rosso" è evidentemente una semplificazione eccessiva, visto che i loro picchi sono molto vicini fra di loro e in particolare il picco del cono "L" cade praticamente in quello che chiamiamo giallo, lasciando quello che chiamiamo rosso all'estremità dello spettro e della sua stessa coda di sensibilità.
Questa elaborazione del segnale di stimolazione dei coni in termini di differenza di intensità avviene già a livello della retina, dalle cellule bipolari alle cellule gangliari, le quali reagiscono da una parte alla differenza di stimolazione fra i coni "M" e "L" (la contrapposizione di Hering fra verde e rosso) e dall'altra alla differenza di stimolazione fra i coni "S" e una combinazione della stimolazione dei coni "M" e "L" (la contrapposizione di Hering fra blu e giallo).
Non starò a riassumere tutto quello che ho scoperto: un bel compendio lo si può trovare nel PDF delle slide del corso di Sistemi Intelligenti Naturali e Artificiali del LIRA-Lab, Laboratory for Integrated Advanced Robotics, dell'Università di Genova — wow!
Mi limiterò ad accennarvi al fatto che mi sono ritrovato a leggere di cose suggestive e immaginifiche come l'effetto Purkinje, di colori impossibili o proibiti e di colori immaginari, che no, non sono il grue e il bleen di Goodman, ma il not-brown reddish green o il not-green bluish yellow...

23 September 2008

La luce delle api e i colori di compiz-fusion/4

(puntate precedenti: uno, due e tre)
D'accordo, va bene, pretendere di sapere davvero cosa vede un'ape sarà un'impresa impossibile, ma è possibile almeno dare una risposta, anche solo approssimativa, ad una domanda più semplice, che poi era la vera domanda da cui tutto era partito: come si vede con una sensibilità ridotta alla luminosità? Dopo tutte queste letture, possiamo forse dire che basta ruotare la manopola della luminosità di GIMP, come avevamo pensato subito all'inizio?
   —   ∴   —   
Quel che abbiamo capito dell'ape è che non distingue bene, nella sua scena visiva, le gradazioni "fini" di luminosità. Davvero, evidentemente, una foglia verde brillante davanti e più scura dietro, per banali effetti di illumnazione, all'ape sembrerà in qualche modo tutta dello stesso colore. Se proviamo a prendere una foto e giocare di brightness con GIMP, però, non otteniamo questo effetto, vediamo solo l'immagine scurirsi o schiarirsi.
Non ci resta, dunque, che capire su quali caratteristiche dell'immagine agiscono le varie manopole dei filtri ed effetti di GIMP, in modo da trovare quello che meglio può aiutarci a capire cosa si prova ad avere una sensibilità ridotta alla luminosità.
Ancora grazie a google, arrivo qui e, con qualche dettaglio in più, qui. Il succo è che la manopola della luminosità non cambia il modo con cui vengono visualizzate le gradazioni di intensità, si limita semplicemente a traslarle, al massimo "tagliando" i toni più chiari o quelli più scuri che dovessero andare fuori scala. Quello di cui abbiamo bisogno è qualcosa che "livelli" le gradazioni di tono simili, accorpandole fra di loro. E questo, dalle spiegazioni negli ultimi due link, sembra proprio essere quello che fa la manopola del contrasto — mi è venuto il dubbio che un risultato migliore si sarebbe potuto ottenere giocando con la manopola del gamma (in GIMP corrisopnde a levels nel menu colors) che rappresenta una specie di manopola per il contrasto non-lineare; ma di fatto cambiare il gamma ha l'effetto di modificare i rapporti di forza fra le varie gradazioni di intensità senza davvero "livellarle" come invece succede modificando il contrasto; magari davvero, oltre ad un semplice livellamento, la vista delle api ha un diverso rapporto relativo fra le diverse intensità luminose, ma si tratta di finezze che non ho modo di approfondire in questo momento...
Insomma, per chiudere definitivamente questa faccenda — che poi Dario si spazientisce... :) — ecco qui in fondo come, credo, dovrebbe apparire l'immagine in cima, se avessimo una sensibilità ridotta alla luminosità (potete cliccare su entrambe, per vederle più in grande).
Ripeto ancora una volta che in questo esperimento non ho in alcun modo preso in considerazione l'aspetto cromatico, per cui l'immagine trasformata resta molto diversa dall'effettiva sensazione visiva di un'ape. Anche la risoluzione, nel caso di un'ape, è ridotta rispetto a quella umana: avrei potuto sgranare un po' l'immagine, per rendere l'idea, ma, di nuovo, avrei dovuto cercare il rapporto fra risoluzione e ampiezza del campo visivo in un'ape... e allora ci avrei messo una vita a concludere questo ciclo di post sulla vista delle api. Ma infine, a parte tutto questo, dal solo punto di vista della luminosità, la differenza delle due immagini dovrebbe almeno un po' rendere l'idea.

21 September 2008

La luce delle api e i colori di compiz-fusion/3

(puntate precedenti: uno e due)
Curiosa coincidenza, il riferimento alla trasformazione lineare RGB-HSV trasformazione lineare RGB-YPbPr che mi ha reso la vita più semplice si trova su un sito che ha nel nome e nel logo un'ape. Curiosa coincidenza perchè mi sono ritrovato a pastrucchiare con i colori a pochi giorni di distanza da quando, con quegli stessi colori, mi ero scontrato cercando di capire in che senso le api non sono sensibili alla luminosità. Mi ritrovo dunque di nuovo a girovagare cercando informazioni sul sitema visivo delle api, e questa volta sono piu' fortunato.
   —   ∴   —   
Trovo addirittura studi sulla visione delle api risalenti agli anni 30 o anche prima. In pratica si sfrutta il fatto che le api hanno un riflesso incodizionato a movimenti repentini nel proprio campo visuale e si predispone il seguente ingegnoso meccanismo. Si prepara un pattern visivo (ad esempio su un foglio) costituito da bande alternate di diversa intensità luminosa e si sottopone l'ape a tale stimolo. A un certo punto si muove il pattern visivo e si osserva la reazione dell'ape. Se l'ape è in grado di percepire la differenza fra le due intensità luminose delle bande, si accorgerà del movimento, altrimenti le sembrerà che nulla si muove. Ripetendo esperimenti con bande con diverse differenze di luminosità si riesce dunque a studiare la capacità delle api di distinguere diversi livelli di luminosità.
Il risultato di questo esperimento dovrebbe essere quindi, finalmente, la corretta interpretazione della frase "le api sono insensibili alla luminosità". E in effetti il risultato (cfr. il grafico a pagina 414 del primo studio che ho citato) è che le api riescono comunque a percepire variazioni di intensità luminosa, solo con una sensibilità molto minore della nostra. Come noi, quando la luce è scarsa, hanno una sensibilità minima; diversamente da noi, anche in condizioni di luminosità "diurna" riescono a percepire solo differenze di intensità relativa superiori al 25% (noi, per confronto, riusciamo a distinguere variazioni di mezzo punto percentuale, cfr la tabella a pagina 413).
Sfrugugliando ancora a fondo, mi imbatto addirittura in un articolo molto più recente (1998) e dal titolo molto promettente: Reconstructing the Visual Field of Compound Eyes. Sembra che il suo obiettivo sia proprio la risposta alla mia domanda: ricreare (con tecniche di ray-tracing) un'immagine il più rappresentativa possibile della percezione di un'ape (in order to reconstruct an image approximating that perceived by a bee)!!! L'articolo è estremamente interessante, solo che, innanzitutto, non riesco a trovare le immagini che, seguendo tutta la loro analisi, avrebbero riprodotto; e comunque sembra che la loro analisi si sia concentrata soprattutto sull'aspetto cromatico delle differenze uomo/ape, tant'è che concludono loro stessi così: In producing these initial images we have ignored many aspects of the bee's visual system. In particular we do not address the difficult problems of tone mapping and brightness adaptation, mainly because of the sparsity of data pertaining to these phenomena in the case of the bee. (Nel produrre queste prime immagini abbiamo trascurato molti aspetti del sistema visivo dell'ape. In particolare non abbiamo affrontato i difficili problemi di adattamento alla luminosità e di rimappatura dei toni, principalmente per la scarsità di dati su questi fenomeni nel caso delle api. [mia libera traduzione]).
Ad ogni modo, un messaggio emerge chiaro da tutte queste mie letture: pensare di poter ricostruire accuratamente la visione di un'ape è un'impresa ardua per i mille fattori in gioco, non molto diversamente dal pretendere di capire cosa si prova ad essere un pipistrello: non basta sapere che "non vede la luminosità" o che "vede quel colore". Le api, ad esempio, sono maggiormente sensibili all'ultravioletto, che domina la loro percezione visiva rispetto agli altri colori; inoltre i loro occhi sono fortemente sensibili al movimento, per cui non è facile intuire cosa possa vedere un'ape che si accorge di qualcosa solo perchè si muove anche se non ne distingue bene i contorni (ma questo in realtà succede anche a noi umani...); o ancora, le api sono sensibili anche alla polarizzazione della luce diffusa dal cielo: in particolare la sensibilità alla polarizzazione avviene grazie ai recettori sensibili all'ultravioletto, mentre i recettori sensibili alle frequenze più basse (verde) sono legati alle reazioni di movimento dell'animale per evitare predatori o per raggiungere un obiettivo; e ancora: negli esseri umani la vista rappresenta il senso predominante, mentre per molti altri animali, fra cui appunto le api, un ruolo molto più importante lo giocano gli odori; per quanto riguarda poi la sensibilità alla luminosità, bisognerebbe anche tener presente che, almeno per noi esseri umani, l'occhio ha la capacità di adattare in maniera locale la sensibilità dei singoli recettori sulla retina in base alla quantità di luce che li colpisce, cioè l'occhio umano può adattarsi con una sensibilità diversa da regione a regione nella retina nell'ambito di un'unica scena visiva: questo è il famoso effetto che viene perso nelle foto tradizionali e che si cerca di recuperare con le tecniche di High Dynamic Range Imaging (un approfondimento qui).

16 September 2008

La luce delle api e i colori di compiz-fusion/2

Finalmente convinco Edo (quello, per intenderci, che usava pekwm...) a provare compiz e in particolare il Tabbing windows. Ne rimane, non dico entusiasta, ma almeno soddisfatto e conviene con me che, se non tutte, alcune (molte, direi io) funzionalità di compiz non sono solo un fattore estetico ma rappresentano degli strumenti realmente utili. Un'altra di queste funzionalità che piacque ad Edo è Negative, che "negativizza" le finestre:

hronir: e per cosa lo usi?
Edo: per dire, skype
Edo: per wikipedia
Edo: il nero su bianco diventa bianco su nero
Edo: e per me e' molto meglio
Edo: t'ho mandato uno screenshot
hronir: figo :)
Edo: molto piu' riposante
hronir: anche secondo me
Edo: ach
Edo: non dovro' abituarmi a compiz
Edo: sul mio portatile non ce lo posso avere!
hronir: vedi che anche tu rischi l'assuefazione?
hronir: ci sono effetti grafici carini, ma molti sono proprio... UTILI!
Edo: considero utile:
Edo: 1) window tabbing
Edo: 2) neg
Edo: il resto sono stronzate...
ok, ok, censura.
Come potete immaginare dalla tonalità di questo blog, anch'io ho sempre pensato che, su schermo, testo bianco su fondo nero sia più riposante dell'opposto. E proprio nel gestire il blog, per adattare al suo sfondo nero immagini "normali" su sfondo bianco, mi era già capitato di giocare con l'inversione fotografica. Invertire un'immagine permette di scambiare il bianco col nero, ma ha l'effetto collaterale di invertire anche i colori: il rosso diventa azzurro (ciano), il verde diventa rosso (magenta), il blu diventa giallo e così via. Ma smanettando con GIMP ero riuscito a trovare una specie di compromesso in un'ulteriore trasformazione dell'immagine da applicare dopo l'inversione, e cioè una rotazione di 180 gradi del parametro di tonalità (hue), che corrisponde, appunto, ad'ulteriore inversione "puramente cromatica". Tanto per capirci, un'immagine originale come questa diviene così dopo una semplice inversione, e così se si applica ancora un'inversione di tonalità.

hronir: oltre al neg ci vorrebbe una rotazione di 180 gradi nell'hue
hronir: cosi' i colori rimangono simili all'originale
hronir: ma non credo esista questa feature :(
Edo: cosa fa?
hronir: prova a giocare con un'immagine (non una foto, meglio uno screeshot) con GIMP
hronir: e applica il negativo e poi uno shift di 180 gradi nell'hue
hronir: l'effetto e' quasi di aver scambiato il bianco col nero
hronir: lasciando i colori piu' o meno uguali
Edo: mah, no
Edo: il bianco mi rimane bianco
hronir: no, prima fai il negativo
hronir: e poi gira l'hue
Edo: aaaaaaa
hronir: l'hue non cambia bianco/nero
Edo: e' vero
Edo: non dovrebbe essere impossibile
hronir: eh, infatti, non dovrebbe essere complicato
hronir: bisognerebbe trovare un qualche sito per i feedback per compiz
Edo: sembrerebbe esserci un plugin che cambia i colori
hronir: come si chiama?
Edo: si chiama color filter
Ora, color filter sembrerebbe proprio quel che fa per noi, solo che non ha, fra i filtri disponibili quello per le rotazioni dell'hue. Leggo che si possono aggiungere filtri personalizzati, ma bisognerebbe mettersi a imparare l'OpenGL fragment program, una specie di assembler per schede grafiche. La prima idea, ovviamente, è quella di cercare qualcuno che abbia già scritto un simile filtro, ma google sembra non portare ad alcun risultato. Mi toccava davvero imparare l'ARBfb1.0? Ora, imparare è una parola grossa: sarebbe bastato trovare un filtro qualsiasi e provare a modificarlo. I filtri disponibili con compiz si trovano in /usr/share/compiz/filters/ e dando un'occhiata a filtri come swap-green-blue o green-gray sembra che tutto stia nel giocare con i "campi" rgb della texture, scambiandoli o invertendoli.
Purtroppo, però, non esiste alcuna semplice operazione di shuffle delle componenti RGB che corrisponda ad un'inversione dell'hue e anzi la relazione fra RGB e HS* è espressa con un sacco di condizionali... E questa era una brutta notizia, perchè la mia idea era semplice: trasformare le componenti red-green-blue del colore in componenti hue-saturation-value, invertire la componente hue (o ruotarla di 180 gradi) e riconvertire in red-green-blue. Ma per implementare in assembler quelle formule piene di casistiche non mi sarebbe bastato usare qualche semplice operazione matematica. Testardo, provo a scrivere un codice lunghissimo, implementando i salti in maniera "acrobatica" usando le istruzioni SLT, KIL e CMP... ma ovviamente appena provo ad aggiungerla ai filtri attivi di compiz mi crasha non X ma tutto il computer!
Tutto sembrava perduto quando, serendipicamente, trovo La Soluzione Semplice. Nonostante ovunque, su internet, le trasformazioni ufficiali RGB-HSV sono quelle riportate da wikipedia, e nonostante ovunque, su internet, i mille e mille piccoli codici di esempio nei linguaggi più disparati traducono quelle trasformazioni in maniera pedissequa, con i corrispondenti costrutti if-case che tanto mi hanno fatto impazzire con ARBfp1.0, la realtà è che... esistono trasformazioni lineari fra RGB e HSV!!!
A quel punto tutto è in discesa, e infatti in una manciata di minuti metto insieme non più di una dozzina di linee... et voilà, il gioco è fatto.

11 September 2008

La luce delle api e i colori di compiz-fusion/1

Questo post nasce per la prima volta nella seconda metà di agosto, dopo la lettura di un affascinante (come al solito) post di Dario Bressanini intitolato Omaggio floreale a Darwin. Nei commenti si scatena un'interminabile (e quasi insopportabile) discussione su Darwin e sull'evoluzione, ma a me la cosa che ha colpito di più è un’altra: l’insensibilità delle api alla luminosità. Ma com'è possibile essere insensibili alla luminosità?
   —   ∴   —   
Va bene non distinguere uno o più colori, ma cosa può mai significare non "vedere" la luminosità? un prato verde non sarebbe un “mare di fili” verdi, ma sarebbe un piatto schermo tutto verde e basta? Un oggetto di uno stesso colore sarebbe privo di quella profondità che noi siamo soliti dedurre dalle ombre?
La cosa è bizzarra soprattutto perchè è più complicata di come l'ho descritta qui. Quando vediamo un'oggetto colorato, il gioco di ombre e di luci dovuto a un'illuminazione non uniforme non cambia solo la luminosità dell'oggetto, ma anche la sua composizione cromatica. Vediamo i fili d'erba in un prato perchè le ombre non solo riducono la luminosità ma cambiano anche la composizione in termini di colori fondamentali. Verde chiaro e verde scuro possono significare stessa lunghezza d'onda con diversa intensità, ma anche diverse percentuali di rosso, blu... Del resto lo sappiamo benissimo: la percezione dei colori non è semplice questione di frequenza della luce, è una cosa mooolto più complicata e sottile.
Ma allora, come vedono davvero le api senza sensibilità alla luminosità? La risposta mi sembrava piuttosto a portata di mano: Bressanini stesso citava la notazione "più umana" HSB (hue-saturation-brightness, tonalità-saturazione-luminosità), in contrapposizione a quella più "televisiva" RGB (red-green-blue, rosso-verde-blu): mi bastava prendere GIMP, pescare una qualsiasi foto di fiori in un prato e giocare con la manopola della luminosità.
Beata ingenuità.
Innanzitutto scopro che non esiste una sola codifica hue-saturation-*, ma ce ne sono almeno due: HSB (o HSL, o HSI) per brightness (o level, o intensity) e HSV per value. E i risultati possono essere anche molto diversi a seconda se si scelga l'una o l'altra.
Nulla è più pratico di una buona teoria: qui bisognava capire. Ed inizia, quindi, un dolce naufragare per due mari: da una parte quello del modello dei colori (fra cui appunto l'RGB, l'HSL/HSV, ma anche il CMYK e moooolti altri), tentativo di catturare nella maniera più semplice possibile la complessità della visione dell'occhio umano; dall'altra quello della visione delle api e dei loro occhi composti, per cercare di capire in che senso non sono sensibili alla luminosità.
Scopro così cose interessantissime come il significato e l'interpretazione del diagramma qui a lato (la corrispondenza fra frequenza e colore in termini di sezione 2D di una rappresentazione 3D, tre dimensioni perchè sono tre i tipi di coni, i recettori cromatici... anche se in realtà bisognerebbe tener conto anche dei bastoncelli... diavolo quant'è complicata la visione!), o come il fatto che non esiste la "frequenza del violetto" (il lato "dritto" del triangolo curvilineo qui di fianco), o come il fatto che questo stesso diagramma non potrebbe essere davvero rappresentato su un monitor, in maniera completa, per via del gamut... e un sacco di altre cose interessanti come questa o quest'altra... degne, se non di Diamond, almeno di Sacks).
Purtroppo, riguardo invece la visione delle api, wikipedia e siti internet sembravano un po' una pozzangera, non c'era molto da naufragare: si trovava conferma del fatto che le api non vedono il rosso (e vedono invece l'ultravioletto), ma della questione luminosità sembravano esserci solo vaghi indizi.
Gli impegni della vita reale — non solo il lavoro... :( — prevalsero e il mio sogno di "vedere come un'ape" prese a impolverarsi. Sarebbe stato solo per poco, ma io non lo sapevo e una rassegnazione mista all'oblio si andava accumulando giorno dopo giorno.