Artikel

Simulera färgblindhet

Om färgseende

Vi skall kortfattat förklara mekanismen bakom färgseende. Oavsett om det är en kamera eller ett mänskligt öga så handlar färgseende om en apparats förmåga att lyckas särskiljer olika våglängder i det elektromagnetiska spektrum som den stimuleras med. Färgseendet hos en människa möjliggörs av tre komponenter där ljuset stimulerar en mottagare, ögat, som skickar signaler om stimulit, via synnerven, vidare in i hjärnan. Gränssnittet mellan yttre ljusstimuli och det neuronala systemet utgörs av ögats näthinna (lat. retina). I hjärnans nacklob omvandlas signalerna till en medveten bild.


Ljuset väg till hjärnan. Bild från 1177.se.

Näthinnan

Om ögat vore en kamera kan näthinnan sägas vara filmen varpå bilden fastnar. Det är näthinnan som innehåller de celler som omvandlar det infallande ljuset till nervsignaler. Här finns ljuskänsliga celler, tappar och stavar, även kallade fotoreceptorer, som trots väldigt liknande uppbyggnad har olika funktion. 

Båda två har ett ljuskänsligt pigment, synpurpur, som kallas rodopsin i stavarna och iodopsin i tapparna. Båda dessa är uppbyggda av en proteindel och en retinal-del. Retinal är en vitamin A-aldehyd som, för att kunna bildas, kräver att vitamin A tillförs genom födan. Brist på vitamin A kan orsaka nattblindhet. Proteindelen i stavarna heter opsin och fotopsin i tapparna.

Väldigt förenklat så bryts retinal-delen ned under ljusets påverkan, släpper sin koppling till proteinet och ger upphov till en nervimpuls.

För att maximera ljusabsorptionen är näthinnan slät och är fodrad med svart pigment som kallas melanin. Jämför återigen med en kamera där insidan är svart för att minska mängden reflekterande ljus.

Några begrepp i näthinnan är viktiga att känna till. Blinda fläcken den punkt där synnerven går in. Gula fläcken (macula lutea) är området med bäst synskärpa. I denna finns centralgropen (fovea centralis), som är en liten grop klädd enbart med tappar.


Bild från 1177.se.

Stavarna bidrar till mörkerseende

Stavarna har god ljuskänslighet men låg synskärpa. Genom stavarna ges förmågan till mörkerseende men låg synskärpa innebär en svårighet att skilja på detaljer.

Tapparna bidrar till färgseende

Tapparna ger god synskärpa och förmåga att särskilja färger under förutsättning att det är goda ljusförhållanden. Genom att iodopsin förekommer i olika varianter skickas olika nervimpulser beroende på vilken våglängd som finns i det infallande ljuset.

Rent retinal reagerar endast för ultraviolett ljus, men i kombination med dessa kopplade protein ändras våglängdskänsligheten. Skillnader i uppbyggnaden av aminosyrer resulterar i olika varianter av iodopsinet hos människan enligt tabellen nedan. I figuren är även rodopsin är åskådliggjord (R) som jämförelse.

Tapp-typ
Omfång
Maximum

Små/korta våglängder (S) - "tritan", "cyanlabe"
400-500 nm
420-440 nm

Mellanlånga våglängder (M) - "deutan", "chlorolabe"
450–630 nm
534-545 nm

Långa våglängder (L) - "protan", "erythrolabe"
500–700 nm
564-580 nm


Diagram över olika tappars absoption.

Om färgblindhet

De receptorer som nämndes tidigare, S, M och L, kallas ibland receptorer för violett, grönt och rött ljus. För en person med fungerande färgseende stämmer denna jämförelse. Alla uppfattar dock inte färger på samma sätt. Färgblinda förväxlar färger som är urskiljbara för personer med normal färgseende. Det är därför bättre att hålla sig till de vetenskapliga termerna.

