Fysik Java Lists
Tillbaka till FyA| FyB
Våglängd till RGB-färg omvandlare   till applet
Hämtad ifrån: Uppsala Univ. Datorlabbet

Nedan finns ett Java-program som visar vilken färg som motsvarar ljus med en viss våglängd. Det är viktigt att komma ihåg att egentligen har ljuset självt ingen färg utan färgen skapas i ögat och i hjärnan. Färg är alltså inget absolut begrepp utan upplevelsen av färg varierar från människa till människa. I ögat finns det tre typer av sensorer för ljus, de så kallad tapparna, vilka har olika känslighet för ljusets våglängd. Dessutom finns det en fjärde typ av sensorer, de så kallade stavarna, som är viktiga för mörkerseendet men som inte spelar någon roll för färgseendet.

Då ögat har tre olika sensorer för färgseende så räcker det med tre grundfärger för att kunna blanda och återge alla färger vi kan se. Programmet visar därför också hur mycket av tre grundfärgerna rött, grönt och blått som en viss våglängd motsvarar. Slutligen så är det möjligt att själv blanda de tre grundfärgerna och se resultatet. Notera även att alla färger, som till exempel brunt, inte finns med i spektrat. Det beror på att de är blandningar av olika våglängder.

Man skulle kunna tro att en färgmonitor som en datorskärm eller TV kan återge alla färger men så är inte fallet. Det finns flera olika sorters färgsystem och vart och ett har sina begränsningar. Nedan finns en kortfattad beskrivning av hur man kan omvandla en viss våglängd till en blandning av rött, grönt och blått (RGB) vilket är det färgsystem som datorskärmar använder.

Commission Internationale de L'Éclairage (CIE) har fastlagt en standard för hur en normal observatör uppfattar ljus av en viss våglängd. Deras system består av tre olika komponenter, kallade X, Y och Z. Nedan finns en figur som visar hus mycket av de olika komponenterna som en viss våglängd motsvarar enligt CIEXYZ 1964 [CIE (1964) 10-deg color matching functions, http://cvision.ucsd.edu/database/text/cmfs/cxyz64.htm ].

xyz

De tre komponenterna XYZ kan omvandlas till RGB systemet med hjälp av följande linjära transformation.

R = 3.240479*X - 1.537150*Y - 0.4986535*Z
G = - 0.969256*X + 1.875992*Y + 0.041556*Z
B = 0.055648*X - 0.204043*Y + 1.057311*Z

Vilket ger följande kurvor. Notera att medan CIEXYZ systemet bara har positiva värden så motsvaras vissa våglängder av negativa RGB värden.

rgb

Det finns flera olika RGB system och transformationen ovan ger det så kallade RGB 709 systemet. Det som återstår nu är att omvandla dessa linjära RGB värden så att de återges korrekt på skärmen. Problemet är att skärmens färgåtergivning inte är linjär. En fördubbling av signalens styrka ger en ljusintensitet som är ca fem gånger så hög. För att kompensera för detta görs en så kallad gamma korrektion på följande sätt [A Standard Default Color Space for the Internet - sRGB, http://www.w3.org/Graphics/Color/sRGB.html ]

Om R,G,B < 0.00304 då

Rs = R*12.92
Gs = G*12.92
Bs = B*12.92
annars
Rs = 1.055*R(1.0/2.4) - 0.055
Gs = 1.055*G(1.0/2.4) - 0.055
Bs = 1.055*B(1.0/2.4) - 0.055

Eftersom komponenterna i RGB systemet har ett värde mellan noll och ett måste slutligen alla värden mindre än noll sättas till noll och alla värden större än ett till ett. Resultatet blir då följande.

rgb begränsad

Vilket lätt konverteras till 8-bitars digital representation genom att multiplicera med 255 och sedan ta heltalsdelen av resultatet.

Vill du veta mer om färg och färgåtergivning? Här finns det några värdefulla länkar sammanställda av Charles Poynton.

botten linje
Vetenskapsambassaden | Senast ändrad 18/05-1998 | URL http://amb1.fysik.uu.se/Datorlab/color/index.html | Webmaster@amb1.fysik.uu.se