8.2.1 - Farveblindhed

I denne øvelse skal I lave en funktion til at erstatte grønne farver med blå, som et hjælpemiddel til farveblinde. Øvelsen splittes op i to; først laves en funktion til at indlæse et farvebillede og splitte det op i dets røde, grønne og blå komponenter. Man kunne få den ide, at den grønne kanal i sig selv ville angive om farven var grøn, men fx gul dannes ved at kombinere den røde og grønne kanal, så en værdi i den grønne kanal betyder ikke i sig selv, at området er grønt. Ligeledes er hvid defineret som lige dele rød, grøn og blå. 

Derfor indføres en sammenligning af den grønne kanal med den røde og den blå, og kun hvis den grønne overstiger de øvrige med en brugerdefineret tærskelværdi, farves området blåt.

Funktion til indlæsning og opsplitning af farvebillede:

  • Download de billeder, som skal behandles her. Udpak dem til et særskilt bibliotek kaldet Farveblindhed.
  • Den første funktion skal hedde imrgb, den skal modtage to input argumenter; filnavn og visbillede og sende fire outputvariable videre; im, chRed, chGreen og chBlue. Lav en funktions-header, som opfylder dette
  • Husk at inkludere hjælp til funktionen lige under funktions definitionen
  • Brug funktionen imread til at indlæse billedet og gem det i im variablen.
  • Sæt dernæst farvekanalerne til hhv. rød, grøn og blå
    • Husk at farvebilleder er gemt i Matlab som en 3D matrix bestående af
      højde x bredde x farver
  • Hvis antallet af input argumenter er over 1 og visbillede er 1, skal såvel billedet, som de enkelte farvekanaler plottes
    • Brug kommandoen figure(1) til at lave et figurvindue
      • Ved at kalde figure med 1, kommer alle outputs til at blive vist i denne figure. Senere bruges figure(2) til det andet output, hvorfor du med denne kommando kan adskille outputtet i de to funktioner.
    • Brug subplot til at danne 2 x 2 output, med im øverst tv og derpå chRed, chGreen og chBlue
      • Brug imshow funktionen til at plotte billederne i de enkelte subplots
    • Sæt titlerne på de enkelte subplots til filnavnet for billedet, og kanalnavnet for de øvrige
  • Gem funktionen i Farveblindhed biblioteket. Husk at filnavnet skal være det samme som funktionsnavnet: imrgb.m
  • Test funktionen fra Command Window ved at kalde den med:
    • [pic R G B] = imrgb('trafficlight.jpg',1);
      • Dette sætter funktionen til at indlæse 'trafficlight.jpg', at vise de enkelte farvekanaler samt det indlæste billede, og gemme det hele i variablerne pic, R, G og B
      • Husk, at det er ligegyldigt, hvad du har kaldt de enkelte variabler i funktionen - når den bruges må den kaldes med brugerbestemte in- og output navne.
      • Læg mærke til, at det midterste, gule lys har værdier i såvel den røde som den grønne kanal

Funktion til at erstatte grøn med blå

  • Denne funktion skal hedde markGreen, skal modtage et filnavn og et threshold og sende et output billede kaldet gm retur.
  • Hvis antallet af input argumenter kun er et, skal threshold sættes til 0.1, ellers skal det sættes til det, som brugeren har angivet divideret med 100, da brugeren skal sætte threshold som %
    • Angiv dette i hjælpen under funktionen
  • Indlæs filnavnet med imrgb funktionen fra før og gem billedet og farvekanalerne i variablerne im, R, G og B. imrgb skal kaldes uden at plotte billede + farvekanaler
  • Brug find funktionen til at finde index på de værdier i den grønne kanal, som overstiger den røde kanal + threshold * max(max(R))
    • max(max(R)) angiver max værdien - hvis der kun bruge max(R ) vil der komme en max-værdi pr. kolonne
  • På tilsvarende vis, skal den grønne kanal også overstige den maximale Blå værdi * threshold:
    • idx=find(G>(R+max(max(R))*threshold) & G>(B+max(max(B))*threshold));
  • Sæt den blå kanal (B) til værdien 255 (den teoretiske max-værdi) ved idx værdierne, udregnet ovenfor.
  • Sæt alle rækker og kolonner i gm outputtets første farvekanal til R:
    • gm(:,:,1) = R;
  • På tilsvarende vis sættes G og B kanalerne.
  • Lav en ny figur med kommandoen figure(2)
    • Ved at kalde kommandoen med input argumentet 2, vil alle output fra markGreen blive vist i samme figur vindue, så du ikke får et nyt, hver gang du vil undersøge et billede
  • Lav to subplots, med to kolonner og 1 række.
  • Vis det originale billede til venstre, og det blå-farvede til højre
  • Sæt titlen til hhv 'Originalt billede' og 'Grønt erstattet med blåt'
  • Gem funktionen i Farveblindhed biblioteket.
  • Kør funktionen på de inkluderede billeder hver især, ved at kalde den fra Command Window med:
    • markGreen('trafficlight.jpg',5) for fx at bruge 5% threshold
      • Eksperimenter med threshold for at ramme det rigtige niveau, så kun den grønne farve bliver erstattet.
    • Kør nu funktionen på de resterende billeder med varierende thresholds
Created by Samuel Thrysøe © 2012