Färgblindhet är ärftligt och drabbar i huvudsak män. Det är nästan alltid medfött och ca sju procent av den manliga befolkningen och mindre än en procent av den kvinnliga befolkningen är drabbad [http://www.medocular.se/ogonfakta/tester/fargblindhet/]. De värt drabbade lider av dikromasi (di=två, chroma=färg). 

Ett dikromatiskt färgseende finns i två typer, protanop och deuteranop. I det protanopa fallet har L-receptorn (röd) samma känslighetsområde M-receptorn (grön) vilket innebär att färgen upplevs som gul. När det gäller deuteranopi har M-receptorn (grön) samma känslighetsområde som L-receptorn (röd). Liksom i protanopi ger rött och grönt genom additiv färgblandning gult. 

Skillnaden mellan de två består framför allt i, att protanopen faktiskt är rödblind, vilket inte deuteranopen är, även om rött uppfattas som en normalseende. Båda varianterna upplever vit sensation när båda receptorslagen aktiveras i lika mån.

Simulera färgblindhet

Färgval bör göras så att färgerna är urskiljbara även för personer med avvikande färgseende. Det kan gälla design av webbsidor, presentationer eller annat material. Viénot et. al. presenterar en metod som gör det möjligt att simulerade hur en färgbild uppfattas med ett dikromatiskt färgseende. Vi går kortfattat igenom de olika steg som Viénot et. al. i sin artikel. Om du vill ha mer information hänvisas du till artikeln med rubriken "Digital Video Colourmaps for Checking the Legibility of Displays by Dichromats".

Algoritmen

Metoden baseras på färgrymden LMS, i motsats till exempelvis RGB. I RGB uttrycks en färg i termer av rött (R), grönt (G) och blått (B). LMS är istället en färgrymd som representeras av gensvaret från de tre typerna av tappar i det mänskliga ögat och uppkallad efter deras svarsbenägenhet (känslighet) vid långa (L), medellånga (M) och korta (S) våglängder. Det är vanligt att använda LMS för att studera färgblindhet eftersom färgblinda blandar ihop färger som skiljer sig endast i svarsbenägenhet från den "saknade" tappen.

Då börjar vi.

  • Givet (R.G,B) i originalbilden beräknas realtiva fotometriska kvaniteter (r,g,b) via

\begin{equation} \begin{matrix} r=(R/255)^{2,2} & g=(G/255)^{2,2} & b=(B/255)^{2,2} \end{matrix} \end{equation}

  • För att producera reducerade färger som ingår i färgomfånget på skärmen minskar vi färgdomänen något i den ursprungliga paletten genom skalning av de relativa fotometriska kvantiteterna.

\begin{equation} \begin{matrix} \textbf{protanop} & \textbf{deuteranop} \\ r_{1}=0,992052r0.003974 & r_{1}=0,957237r0.0213814 \\ g_{1}=0,992052g0.003974 & g_{1}=0,957237g0.0213814 \\ b_{1}=0,992052b0.003974 & b_{1}=0,957237b0.0213814 \end{matrix} \end{equation}

  • Transformera RGB-representationen till LMS-representation med matrisen M.

\begin{equation} M=\begin{pmatrix} 17.8824 & 43.5161 & 4.11935 \\ 3.45565 & 27.1554 & 3.86714 \\ 0.0299566 & 0.184309 & 1.46709 \end{pmatrix} \end{equation}

  • Reducera färgdomänen till en dikromats domän. I LMS-representation är det möjligt att härleda projektionsmatrisen från normalt färgseende till en dikromats färgseende. Härledningen framgår av artikeln som Viénot et. al. har publicerats men återges direkt nedan.

\begin{equation} P=\begin{pmatrix} 0 & 2,02344 & -2,52581 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}, D=\begin{pmatrix} 1 & 0 & 0 \\ 0,494207 & 0 & 1,24827 \\ 0 & 0 & 1 \end{pmatrix} \end{equation}

  • Transformera tillbaka till RBG-rymd enligt nedan.

\begin{equation} \begin{pmatrix} r_{p} \\ g_{p} \\ b_{p} \end{pmatrix}=M^{-1}PM\begin{pmatrix} r_{1} \\ g_{1} \\ b_{1} \end{pmatrix}, \begin{pmatrix} r_{d} \\ g_{d} \\ b_{d} \end{pmatrix}=M^{-1}DM\begin{pmatrix} r_{1} \\ g_{1} \\ b_{1} \end{pmatrix} \end{equation}

  • Avslutningsvis, intervera första steget enligt nedan.

\begin{equation} R_{p} = 255(r^{1/2,2}_p), G_{p} = 255(g^{1/2,2}_p), B_{p} = 255(b^{1/2,2}_p) \end{equation}

\begin{equation} R_{d} = 255(r^{1/2,2}_d), G_{d} = 255(g^{1/2,2}_d), B_{d} = 255(b^{1/2,2}_d) \end{equation}

Realisera algoritmen i Matlab

Skapa en m-fil och döp den till Bild_som_dikromat.m.

function [pim, dim] = Bild_som_dikromat(bi)
% hämta RGB-data
R = bi(:,:,1);
G = bi(:,:,2);
B = bi(:,:,3);

% transformera originalet
r = (R/255).^(2.2);
g = (G/255).^(2.2);
b = (B/255).^(2.2);

% transformera för protanop
Rp = 0.992052 * r + 0.003974;
Gp = 0.992052 * g + 0.003974;
Bp = 0.992052 * b + 0.003974;
% sätt ihop till en matris
Mp = [Rp(:)';Gp(:)';Bp(:)'];

% transformera för deuteranop
Rd = 0.957237 * r + 0.0213814;
Gd = 0.957237 * g + 0.0213814;
Bd = 0.957237 * b + 0.0213814;
% sätt ihop till en matris
Md = [Rd(:)';Gd(:)';Bd(:)'];

% Avbildningsmatris för LMS
M = [17.8824, 43.5261, 4.11935; 3.45565, 27.1554, 3.86714;...
    0.0299566, 0.184309, 1.46709];

% projektionsmatris för protanop
Pp = [0, 2.02344, -2.52581; 0, 1, 0; 0, 0, 1];
% projektionsmatris för deuteranop
Dp = [1, 0, 0; 0.494207, 0, 1.24827; 0, 0, 1];

% utför avbildningar
P = inv(M) * Pp * M * Mp;
D = inv(M) * Dp * M * Md;

% säkerställ att det inte finns några negativa intensiteter
P(P(:) < 0) = 0;
D(D(:) < 0) = 0;

% invertera första steget
P = 255 .* (P.^(1/2.2));
D = 255 .* (D.^(1/2.2));

% omvandla vektorer till 2d-matriser
R_pim = reshape(P(1,:), size(R,1),size(R,2));
G_pim = reshape(P(2,:), size(G,1),size(G,2));
B_pim = reshape(P(3,:), size(B,1),size(B,2));

R_dim = reshape(D(1,:), size(R,1),size(R,2));
G_dim = reshape(D(2,:), size(G,1),size(G,2));
B_dim = reshape(D(3,:), size(B,1),size(B,2));

pim = cat(3, R_pim, G_pim, B_pim);
dim = cat(3, R_dim, G_dim, B_dim);
end

Skapa ytterligare en fil och kalla den exempelvis simulera.m. Lägg in nedanstående rader.

% Katalog där bilderna förvaras
addpath('Bilder')

% Läs in en bild
bi = double(imread('aatta.jpg'));
% Skapa en bild som om en dikromat ser den
[pbi, dbi] = Bild_som_dikromat(bi);

% Visa resultatet
%montage({bi/256, pbi/256, dbi/256}, 'Size', [1,3])

figure
imshow(bi/256)
title('Original')
figure
imshow(pbi/256)
title('Protanop')
figure
imshow(dbi/256)
title('Deuteranop')

% Skriv ner resultatet till vanliga bilder
imwrite(pbi/256, 'Sim_bilder/paatta.png', 'png');
imwrite(dbi/256, 'Sim_bilder/datta.png', 'png');

Utvärdera resultatet

Testa nu din simulering med några olika bilder. Nedan är några exempel återgivna på hur det borde se ut. Original till vänster, protanop i mitten och deuteranop till höger.

Original till vänster, protanop i mitten och deuteranop till höger.
Original till vänster, protanop i mitten och deuteranop till höger.

Original till vänster, protanop i mitten och deuteranop till höger.
Original till vänster, protanop i mitten och deuteranop till höger.

Original till vänster, protanop i mitten och deuteranop till höger.
Original till vänster, protanop i mitten och deuteranop till höger.

Original till vänster, protanop i mitten och deuteranop till höger.
Original till vänster, protanop i mitten och deuteranop till höger.

Original till vänster, protanop i mitten och deuteranop till höger.
Original till vänster, protanop i mitten och deuteranop till höger.

Original till vänster, protanop i mitten och deuteranop till höger.
Original till vänster, protanop i mitten och deuteranop till höger.

Original till vänster, protanop i mitten och deuteranop till höger.
Original till vänster, protanop i mitten och deuteranop till höger.

Varför PROSAPIO?

PROSAPIO vill bidra till att unga människor intresserar sig för ingenjörsvetenskap genom att tillgängliggöra kunskap inom intelligenta och autonoma system.

Läs mer om PROSAPIO

Genvägar