...

Institutionen för systemteknik Mätning av färgutveckling med mobilapplikation som indikator på stressnivå Department of Electrical Engineering

by user

on
Category: Documents
1

views

Report

Comments

Transcript

Institutionen för systemteknik Mätning av färgutveckling med mobilapplikation som indikator på stressnivå Department of Electrical Engineering
Institutionen för systemteknik
Department of Electrical Engineering
Examensarbete
Mätning av färgutveckling med mobilapplikation som
indikator på stressnivå
Examensarbete utfört i Informationskodning
av Carl-Filip Strid
LiTH-ISY-EX-ET--15/0431--SE
Linköping 2015
Department of Electrical Engineering
Linköping University
S-581 83 Linköping, Sweden
Linköpings tekniska högskola
Institutionen för systemteknik
581 83 Linköping
Mätning av färgutveckling med mobilapplikation som
indikator på stressnivå
Examensarbete utfört i Informationskodning vid Linköpings tekniska
högskola av
Carl­Filip Strid
LiTH-ISY-EX-ET--15/0431--SE
Handledare: Jens Ogniewski
Examinator: Robert Forchheimer
Linköping 2015-05-27
Presentationsdatum
2015-05-13
Publiceringsdatum (elektronisk version)
Institution och avdelning
Institutionen för systemteknik,
Informationskodning
Department of Electrical Engineering,
Information Coding
Språk
Typ av publikation
ISBN (licentiatavhandling)
X Svenska
Annat (ange nedan)
Licentiatavhandling
X Examensarbete
C-uppsats
D-uppsats
Rapport
Annat (ange nedan)
ISRN LiTH-ISY-EX-ET--15/0431--SE
Antal sidor
28
Serietitel (licentiatavhandling)
Serienummer/ISSN (licentiatavhandling)
URL för elektronisk version
http://www.ep.liu.se
Publikationens titel
Mätning av färgutveckling med mobilapplikation som indikator på stressnivå
Författare
Carl-Filip Strid
Sammanfattning
I saliv förekommer ett enzym, kallat alfa-amylas, som kan ge en fingervisning om en persons upplevda stressnivå.
Förekomsten av alfa-amylas kan testas genom att låta droppa ett salivprov på ett särskilt slags filterpapper, som sedan färgas
klarblått. Hastigheten på färgningen har visats kunna stå i förhållande till aktiviteten av alfa-amylas, och har tidigare mätts
med fotodiod. Det här arbetet har undersökt den tekniska görbarheten i att använda en mobilbaserad lösning istället, detta för
att öka tillgängligheten av att kunna utföra dessa mätningar. I arbetet har en lämplig mätmetod först sökts genom att
analysera en datamängd med bildsekvenser tagna med mobilkamera. Mätmetoden har sedan implementerats i en
mobilapplikation för Android. Lämpliga mått på färgavstånd och lämpligt mätområde har undersökts, samt hur yttre faktorer
som ljusförhållanden och förflyttning av kameran kan påverka mätningar och hur dessa effekter kan motverkas. Resultatet av
arbetet har visat att en mobilapplikation mycket väl kan användas för att göra mätningar av en färgutveckling med
konsekventa resultat, men att precisionen behöver utredas med kopplingen till alfa-amylas i åtanke. Avslutningsvis
diskuteras implementationens brister, och konkreta förslag på vidareutvecklingar tas upp.
Nyckelord
alfa-amylas, saliv, stress, mobilapplikation, mobilbaserad, färg, mätning
Sammanfattning
I saliv förekommer ett enzym, kallat alfa-amylas, som kan ge en fingervisning om en persons upplevda
stressnivå. Förekomsten av alfa-amylas kan testas genom att låta droppa ett salivprov på ett särskilt slags
filterpapper, som sedan färgas klarblått. Hastigheten på färgningen har visats kunna stå i förhållande
till aktiviteten av alfa-amylas, och har tidigare mätts med fotodiod. Det här arbetet har undersökt den
tekniska görbarheten i att använda en mobilbaserad lösning istället, detta för att öka tillgängligheten av
att kunna utföra dessa mätningar. I arbetet har en lämplig mätmetod först sökts genom att analysera
en datamängd med bildsekvenser tagna med mobilkamera. Mätmetoden har sedan implementerats i en
mobilapplikation för Android. Lämpliga mått på färgavstånd och lämpligt mätområde har undersökts,
samt hur yttre faktorer som ljusförhållanden och förflyttning av kameran kan påverka mätningar och
hur dess effekter kan motverkas. Resultatet av arbetet har visat att en mobilapplikation mycket väl kan
användas för att göra mätningar av en färgutveckling med konsekventa resultat, men att precisionen
behöver utredas med kopplingen till alfa-amylas i åtanke. Avslutningsvis diskuteras implementationens
brister, och konkreta förslag på vidareutvecklingar tas upp.
Abstract
A salivary enzyme called alpha-amylase could be used as a marker for a person’s subjective stress level.
The existence of alpha-amylase can be tested by adding a saliva sample to a filter paper, which is then
coloured blue. The rate of the colouration has been shown to correlate with the alpha-amylase activity,
and has previously been measured using a photodiode. In this thesis work, the possibility of using a
mobile phone to allow easy-access testing has been evaluated. To find a suitable method of measuring
the colouration, a data set of image sequences taken with a mobile phone was analyzed. The resulting
method has then been implemented in the form of a mobile app for Android. Colour distances and suitable
regions-of-interest have been evaluated, as well as how the impact of varying lighting conditions and the
instability of the camera can be reduced. Results have shown that a mobile app may indeed be used to
measure the colouration with consistent results, but that the precision needs to be further evaluated with
respect to alpha-amylas. In closing, flaws and suitable improvements of the implementation is discussed.
Innehåll
1 Inledning
1
1.1
Motivering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.3
Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.4
Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2 Teoretisk bakgrund
2
2.1
Introduktion
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.2
Människans färgseende . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.3
Olika representation av färg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.3.1
RGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.3.2
CIELAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.3.3
HSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
Normalisering av ljus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.4
3 Metod
6
3.1
Metod för arbetet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.2
Utförande av mätningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.3
Verktyg och grafer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
4 Utveckling och implementation
4.1
4.2
8
Observerade yttre faktorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
4.1.1
Påverkan från ljus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
4.1.2
Förflyttning av kameran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
Val av mått på färgutveckling och mätområde . . . . . . . . . . . . . . . . . . . . . . . . .
9
4.2.1
Mått på färgutveckling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
4.2.2
Val av lämpligt mätområde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.3
Normalisering av ljus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.4
Lokalisering av mätområde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.5
Val av jämförelsevärde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.6
Implementation av mobilapplikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.6.1
Tillvägagångssätt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.6.2
Sekvenstagning av bilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6
4.6.3
Implementation av mätalgoritm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.6.4
Gränssnitt och visualisering av resultat . . . . . . . . . . . . . . . . . . . . . . . . 21
5 Resultat
21
5.1
5.2
Mätmetod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.1.1
Mått på avstånd i färg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.1.2
Ljusförhållanden och normalisering . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.1.3
Förflyttning av kameran och lokalisering . . . . . . . . . . . . . . . . . . . . . . . . 22
5.1.4
Jämförelsevärde
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Mobilapplikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6 Diskussion
24
6.1
Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.2
Resultat och vidareutveckling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.3
Slutsats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
7
1
Inledning
1.1
Motivering
Motiveringen till det här projektet grundas i att aktiviteten av alfa-amylas, ett enzym som förekommer i
saliv och som bryter ner stärkelse, har visats kunna ge en fingervisning om en persons upplevda stress.[8]
En stressindikator som detta vore särskilt användbart på grund av provtagningens icke-invasiva natur.
Förekomsten av detta enzym kan testas genom att låta droppa ett salivprov på ett särskilt filterpapper
där pigment bundits upp i stärkelse. När saliv kommer i kontakt med filterpapperet bryts stärkelsen
ner av alfa-amylas, varpå pigmentet ger en färgning av papperet. Ett tidigare arbete[9] där färgningen
mätts med fotodiod har visat att hastigheten på denna skulle kunna stå i förhållande till nivån alfaamylas. Under denna förutsättning kan även en kamerabaserad mätmetod, så som implementerad i en
mobiltelefon, vara möjlig. Ett sådant sätt att mäta är önskvärt eftersom en användare då kan genomföra
mätningar utan att ha tillgång till dyr mätutrustning, och dessutom kan genomföra mätningar utanför
en laboratoriemiljö.
1.2
Syfte
Syftet med det här arbetet är att utveckla en metod för att mäta en förändring i färg baserat på en
bildsekvens tagen med en mobilkamera. Denna metod ska sedan implementeras i en mobilapplikation
så att en mobiltelefon kan agera mätverktyg. Mobilapplikationen ska kunna användas av en användare
utan tekniska förkunskaper, och ska även kunna låta användaren jämföra tidigare mätningar. Den egna
implementationen kommer utvärderas för att identifiera vilka problem som finns. Utvärderingen tar upp
för- och nackdelar med de val som gjorts och de alternativ som betraktas, och ger dessutom förslag på
förbättring och vidareutveckling.
1.3
Frågeställning
I arbetet har svar på fyra frågor sökts:
• Hur kan förändringen i färg lämpligen mätas?
• Vilka faktorer och praktiska problem kan komma att påverka mätningar?
• Hur kan den negativa inverkan från dessa faktorer motverkas?
• Uppfyller den färdiga implementationen sitt syfte, och om den inte gör det, hur kan en vidareutveckling gå till?
1.4
Avgränsningar
Det här arbetet fokuserar på de tekniska aspekterna av att mäta en förändring i färg som sker över tid,
och som mäts med hjälp av bilder tagna med en mobilkamera. Rapporten introducerar först läsaren till
bakgrundsteori i form av färg som fysiskt fenomen och dess koppling till människans färguppfattning.
Därefter tas färgers representation i för arbetet relevanta färgsystem upp, och vad rapporter inom
användningsområden liknande detta kommit fram till. Dessa resultat (hur skillnad i färg kan beräknas,
hur globala ljusförändringar kan påverka en bild) återkopplas till i utredningen av mätmetoden.
Mätningar kommer vara gjorda för att undersöka de punkter som tagits upp i frågeställningen ovan, det
vill säga de tekniska aspekterna av att utföra en mätning med en mobilkamera. Reproducerbarhet syftar
här på att saliv från samma prov bör ge upphov till att den uppmätta hastigheten på färgutvecklingen ser
likadan ut, men det här arbetet gör ingen ansats till att visa kopplingen till nivån alfa-amylas. Kopplingen
1
mellan den uppmätta färgutvecklingen och vad som indirekt mäts, nämligen nivån alfa-amylas, bygger
alltså på förutsättningen att ett sådant samband kan påvisas, vilket försök har visat vara möjligt.[9]
2
2.1
Teoretisk bakgrund
Introduktion
Det här arbetet handlar om att mäta skillnader i färg. För att introducera läsaren till detta kommer rapporten först ta upp vad färg är, hur färg på olika sätt kan representeras och vilka problem som kan finnas
med dessa representationer. Därefter presenteras några rapporter som behandlar användningsområden
liknande detta arbete. Resultat från dessa har legat till grund för att utveckla metoderna som används
för det här arbetet.
Varför människans färgseende introduceras när arbetet bygger på använding av en kamera är för att
belysa de små skillnader i ljus som med vårt färgseende hela tiden kompenseras för, men som blir väldigt
tydliga när en kamera, som saknar dessa förmågor, agerar instrument.
2.2
Människans färgseende
Färg kommer av att olika ytor i vår omgivning reflekterar (och absorberar) ljus av olika våglängd.
Människans förmåga att se färg börjar inte oväntat med ögats anatomi. Ljus som reflekteras från vår
omgivning tränger först igenom den skyddande hornhinnan och sedan ögats lins, som fokuserar ljuset på
ögats näthinna. På näthinnan sitter det två slags ljuskänsliga synceller, tappar och stavar, som genom
en elektrokemisk reaktion (cellerna innehåller ett protein som reagerar på ljusets olika våglängder) sedan
omvandlar stimuli i form av ljus till de signaler som går längs med synnerven till hjärnan. I hjärnans
syncentrum skapas sedan en bild av vad vi ser.[6]
Syncellerna uppgår till ungefär 100 miljoner, varav majoriteten, 95 miljoner, är stavar och resterande 5
miljoner är tappar. Stavarna är känsliga för ljusets intensitet och används i huvudsak vid svagt ljus för
att ge oss det svartvita seende som låter oss urskilja detaljer i mörker. Tapparna å andra sidan är de celler
som ger oss vårt färgseende, och de förekommer i tre typer som vardera bäst aktiveras för ett särskilt
intervall av ljusspektrumet. Dessa tre typer är ofta kallade S (för engelskans short) som bäst aktiveras
för korta våglängder, M (medium) för mellanlånga våglängder samt L (long) för de längre våglängderna.
Dessa maxima motsvarar ungefär de färger som uppfattas som blått, grönt och rött, respektive.[6] Se
figur 1.
Figur 1: Synligt spektrum[12]
2
Det finns flera teorier för hur vi med dessa celler uppfattar en färg. I den s.k. trikromatiska teorin
beror den färg som uppfattas på antalet aktiverade celler av varje typ, och färg kan således ses som en
kombination av tre relativa värden angivna i de tre kanaler som S-, M- och L-tapparna utgör (denna
form av färgseende kallas trikromatiskt seende). I de färgmodeller som i korthet sammanfattas under
nästa rubrik ses likheten med detta sätta att kvantifiera färg. En alternativ teori är att signaler från
tapparna istället tolkas som komplement till varandra, som opponentfärger.[4]
Människans färguppfattning har förutom enbart de visuella stimuli från varje yta visats bero på en rad
andra faktorer. Bland annat kan människan associera vissa objekt med vissa färger, vilket leder till att
en viss färg kan upplevas starkare för att det finns ett förutfattat stöd för det. Människan har också
en förmåga att uppfatta rådande ljusförhållanden, och kan justera för dessa när färger uppfattas. Ett
fenomen kallat färgkonstans (engelska: color constancy) bygger på dessa mekanismer och syftar på att
ett objekts färg kan tyckas vara opåverkad trots att stora variationer förekommer. Färgkonstans är något
som är önskvärt att kunna reproducera inom datorseende, då det underlättar objektigenkänning, varför
algoritmer utvecklas för detta. Målsättningen är att ett objekts färg ska kunna avläsas oberoende av hur
hela scenen färgats av ljus.[4]
2.3
Olika representation av färg
Det finns en uppsjö olika modeller för att representera färg, och vad som särskiljer varje modell beror
på dess syfte. Vissa modeller är utformade så att avstånd mellan färger på ett precist sätt ska efterlikna
hur dessa skillnader uppfattas för en människa, medan andra modeller är utformade med rent tekniska
detaljer i åtanke. Detta kan exempelvis vara hur färgerna ska visas på en skärm eller se ut i tryck.
Gemensamt för de flesta modeller är att tre dimensioner används för att representera en färg.[10]
När färg beskrivs i efterföljande delar av rapporten kommer i huvudsak termerna färgnyans, mättnad och
ljusstyrka att förekomma. Definitionerna som används är hämtade ur Color Appearance Models och är
fastställda av den internationella kommissionen för belysning, CIE (franska: Commission Internationale
de l’Éclairage).
Färgnyans syftar till en upplevd färgs likhet till någon av färgerna röd, gul, grön och blå eller en kombination av två av dessa färger. Detta är nog för många det intuitiva sättet att svara på frågan om vilken
färg ett objekt har. Med mättnad avses styrkan på en färg (avståndet från gråskala) oberoende av dess
ljusstyrka, vilket kan ses som en färgs renhet. Ljusstyrka avser graden ljus som en yta upplevs reflektera.
En liknande term, ljushet används för att syfta på uppfattad ljusstyrka hos en yta relativt en annan.[4]
Ett undantag kommer göras när någon av termerna ovan syftar till de olika komponenterna i färgsystemet
HSV, där de har ett specifikt inbördes förhållande. I dessa fall kommer det också markeras med H, S, eller
V. Nedan följer en kort förklaring av färgsystem som undersökts för det här arbetet. Dessa återkommer
i den utredande delen angående hur förändringen i färg lämpligen bör mätas.
2.3.1
RGB
I RGB representeras en färg av komponenterna R, G, och B för rött, grönt och blått respektive. RGB
är ett så kallat enhetsberoende färgsystem, vilket innebär att de färger som kan representeras beror
på hur systemet i fråga (exempelvis en LCD-skärm) visar färgerna rött, grönt och blått. Det existerar
däremot en uppsjö olika varianter på färgsystemet, varav vissa har standardiserade definitioner för färger
(bildfilformat har ofta stöd för dessa utökningar för att bättre kunna återge färger). Komponenterna i
RGB adderas mot vitt, det vill säga att (0, 0, 0) motsvarar svart och (255, 255, 255) helt vitt. RGBs
primära användningsområde är just representation av färg som kommer visas på bildskärm, och ses som
mindre praktiskt vid färgigenkänning. [10][7]
3
2.3.2
CIELAB
LAB (eller CIELAB, en precisering av LAB), är till skillnad från RGB enhetsoberoende. Färger kan
således specificeras entydigt i LAB, och samma färgangivelse kan användas på olika system. LAB täcker
dessutom en större färgrymd än exempelvis RGB, som begränsats av hur de system för vilket det är
utvecklat kan återge färg. En färg i LAB anges i komponenterna L för ljushet samt A och B för färgens
nyans. A och B motsvarar vardera två opponentfärger (det vill säga färger som inte kan utgöra en
sammansatt färg): rött-grönt och gult-blått. Denna uppdelning av färgrymden är gjord sådan att avstånd
mellan färger ska motsvara hur skillnaderna uppfattas för människan.[7][3]
2.3.3
HSV
HSV är en transformering av RGB, med syfte att ge en alternativ representation av färg. En färg
representeras i HSV genom sin färgnyans (Hue), mättnad (Saturation) och ljusstyrka (Value). HSV
används ofta då denna separation mellan ljusstyrka, nyans och mättnad ofta är fördelaktig vid matchning
av färg. Användningsområden inkluderar datorseende och bildanalys. En nackdel är att färgrymdens
utformning leder till instabilitet för väldigt låga värden på färgmättnad, då nyansen blir odefinierad.
Omvandling mellan RGB och HSV är trivial, och visas i pseudokod i algoritm 1 nedan.[7]
Algoritm 1 Omvandling från RGB till HSV[1]
Require: r,g,b på intervallet 0.0 to 1.0
rgbmin ← min(r, g, b)
rgbmax ← max(r, g, b)
delta ← rgbmax − rgbmin
if delta = 0 then
h←0
else if rgbmax = r then
h ← ((g − b)/delta) ∗ 60
else if rgbmax = g then
h ← ((b − r)/delta + 2) ∗ 60
else
h ← ((r − g)/delta + 4) ∗ 60
end if
if h < 0 then
h ← h + 360
end if
if rgbmax 6= 0 then
s ← delta/rgbmax
else
s←0
end if
v ← rgbmax
2.4
Normalisering av ljus
Ett av de problem som förutsetts är förändringar i ljusförhållanden. Då detta är centralt inom datorseende
finns en uppsjö med existerande litteratur inom området. En rapport som tar upp dessa problem med
särskilt avseende på avstånd i färg är Change Detection in Color Images[5]. Rapporten handlar om
objektigenkänning men dess resultat är relevanta för detta arbete. Förutom en jämförelse av enkla
färgavstånd adresseras tre problem som försvårar att identifiera färger i en bild: förekomsten av en
global förändring i ljusstyrka, förekomsten av en global förändring i ljusets färgning, samt förekomsten
av lokala förändringar i ljusstyrka (skuggor). I det här arbetet kommer bara de två första punkterna att
4
beröras, och det antas att filterpapperet (som utgör en bråkdel av varje bild) inte kommer påverkas av
någon partiell skuggning.
Den kompensering för ljus som ovanstående rapport behandlar är en variant på en enkel algoritm baserat
på ett antagande som kallas “grey world”, och dess användbarhet för det här arbetet tas upp i rapportens
senare del. Antagandet algoritmen bygger på är att ljusets genomsnittliga reflektion i en bild inte har
någon färgning. Därför kan en förändring i ljusförhållanden ses som att varje kanal i bilden påverkats av
en faktor som är konstant för samtliga bildpunkter, och att detta motsvarar ljuskällans färgning.[5][6]
Baserat på detta kan en bild i en bildsekvens normaliseras genom att utnyttja förhållandet mellan de
genomsnittliga värdena för en referensbild och för de efterkommande bilderna. För att justera en bild
multipliceras varje bildpunkt med denna kvot.[5] Pseudokod för detta visas i algoritm 2. “get rgb avg”
är här en vanlig uträkning av medelvärdet för varje komponent men visas också.
Algoritm 2 Pseudokod för att justera medelvärde efter en referensbild
if is ref erence image then
rgb baselineavg ← get rgb avg()
else
{för alla efterföljande bilder}
rgbavg ← get rgb avg()
rgb f actors ← rgb baselineavg /rgbavg
for every pixel in image do
pixel ← (pixelR ∗ rgb f actorsR , pixelG ∗ rgb f actorsG , pixelB ∗ rgb f actorsB )
end for
end if
Algoritm 3 Uträkning av medelvärde i RGB
rgbavg ← (0, 0, 0)
for every pixel in image do
rgbavg ← rgbavg + (pixelR , pixelG , pixelB )
end for
rgbavg ← rgbavg /pixel count
return rgbavg
En annan enkel algoritm som använts i det här arbetet, kallat max-RGB, fungerar på en “per bild”praxis. Istället för att baseras på ett genomsnitt används de bildpunkter som har maximala värden i
respektive R-, G- och B-kanal. I likhet med motiveringen för den föregående algoritmen antas dessa
värden stå i förhållande till ljusets färgning. Detta då en bildpunkt med maximalt värde har reflekterat
ljusets färgning till fullo.[6]
För att normalisera en bild kan dessa maxvärden letas upp, och därefter justeras värdena för varje kanal
för de övriga bildpunkterna så att de sprids på det nya intervallet mellan noll och maxvärdet. Pseudokod
för detta visas i algoritm 4. Detta liknar normaliserad RGB, där varje komponent dividerats med summan
av samtliga komponenter, med resultatet att färgens kromaticitet (färg utan information om ljusstyrka)
kan användas.
Användningsområdet för det här arbetet skiljer sig från många rapporter då normaliseringen oftast
är ett försteg till någon form av objektigenkänning. Istället för objektigenkänning önskas här en färg
mätas (möjligen i kombination med tekniker för objektigenkänning för lokalisering av mätområde), vilket förutom normalisering ställer krav på vilket mått på färgavstånd som används. I arbetet har främst
euklidiskt avstånd och mätning av färgmättnad testats. Med euklidiskt avstånd i RGB ses varje komponent som en koordinat i ett rum. Både mått i HSV och euklidiskt avstånd i RGB utvärderas kort i [5], där
även det tillkortakommande i HSV som nämndes i föregående avsnitt kompenserades för. Här unyttjas
även separationen av ljusstyrka för att mäta enbart det euklidiska avståndet i de två komponenterna
för mättnad och nyans. En egen utvärdering av bland annat dessa metoder för att mäta färgutveckling
5
Algoritm 4 Justering efter maxvärden
rgb maxR ← (0, 0, 0)
for every pixel in image do
rgb max = (max(pixelR , rgb maxR ), max(pixelG , rgb maxG ), max(pixelB , rgb maxB ))
end for
{Justera sedan samtliga bildpunkter:}
for every pixel in image do
pixel = (255 ∗ (pixelR /rgb maxR ), 255 ∗ (pixelG /rgb maxG ), 255 ∗ (pixelB /rgb maxB ))
end for
återkommer i senare avsnitt.
3
3.1
Metod
Metod för arbetet
Tillvägagångssättet för arbetet har varit att först skapa en datamängd bestående av bildsekvenser på salivprover tagna under en rad olika förhållanden som förväntats kunna råda. Baserat på denna datamängd
undersöktes sedan vad som lämpligen skulle mätas och hur, samt hur olika förhållanden kunde påverka
dessa mätningar. Därefter, när en mätmetod väl hade valts, har denna implementerats i form av en
mobilapplikation till operativsystemet Android. Som sista steg har applikationen testats som helhet för
att se om de förhållanden som täcktes i det första steget faktiskt var tillräckliga, eller om något behövde
korrigeras för att hantera nyfunna problem.
Anledningen till att bilderna har tagits separat är för att den mätalgoritm som söktes inte förväntades bero på något annat än just en bildsekvens, och att det därför är fördelaktigt att kunna hålla mätalgoritmerna
minimala och oberoende av implementationsspecifika detaljer som hör till Android. Istället har bildanalysen gjorts i Matlab, som har mycket bra stöd för bildbehandling och för att räkna på och visualisera
resultat från mätningar. Även Python har använts ombytligt med Matlab.
För att skapa datamängden användes en existerande mobilapplikation för att ta sekvenser av bilder med
ett regelbundet intervall. Bildsekvenserna togs under olika förutsättningar: ljussättningen har varierats
(mätningar gjordes då provet varit belyst med både vitt, starkt ljus men även ett gulare ljus) och
kamerans fixering har varierats (från att vara helt fixerad med ett improviserat stativ, från att endast vara
handhållen) för att täcka både optimala och mindre optimala förhållanden. Enklare fotomanipulation har
använts för att kunna variera enstaka detaljer som behövde testas. Flera sekvenser där samma resultat
är att förvänta har tagits för att testa reproducerbarhet under olika förhållanden. Tillvägagångssättet
för provtagningen beskrivs i större detalj senare i rapporten.
Analysen i Matlab har bestått av att först granska bildsekvenser för att hitta och mäta de skillnader
mellan varje bild som på ett bra sätt kan beskriva förändringen i färg. När några olika mått hittats har
de olika förhållandenas påverkan studerats (ändring i ljus, kamerans förflyttning), samt hur detta kan
motverkas (normalisering för att minska påverkan av förändring i ljus, lokalisering av prov för att minska
påverkan av att kameran rubbats).
Implementationen i Android gjordes i tre steg. Först implementerades sekvenstagning av bilder. Denna
funktionalitet testades också för att verifiera att bilder kunde tas med samma intervall och kvalitet
som de som utgjort den ursprungliga datamängden. Efter detta implementerades mätalgoritmen (med
några optimeringar), och allra sist skapades ett användargränssnitt för navigation av applikationen och
visualisering av resultat.
6
3.2
Utförande av mätningar
De mätningar som gjorts har utförts enligt samma förfarande: en bit filterpapper klipps ut (ungefärlig
storlek 2x2 centimeter) och placeras på ett relativt enfärgat underlag. En droppe från ett nytaget salivprov droppas med pipett på det urklippta filterpapperets mitt. Det här ger upphov till att en klarblå
färgning av papperet uppstår över tid (ungefär 60-100 sekunder), och utbredes i ett cirkulärt område.
Det är hastigheten på färgningen i området som sedan mätts som en funktion av tiden, oberoende av
hastigheten på områdets utbredning. I den här rapporten kommer ”mätning” att syfta till en sekvens
av bilder där färgningen i varje bild kvantifierats med något mått. Ett exempel på en bildsekvens visas
i figur 2.
Figur 2: Ett litet urval av bilder från en bildsekvens
Dessa mätningar har utförts med tre faktorer i åtanke: reproducerbarhet, variation i ljusförhållanden
samt att kamerans position kan förflyttas. För att få ett mått på reproducerbarhet har flera prover tagits
direkt efter varandra och med samma salivprov, i hopp om att dessa mätningar ska ge samma resultat.
Prover har också spätts ut för att kunna påvisa en skillnad i mätresultat. Mätningar har gjorts under
några olika ljusförhållanden, både med ett starkt vitt ljus och också med ett svagare och gulare ljus
(så som från en glödlampa). Ljuset har sedan hållits oförändrat under hela mätningarnas gång, men
mätningar där ljuset varierats mellan varje bild i en bildsekvens har också gjorts (en lampa som tänds
eller släcks, en skugga som faller över mätområdet).
Samtliga mätningar är gjorda med en mobilkamera då målet är att mätningarna i slutändan ska göras
med en mobilapplikation. För flera mätningar har kameran varit helt fixerad, och för flera andra har
den varit handhållen. Mätningar där kameran varit fixerad har använts som referens för mätningar där
kameran inte varit fixerad. Kameralampan har hållits avstängd då filterpapperet för flera prov reflekterat
ljuset väldigt kraftigt, och dess eventuella positiva effekt för mätningar med sämre ljusförhållanden har
inte utretts.
Intervallet mellan varje bild i bildsekvenserna har varit 4 sekunder. Detta värde valdes då det visade sig
vara tillräckligt kort för att förändringen på färgutvecklingen ska kunna framträda. Ett längre intervall
har gjort att färgutvecklingen blivit mer svårtydd, medan ett kortare intervall inte tillförde särskilt
mycket (mellanliggande värden har varit enkla att uppskatta). Detta intervall ger dessutom en marginal
vad gäller mobiltelefonens prestanda (tid för kameran att hitta fokus på provet, en viss tidsbuffert för
bildbehandling). Den totala tidsåtgången för en mätning har i genomsnitt varit en och en halv minut
(24 bilder). Efter detta har färgutvecklingen avstannat för de flesta prov.
3.3
Verktyg och grafer
För att analysera bilderna har Matlab och Python använts. I Matlab har det inbyggda stödet för bildbehandling och visualisering av data (uppritning av grafer) använts. Python har använts med biblioteken
PIL (Python Imaging Library) för att få tillräckligt stöd för bildbehandling, och biblioteket Matplotlib
har använts för att få ett Matlab-liknande stöd för grafer. Både Matlab och Python har använts ombytligt
och för överlappande uppgifter.
De grafer i rapporten som illustrerar mätningar har om inget annat anges bildernas ordning i sekvensen (där den första bilden har ordningsnummer 0) som enhet i x-led och det uppmätta värdet på
7
färgutveckling i y-led. Innebörden av detta värde varierar beroende på vad som diskuteras och förklaras
i den löpande texten, men är i regel ett genomsnittsvärde.
4
4.1
Utveckling och implementation
Observerade yttre faktorer
Mätningar som har gjorts har visat att det finns två faktorer som kan ha stor negativ inverkan på
mätresultatet: varierande ljusförhållanden mellan varje bild i en bildsekvens, och förflyttning av kameran.
Dessa problem kommer att diskuteras i större detalj i de två avsnitten som följer efter diskussionen om
att hitta mätmetod. I det här avsnittet kommer dessa problem bara att introduceras, eftersom de kommer
vara relevanta för stora delar av utvecklingsdelen.
4.1.1
Påverkan från ljus
Påverkan från ljus kommer från det faktum att olika belysning resulterar i olika färgning av bilden
och mätområdet. Dels kan det förekomma variationer mellan olika mätningar där olika ljus använts.
Exempelvis kommer en mätning under en skrivbordslampa antagligen leda till en gulare färgning än
vad en mätning gjord under ett lysrör har (jämför figur 2 med figur 3). Dels kan det också förekomma
skillnader i ljus mellan varje bild i en bildsekvens. De mätningar som har gjorts i det här arbetet visade
att även små förändringar som orsakats av att kameran eller användaren rört sig kan leda till förändringar
i ljusstyrka.
Förändringar i ljus måste alltså kompenseras för av två orsaker. För det första måste mätningar gjorda
under olika ljusförhållanden vara konsekventa. En mätmetod som uppskattar hastighet på förändring
får inte vara beroende på vilken belysning som används. För det andra måste skillnader i ljus under en
pågående mätning kompenseras så att den uppmätta hastigheten inte påverkas i någon riktning.
4.1.2
Förflyttning av kameran
Förflyttning av kameran orsakas av en svårighet att hålla kameran helt fixerad under en hel mätning,
vilket kan ta över en minut. Det kan låta som en enkel uppgift, men man ska betänka att det intressanta
området i varje bild kommer vara väldigt litet sett till hela bilden som tas. Detta på grund av att kameran
måste hållas från ett visst avstånd från salivprovet för att dels kunna få fokus, och dels för att inte kasta
en skugga över mätområdet. Det här leder till att en för användaren knapp märkbar ryckning kan leda
till en förskjutning på minst ett tiotal bildpunkter. Konsekvenserna av detta är att bildpunkterna inom
mätområdet förskjuts om det hålls fixerat. Oavsett typ av förskjutning tillförs nya bildpunkter medan
andra bildpunkter försvinner ur mätområdet. Vid en förskjutning parallell med filterpapperet är effekten
densamma som att flytta på mätområdet, och en förskjutning där kameran rörs närmre eller längre bort
från filterpapperet motsvarar att ändra storlek på mätområdet (på ett ungefär; egentligen ändras ju
också vad varje bildpunkt representerar, exempelvis kan en prick som består av tre bildpunkter istället
representeras av tio bildpunkter vid en inzoomning). Figur 3 visar hur en för användaren knappt märkbar
förflyttning av kameran påverkar bilderna.
Anledningen till att förflyttning av kamera är ett problem beror på två orsaker. För det första är filterpapperet prickigt, där de områden som från början har pigment är väldigt mörkt blå, medan övriga
områden är vita. Förflyttas kameran ändras fördelningen av dessa bildpunkter, vilket påverkar resultatet
om något slags genomsnitt används. För det andra ses en liten annan färgning i det området där saliven
droppats. Till en början kommer detta område vara mörkare än resten av provet, och därefter ljusnar
detta område i takt med att omkringliggande områden färgas, så att en slags urholkning bildas. Dessutom
kan speglingar, bubblor och liknande förekomma (vilket ofta leder till ett väldigt ljust område).
8
Figur 3: Förflyttning av kameran
Figur 4: Spegling och urholkning
Figur 4 visar hur detta kan se ut. Det vänstra provet har inte hunnit färgats av pigmentet, att det är
mörkare beror endast på att saliv droppats. Speglingar kan ses i båda proven, och en urholkning av
mittenområdet kan ses i det högra provet. Det är alltså önskvärt att kunna bortse från ett cirkulärt
område fixerat vid provets mittpunkt.
4.2
4.2.1
Val av mått på färgutveckling och mätområde
Mått på färgutveckling
Det första steget i att reda ut hur färgförändringen ska mätas har varit att granska vad som skiljer mellan
varje bild i de bildsekvenser som tagits på salivproven. För att göra detta har bara området som utgör
det urklippta filterpapperet analyserats. Figur 5 visar tre bilder tagna från en bildsekvens.
Figur 5: Färgutveckling
Den första bilden är tagen omedelbart efter att salivprovet droppats på filterpapperet, den andra bilden
är tagen halvvägs in i mätningen, och den sista bilden är tagen i slutet av mätningen, där färgutvecklingen
har avstannat (den tredje bilden är tagen 60 sekunder efter den första). För att få en fingervisning av hur
färgen förändrats har de genomsnittliga värdena i kanalerna R, G och B uppmätts för några prov. Figur
6a visar denna utveckling. Figur 6b visar förändringen i kanaler H, S, V om bilden istället representeras
i färgsystemet HSV (varje kanal antar värden mellan 0.0-1.0).
Resultatet som visas i figur 6a kan tyckas överraskande då det visar att nivån blått är nästintill helt
oförändrad. Det här beror emellertid på hur färgerna representeras: färgerna adderas mot vitt och således
har de ljusare områdena redan från början ett högt värde i B-komponenten. Det som skett i RGBbemärkelse är att bildpunkterna blivit mörkare av en liten minskning i grönt och en större minskning i
9
(a) Förändring i RGB
(b) Förändring i HSV
(c) Förändring i euklidiskt avstånd
Figur 6: Uppmätt genomsnittlig förändring i RGB, HSV och euklidiskt avstånd i RGB för ett prov med
bra förhållanden
(b) Den bildsekvens som mätits
(a) Förändring i HSV
Figur 7: Uppmätt genomsnittlig förändring i HSV för ett problematiskt prov
rött. Resultatet i figur 6b visar något som intuitivt kan tyckas beskriva förändringen bättre. Färgton (H)
och ljusstyrka (V) är oförändrade, medan färgens mättnad har ökat, vilket ses som att bildpunkterna
har fått en renare blå färg.
Kurvan som visar mättnad visar också på en förändelsehastighet som vi förväntar oss, nämligen en snabb
ökning i början som sedan mattas av tills det att det förbrukade provet förblir oförändrat. Emedan detta
vid en första anblick kan verka vara en enkel lösning visar det sig vara problematiskt om ljusförhållanden
inte är lika bra. Figur 7a visar genomsnittliga H, S, V-värden för en bild där ljuset varit särskilt starkt
färgat i början av mätningen, vilket lett till att färgmättnaden nu istället visar på en minskning. Notera
att det samtidigt är enkelt att själv se en förändring i fläckens färgning, som istället tycks öka (figur 7b).
Mätning av färgförändring där ljusstyrkan (så som definierat enligt HSV) räknas bort fungerar väldigt
väl på de bildsekvenser där den enda variationen i ljusförhållanden har varit att ljuset blivit starkare eller
svagare (exempelvis då en skugga uppstått över hela mätområdet till följd av att en ljuskälla blockerats),
men tycks inte vara omedelbart användbart (det vill säga utan normaliserng) när ljuset har medfört en
förändring i färg som påverkat den genomsnittliga mättnaden. Ett annat problem (som nämns i [5]) är
att ju närmre gråskala en färg är (det vill säga att mättnaden nära 0), desto större kan variationen i
färgton vara. Detta kan göra en direkt avläsning olämplig om vi vill mäta förändring i färg. Exempel:
en bildpunkt i gråskala (det vill säga att i RGB är samtliga komponenter lika stora) som exempelvis
vitt, (255, 255, 255), har alltid en mättnad som är 0. Justeras färgen till att ligga nära vitt men inte
vara gråskala, som exempelvis (255, 255, 240) ses en ökning i färgmättnad från 0.0% till 13.7%. Görs
motsvarande för en punkt som har högre mättnad, exempelvis från (100, 255, 255) till (85, 255, 255), ses
10
istället en förändring från 60.8% till 66.7% (en ökning med 5.9 enheter).
En följd av detta är att ljus som tillför en färg som knappt förekommer i mätområdet har en större
påverkan (exempelvis varmt, gult ljus som tillför rött, en färg som i mer neutralt ljus knappt finns på
filterpapperet - detta gör att den resulterande färgen ligger närmre grått). Detta ställer ett krav på att
ljuset inte endast hålls konstant, utan kan normaliseras sådant att ljusets färgning uppskattas. Mätning
av euklidiskt avstånd i två komponenter (H och V i HSV) visade inte på någon förbättring över enbart
en mätning av färgmättnad, utan ledde till mer instabila resultat. Förhoppningen är att en normalisering
kan hålla färgnyans och ljusstyrka konstant.
Ett annat sätt att mäta skillnaden
p i färg är att använda det euklidiska avståndet i RGB mellan två
bildpunkter, det vill säga: d = (r1 − r2)2 + (g1 − g2)2 + (b1 − b2)2
Det här är sannolikt ett av de mer intuitiva måtten, och det hjälper mot det problem som illustrerades i
figur 6a, nämligen att förändringen inte ses som en ökning i den kanal som är dominant för färgen som
ska matchas (i det här fallet blått) utan som en minskning i de två andra kanalerna. Resultatet då det
euklidiska avståndet har använts illustrerades i figur 6c. Detta mått ger ett bra resultat för de flesta
mätningar som är tagna med relativt fördelaktiga ljusförhållanden.
Precis som med HSV är det dock tydligt att det krävs en förbehandling av bilden i form av normalisering
av ljusförhållanden för att få ett stabilt resultat för mätningar med mindre optimala förhållanden. Innan
detta tas upp är det värt att notera att i det rum som utgörs av varje kombination av R, G och B, och
kan ses som en kub, finns åtta punkter som utgör hörnen i denna kub. Det euklidiska avståndet mellan
två punkter kommer vara maximalt om de motstående hörnen väljs, det vill säga för (0, 0, 0) och (255,
255, 255), för (255, 0, 0) och (0, 255, 255), för (255, 255, 0) och (0, 0, 255), samt för (255, 0, 255) och
(0, 255, 0).
Av dessa punkter är det första paret, det vill säga (0, 0, 0) och (255, 255, 255) av störst intresse. Detta
då (255, 255, 255) är vitt, och alltså den färg som de ofärgade områdena av filterpapperet förväntas ligga
väldigt nära under optimala förhållanden. Om vi väljer att beräkna det euklidiska avståndet från varje
bildpunkts färg till vitt istället för blått, får vi ytterligare tolerans för att den färg som vi annars försöker
matcha, det vill säga blått, inte nödvändigtvis kommer gå mot (0, 0, 255) utan något mer godtyckligt
värde med den blåa komponenten som dominant. Resultatet som fås av detta är emellertid bara inversen
av att använda (0, 0, 0), det vill säga svart, som färg att matcha mot. Det här gör att vi nu egentligen
bara mäter den euklidiska normen. Då R, G, B räknas additivt skulle detta kunna ses som ett mått
på ljusstyrka, varför det kanske är enklare att använda ett mått på detta än att mäta ökningen av den
specifika färg som färgutvecklingen står för. Notera här att ljusstyrka i HSV (kanal V) angivet i RGB
är definierat att vara den kanal med högst värde (detta framgår av algoritm 1). Det här ger alltså inte
samma resultat som mätning av ljusstyrka enligt HSV.
Det har visat sig att mätning av just ljusstyrkan för de flesta prov får resultat som är nära identiska med
att mäta förändringen mot blått, men detta väcker ändå frågor om huruvida det verkligen är lämpligt,
särskilt då filterpapperet är utvecklat för att ge en utveckling mot blått. Även problem som förändring
i ljusstyrka till följd av det lager saliv som inte ännu sugits upp av papperet skulle behöva undersökas
med detta i åtanke. De mått som prövats mer ingående är därför euklidiskt avstånd i RGB och mätning
av färgmättnad i HSV.
4.2.2
Val av lämpligt mätområde
Angående lämpligt mätområde hittades två faktorer som behövdes ta i beaktande. Ett första konstanterande är att mätområdet bör hållas konstant i storlek om något slags genomsnitt på färgutveckling ska
användas. Detta grundas i att det inte är hastigheten på provets utbredning som önskas mätas, utan
hastigheten på förändringen i färg inom det område som utsatts för saliv. Då utbredningen av provet
fortfarande pågår medan mätningen görs, skulle en ständig utökning av mätområdet leda till att de
nyintroducerade bildpunkterna, som inte hunnit färgats lika mycket, tillåts påverka mätningen. Det här
leder till att den genomsnittliga hastigheten som uppmäts felaktigt kommer bli lägre, och att mätningen
11
nu även i högre grad torde bero på utbredningshastigheten av saliven. Det är dessutom värt att notera
att färgningen närmast provets mittpunkt når sitt maxvärde redan innan en minut, medan utbredningen
och färgningen av ytterområdena kan ta flera minuter beroende på provets storlek.
Den andra faktorn som tagits i beaktande är att färgningen i ett provs mittpunkt börjar minska efter
en kort stund, och att området nära mittpunkten därpå blir betydligt vitare än omliggande områden.
Det här antas bero på att vätskan för pigmenten med sig utåt från mittpunkten. Det tycks också vara
så att färgutvecklingen i enstaka punkter påverkas av att närliggande områden redan blivit exponerade
för salivprovet, i vilket fall pigmenten från dessa områden kan ge upphov till ett ”överlapp” och således
en snabbare färgning.
Baserat på de två första konstanteranden borde ett lämpligt mätområde vara ringformat, och strax
mindre än provets storlek. Det här förhindrar att de mindre färgade yttre punkterna tas med i mätningen,
precis som det urholkade mittenområdet.
(a) Cirkulärt, fyllt mätområde
(b) Ringformat mätområde
(c) Mätning i provets mitt
Figur 8: Variation på mätområden
Figur 8a visar resultatet då en fylld cirkel (fixerad på provets mittpunkt) har använts som mätområde, och
figur 8b visar resultatet då ett ringformat området har använts (med samma fixering som det cirkulära).
Mätningen som gjorts har varit handhållen, men de flesta mätningar har gett nästan identiska resultat när
mätområdet varierats så här. Den mätmetod som använts är mätning av färgmättnad efter normalisering,
men precis samma utveckling kan ses för mätning i euklidiskt avstånd. Hela mätområdet har befunnit
sig innanför provet.
Förbättringen i den sista figuren beror på att urholkningen inte längre påverkar provet, och att en mer
entydig hastighet kan uppmätas. För att illustrera urholkningens påverkan visas resultatet av en mätning
gjord endast i detta område (se figur 8c).
Ett alternativ till att mäta samtliga bildpunkter inom mätområdet var att utföra en partitionering av
bildpunkter till två mängder; en som innehåller de bildpunkter som alltid varit färgade (prickarna på
filterpapperet med pigment), och en med de ljusa bildpunkter som kommer bli färgade. Tanken bakom
detta var att inte behöva räkna de bildpunkter som ursprungligen var färgade, och därmed slippa den
relativt stora påverkan som en förflyttning av mätområdet medförde. Detta visade sig vara svårt att
genomföra dels då en mappning mellan bildpunkter i varje bild hade krävts (vilket försvåras om bilden
förskjuts eller förminskas/förstoras, varpå ett område som representerades av bildpunkt i en bild plötsligt
kan utgöras av flera bildpunkter), och dels för svårigheten att avgöra vad som ska räknas som en redan
färgad punkt.
4.3
Normalisering av ljus
De mätmetoder som beskrivits har visat sig fungera under förutsättning att ljusförhållanden hållits
konstanta genom hela mätningen. Dessa optimala bildsekvenser har tagits när kameran varit helt fixerad,
men när så inte har varit fallet har det visat sig svårt att undvika variationer i ljus. Det är därför tydligt
att en förbehandling av bilder i form av en normalisering av ljusets påverkan krävs för att åstadkomma
12
ett bättre resultat. I det här arbetet har två enklare varianter av en sådan normalisering undersökts.
Ett första naivt tillvägagångssätt har varit att utifrån varje bild välja en liten mängd av de ljusaste bildpunkterna inom mätområdet. Dessa bildpunkter antas komma från de vita områdena på filterpapperet.
För dessa bildpunkter räknas sedan det genomsnittliga värdet i R, G, B ut. Därefter justeras hela bilden
genom att varje bildpunkts RGB-komponent multipliceras med kvoten av de uppmätta genomsnitten
och en referensfärg, som valts till att vara helt vitt, det vill säga (255, 255, 255) i RGB. Denna justering
beskrivs i pseudokod i algoritm 5.
Algoritm 5 Justering efter referenspixel
ref erence color ← (255, 255, 255)
sampled color ← get brightest pixel()
f actors ← (ref erence colorR /sampled colorR , ref erence colorG /sampled colorG ,
ref erence colorB /sampled colorB )
for every pixel in image do
pixel = (pixelR ∗ f actorsR , pixelG ∗ f actorsG , pixelB ∗ f actorsB )
end for
Detta visade sig kunna minska påverkan av förändring i ljusstyrka, men inte alls vara behjälpligt då en bild
blivit färgad av ljuset. Detta antas bero på att de ljusa bildpunkterna som valts inte innehåller tillräckligt
med information för att kunna spegla den genomsnittliga färgningen av hela bilden då de har reflekterat
nästan allt ljus. Störst skillnad ses istället i de lite mörkare bildpunkter som visar färgutveckligen av
salivprovet. Ett alternativ som istället beaktar hela bilden och dessutom bildsekvensen prövades härnäst.
En implementation av detta beskrivs i [5] och visades tidigare i algoritm 2.
Idén bygger här istället på att ljusets påverkan (som antas belysa och påverka hela bilden), kan motverkas
genom att justera så färgernas medelvärde i varje bild hålls konstant. I likhet med den tidigare metoden
så räknas först medelvärden för varje kanal ut för att användas som referens. I det här fallet används
den första bilden. Istället för att bara använda mätområdet används en större del av bilden för att
kompensera för det faktum att det pågår en förändring i färg i form av salivprovet (ett alternativ är
att utesluta detta område, men det visade sig kompenseras för om ett större område används för att
beräkna medelvärdet). Med hjälp av dessa medelvärden sker sedan justeringen genom att för varje bild
räkna ut dess medelvärden, och sedan multiplicera varje bildpunkt med kvoten mellan dessa värden och
referensvärdena.
Detta visade sig fungera bättre för att hålla ljusstyrkan konstant, men precis som med föregående metod
motverkas inte påverkan av färgat ljus (däremot blev resultatet bättre). Två problem i synnerhet kunde
observeras. Det första var att detta sätt att justera färgen på (med medelvärden) kommer försöka åtgärda
alla ytor i bilden med samma faktorer. Det här speglar inte hur ljuset faktiskt färgat området, då olika
ytor kan ha reflekterat olika färg. Exempelvis ser ett väldigt mörkt område (som inte är glansigt) som
belyses med färgat ljus en mindre förändring än ett ljust sådant.
Det andra problemet kommer av att alla bildpunkter justeras med samma faktor. Detta leder till att då
en ökning eller minskning av genomsnittet för en eller två kanaler sker ser de bildpunkter som redan har
högt värde i dessa störst förändring, och de med låga värden ser en betydligt mindre förändring. Algoritmen, som baseras på antagandet att det genomsnittliga färgningen i bilden är i gråskala (”greyworld
assumption”) presterar dessutom sämre när en färgutveckling sker i bilden, vilket leder till att denna
kommer motverkas.
Problemen med att använda denna metod visas i figur 10, och en lyckad justering visas i figur 9. Dessa
bilder har valts för att visa på en tydligare skillnad. I bilder på de faktiska mätningar är effekterna inte
lika synliga men tillräckligt för att påverka mätningen. Figur 9a är originalbilden (som i en mätning
skulle utgöra den första bilden i sekvensen). Figur 9c visar resultatet av att justera figur 9b (som är
mörkare) så medelvärden för hela bilden matchar de i originalbilden.
Figur 10a och figur 10b visar samma process men där färgningen inte varit i gråskala. Originalbilden är
densamma.
13
(a) Original[13]
(b) Förmörkning
(c) Justerat
Figur 9: Normalisering av färg
(a) Röd färgning
(b) Justerat
(c) Ökning ljusstyrka
(d) Justerat
Figur 10: Normalisering av färg
Resultatet är en bild med felaktig färgning. Notera att den första bilden visar en förmörkning sådan att
färgernas inbördes förhållanden inte påverkats vilket är en konstruerad och helt optimal situation. Om
så inte varit fallet hade resultatet blivit sämre. I bilden med en ökning av ljusstyrka har ett högt värde
adderats till varje bildpunkt, vilket gör att skillnaderna i varje färgkomponent är väldigt små. Resultatet
efter justering är en bild med nästan obefintlig kontrast. En sådan situation torde emellertid vara väldigt
otrolig i ett verkligt scenario (att ett område som belyses mer minskar i kontrast).
En annan enkel variant på normalisering är den som kallas max-RGB eller scale-by-max i olika rapporter[6][2].
Pseudokod för denna algoritm visades i algoritm 4. Precis som den första metoden som togs upp så bygger den på att använda ett urval bildpunkter som referens. Dessa bildpunkter hämtas från den bild som
ska justeras, så normaliseringen görs oberoende av de andra bilderna i sekvensen. Som namnet antyder
så används maxvärdena för varje kanal, som särskilt för vita ytor (där maxvärdena kommer hittas)
borde färgas representativt för det ljus som hela området belysts med. Om vi låter max R, max G och
max B beteckna de upphittade maximala värdena för rött, grönt och blått i bilden, och R, G, B beteckna
värdena för en enskild bildpunkt som ska justeras så fås den justerade bildpunkten R’,G’,B’ enligt: R’
= 255 * R/max R, G’ = 255 * G/max G, B’ = 255 * B/max B (multiplikationen med 255 är bara för
att värdet ska hamna i intervallet 0-255). Denna metod visade sig fungera bättre än de föregående två,
särskilt då ljuset färgat bilderna. Innan detta kommer visas betraktas ytterligare ett alternativ.
I enlighet med resonemanget i föregående avsnitt, där det euklidiska avståndet i färg från vitt i princip
ger samma resultat som en mätning av komponenternas euklidiska norm, har det också visat sig att
liknande mått på ljusstyrka skulle kunna användas i kombination med normaliseringen ovan. Ett enkelt
mått är att i RGB helt sonika addera komponenterna eller mäta bilden i gråskala. Vid omvandling till
gråskala används vanligtvis en viktning för varje färg för att resultatet bättre ska motsvara hur människan
uppfattar färgerna. Exempelvis används ofta en viktning från IEC (se [11], matrisen för XYZ, raden för
Y), där ljusstyrkan hos en bildpunkt räknas ut enligt L=0.2126*R + 0.7152*G + 0.0722*B (för en bild i
gråskala sparad i RGB-format är detta värdena för R, G och B som alltså är lika stora för varje bildpunkt).
Dessa faktorer har använts för figurerna nedan. Detta val påverkar däremot inte mätresultatet nämnvärt.
Notera att det är stor skillnad på detta mått och mätning av ljusstyrka i HSV, där ljusstyrkan endast
anges som den kanalen med det högsta värdet.
Avslutningsvis visas resultatet av att applicera metoderna som diskuterats på några problematiska
14
mätningar. För mätningar som inte varit problematiska har de haft väldigt liten påverkan, men inte
någon negativ sådan. Alla grafer kommer visa mätningar där euklidiskt avstånd från vitt har använts
som mått på färgutvecklingen och mätområdet varit ringformat och placerat inuti provet (sådant att det
urholkade området i mitten undvikits).
Den första mätning som visas är den som visades i figur 7b. Problemet med denna mätning är att bilden
från början starkt färgats av ljuset, och att ljuset sedan blivit mindre färgat allt medan mätningen
fortgått. Detta har delvis motverkat resultatet av mätningen. Med ”Normalisering 1” avses den metod
som diskuterades först, det vill säga att den första bilden i sekvensen används som referens, och med
”normalisering 2” avses den metod där maxvärdena i varje bild använts för att justera färgen i samma
bild.
(a) Ingen normalisering
(b) Normalisering 1
(c) Normalisering 2
Figur 11: Jämförelse normalisering
För de två första figurerna (figur 11a och figur 11b) ses inte någon märkbar förbättring. Normaliseringen
har snarare lett till att skillnaderna mellan varje bild till en början minimerats, vilket ger en mindre
uppmätt färgutveckling. En granskning av bilderna visar att färgutvecklingen tar fart efter de första två
bilderna och sedan avstannar runt bild nio, vilket inte stämmer med detta resultat. Justeringen har alltså
lett till ett icke-önskvärt resultat.
Det uppmätta värdet för bild nummer 14, som varit ljusare än de övriga, borde dessutom ligga i nivå
med efterföljande bilder. Ljusstyrkan har alltså inte heller justerats för på ett önskvärt sätt. Den andra
metoden, som visas i figur 11c, visar däremot på en utveckling som bättre stämmer överrens med verkligheten och där utvecklingen i den ljusare bilden mer korrekt har uppmätts till ungefär samma nivå
som efterföljande bilder. För denna bildsekvens har slutligen två mätningar gjorts där bilderna först omvandlats till gråskala enligt den metod som beskrivits tidigare. Figur 12a och figur 12b visar resultatet
av detta. Bara den första metoden visas då den andra metoden inte är tillämpbar i gråskala.
(a) Gråskala, ingen normalisering
(b) Normalisering 1
Figur 12: Jämförelse normalisering i gråskala
Då bilderna är i gråskala (det vill säga RGB-värden lika stora) är måttenheten nu ett värde mellan
0-255 som anger bildpunktens ljusstyrka. Resultatet av en mätning i gråskala utan normalisering är inte
oväntat nästan identiskt (så när som på den förändrade skalan) med en mätning av euklidiskt avstånd.
15
Normalisering enligt den första metoden har till skillnad från fallet med färgbilden lett till bra resultat.
Den fjortonde bilden ligger fortfarande på ett lägre värde, men skillnaden är nu endast två enheter. För
det här arbetet har de två metoderna testats mer utförligt på färgbilder, eftersom förändringen sker i
färg.
4.4
Lokalisering av mätområde
Vikten av att kunna lokalisera och uppskatta storleken på mätområdet diskuterades tidigare. Detta är
alltså önskvärt av två anledningar: för att undvika att mäta i mittenområdet där en urholkning kommer
ske, och för att undvika att fördelningen mellan ljusa och mörka bildpunkter ändras, vilket gör mätningen
ostadig. Det ringformade mätområdet bör passas in på provet så att dess ytterkant ligger nära provets
ytterkant, och så att dess mittpunkt är fixerad på provets mittpunkt. Ett dåligt inpassat mätområde
visas i figur 13a, där mätområdet fixerats till bildens mittpunkt (observera att bilderna är beskurna och
centrerade på filterpapperet), ett mätområde vars mittpunkt uppskattats för varje bild visas i figur 13b
och en jämförelse i mätresultat visas i figur 14. Mätresultatet har påverkats kraftigt.
(a) Mittpunkt fixerad vid bildens mittpunkt
(b) Mittpunkt uppskattad
Figur 13: Förskjutning av mätområde
(a) Fixerat mätområde
(b) Uppskattat mätområde
Figur 14: Jämförelse mätresultat
I det här arbetet har några metoder för att åstadkomma en bra uppskattning testats, men den slutliga
implementationen innehåller en enkel variant som ändå fungerar förhållandevis väl. Det första steget i
att hitta mätområdet har varit att bestämma vad som skiljer detta område mot resten av bilden. Ett
förenklade antagande som gjorts är att det urklippta provet befinner sig inom ett kvadratiskt sökområde
i varje bilds mitt. Inom detta område bör det i övrigt helst inte ligga några objekt. För att nu kunna
hitta provet användes ett tillvägagångssätt liknande hur mätmetoden togs fram.
Först har flera bildsekvenser tagits där bakgrunden varierats, och där även belysningen varit annorlunda.
16
Därefter har de särdrag i färg som bör vara unika för provet utnyttjats, det vill säga att bildpunkternas
färg ska ligga i närheten av blått. Det visade sig vara viktigt att det finns marginaler för vad som
ska räknas som blått, då olika ljusförhållanden har stor påverkan. Av denna anledning har samma
normaliseringar som beskrevs i avsnittet om normalisering av ljus använts (den implementation som
visade sig fungera bäst och som använts är den som kallats max-RGB).
Då mätmetoden behandlar bilden i färgsystemet HSV har detta använts även här (för euklidiskt avstånd
i RGB hade ett mått i RGB lika lätt kunna använts). I det första steget i att hitta mätområdet, som
är en binär segmentering mellan bildpunkter som tros tillhöra provet och bildpunkter som inte gör det,
används alla tre kanaler (efter normalisering). Färgnyans (H) används för att hitta bildpunkter med en
blåaktig färgning (färgen ligger på ett intervall mellan turkos till en ren blå, till en mer lila färgning, vilket
har satts till minst 160◦ och högst 255◦ ). Ett krav på färgmättnad och ljusstyrka används för att inte
matcha bildpunkter som är i gråskala eller för mörka (exakta siffror för implementationen: färgmättnaden
måste vara minst 40%, ljusstyrkan måste vara minst 50%). Provet antas vara tillräckligt belyst. Figur
15 och figur 16 visar denna segmentering före respektive efter den applicerats på några bilder tagna med
olika bakgrund.
I kodstyckena för uppskattning av mittpunkt och radie på provet (visas senare i algoritm 6 och 7)
markeras segmenteringssteget med anropet “match color”. Anledningen till detta är att den inte görs som
ett separat försteg för hela bilden, utan bara sker för relevanta bildpunkter. I “match color” kontrolleras
om komponenterna ligger på intervallen ovan.
Figur 15: Innan segmentering
Figur 16: Efter segmentering, och uppskattning av mittpunkt
När en lämplig segmentering av bilden gjorts återstår att faktiskt identifiera mätområdet och att uppskatta dess mittpunkt och storlek. Ett sätt att göra detta är använda någon slags blobdetection, det vill
säga en algoritm som identifierar områden baserat på någon gemensam egenskap. Om en binär segmentering som den som visats ovan först gjorts, skulle en sådan egenskap kunna vara ”sammanhängande
områden av vita bildpunkter”. Då mätområdet utgör ett kluster och inte ett sammanhängande område
skulle ytterligare processering krävas. Exempelvis skulle en floodfill-algoritm (en algoritm som hittar
områden som är helt omslutna) kunna användas för att fylla hålen i klustret, och någon slags blur eller
utsmetning skulle kunna appliceras för att fylla de luckor i utkanten av provet som inte är omslutna av
vita bildpunkter.
För det här arbetet har en enklare metod prövats. Metoden för att hitta provets mittpunkt går ut på
att räkna ut den genomsnittliga positionen för en vit bildpunkt. Om de vita bildpunkter som utgjorts
av pigmenten på filterpapperet kan antas vara någorlunda jämt fördelade, och att färgutvecklingen sker
cirkulärt, kommer den här punkten att vara fläckens mittpunkt (denna punkt kan ses som klustrets
17
”tyngdpunkt”). Effektiviteten av detta beror helt på hur segmenteringen gjorts, och emedan vissa prov
har visat sig vara problematiska då mittpunkten förskjutits av exempelvis en skugga eller att filterpapperet böjts, har fixeringen visat sig vara väldigt bra, med en förskjutning på bara ett par enstaka
bildpunkter under en hel bildsekvens.
För att sedan uppskatta en radie expanderas en cirkel stegvis i den upphittade mittpunkten, och i
varje steg kontrolleras andelen vita punkter som befinner sig i cirkelns ytterområde. Idén är att varken
bakgrunden eller den del av filterpapperet som inte påverkats av provet kommer innehåll några matchande
bildpunkter. När detta område inte längre innehåller en stor andel vita bildpunkter avbryts sökningen
och radien från den tidigare iterationen används. De två metoderna för lokalisering och uppskattning av
storlek av mätområdet visas i algoritm 6 och 7.
Algoritm 6 Lokalisering av mätområdet
center coord ← (0, 0)
match count ← 0
for every pixel in image do
if match color(pixel) then
center coordx ← pixelx
center coordy ← pixely
match count ← match count + 1
end if
end for
if match count 6= 0 then
center coordx ← center coordx /match count
center coordy ← center coordy /match count
else
error()
end if
Algoritm 7 Uppskattning av storlek på radie
tolerance ratio ← 0.82
min radius ← 100
max radius ← 460
step size ← 60
size ← 40
for inner radiusinrangemin radius + step size to max radius
withstepsizestep size do
outer radius = inner radius + size
for pixelinsideannulus(center, inner radius, outer radius do
if match color(pixel) then
match count ← match count + 1
end if
count ← count + 1
if match count/count < tolerance ratio then
return inner radius − step size
end if
end for
end for
return max radius
Ett annat alternativ som betraktades var att göra en segmentering baserat på ljusstyrkan (bilden behandlas i gråskala). I samtliga bildsekvenser avskärmas salivprovet av de vita ytorna på filterpapperet,
vilket kan utnyttjas. Denna metod visas i figur 17. Här har båda filterpapperen segmenterats identiskt,
medan de olika bakgrunderna inte gjort det. Dessutom är några skuggor och förmörkningar tydliga. För
18
att utnyttja den här segmenteringen skulle ett filter kunna användas för att släta ut salivprovet, som
sedan kan hittas med en algoritm för att identifiera cirklar (till exempel med Houghtransformering, vilket finns implementerat i Matlab och bibliotek för bildbehandling, som exempelvis OpenCV). Ett annat
alternativ är redan innan segmentering sker ta hänsyn till särdrag som observeras i bilden (exempelvis
genom att granska närliggande bildpunkter).
Figur 17: En annan segmentering
4.5
Val av jämförelsevärde
Ett krav på den mobilapplikation som arbetet utmynnar i är att mätningar ska kunna jämföras med
varandra. Av den här anledningen måste ett jämförelsebart värde (eller värden) kunna räknas ut baserat
på varje mätning, och det här värdet bör väljas så att det inte är beroende på de förutsättningar som
rådde när mätningen gjordes. Mätvärdena för varje bild (togs upp i ”Val av mått på färgutveckling”) är
en förändring i ett genomsnittsvärde. För att kunna jämföra dessa genomsnitt är det givetvis viktigt att
de har räknats ut över mätområden som passar in på provens storlek. Överskattas mätområdet för ett
prov riskeras ett för lågt genomsnitt, och vice versa. Mätvärdet kan inte heller vara något absolut värde,
då ljusförhållanden är olika för olika mätningar.
Jämförelsevärdet som har använts i den här implementationen är hastigheten på färgutvecklingen (ett
genomsnitt) för de tre bilderna som följer direkt efter de första två. Motiveringen till att vänta två bilder
är för att provet ska hinna spridas. I de efterföljande tre bilderna har sedan den snabbaste ökningen
observerats för de flesta mätningar, varpå ökningen sakta avtar. Ett alternativ som betraktats är att som
separat försteg hitta den kurva som bäst beskriver färgutvecklingen (exempelvis i minstakvadratmening),
och därefter avläsa skillnad i färgutveckling. Alternativt skulle koefficienterna kunna utnyttjas.
4.6
4.6.1
Implementation av mobilapplikation
Tillvägagångssätt
Det sista steget i arbetet har varit att implementera mätmetoden och dess ingående delar i en mobilapplikation. Det tillkommer också funktionalitet för att kunna styra mobilapplikationen och göra den
användbar för en användare utan särskilda förkunskaper. Implementationen har gjorts för operativsystemet Android och är således skriven i Java. Tillvägagångssättet för utvecklingen har varit att dela upp
mobilapplikationen i mindre delar. Då den datamängd som använts i arbetet har skapats med hjälp av
en existerande mobilapplikation som låter användaren ta sekvenser av bilder, har det första steget varit
att implementera den här funktionaliteten med (minst) lika god tidsupplösning och bildkvalitet.
Det andra steget har varit att implementera mätmetoden i sig (det vill säga justering för ljus, mått av
färgutveckling och lokalisering av mätområdet). För att göra detta utformades mätalgoritmen så att den
båda kan appliceras på bilder som redan är sparade på minneskortet, och även bilder som matas direkt
från kameran i form av en databuffer. Anledningen till detta var för att kunna testa mätalgoritmen på
bildsekvenser som mätvärden redan räknats ut för. På så sätt kunde verifieras att implementationen
gav samma resultat (givet samma datamängd). Det tredje och sista steget var implementera ett enkelt
gränssnitt som låter användaren göra egna mätningar, samt att kunna visualisera resultatet av dessa. I
samband med detta sista steg testades applikationen också som helhet.
19
Det övergripande upplägget för mobilapplikationen kunde i stora drag delas upp i tre delar: gränssnittet,
sekvenstagning av bilder samt mätalgoritmen. Gränssnittet delades upp så att varje vy (en skärm i
applikationen) motsvaras av en klass placerad i en egen källfil. Totalt fem vyer skapades: en huvudmeny, en vy för inställningar, en för att göra en ny mätning, en för att visa en slutförd mätning samt
en för att visa sparade mätningar. I dessa klasser har sedan den tillgörande funktionalitet för att hantera användarinteraktion implementerats. Från huvudmenyn startas endast de andra vyerna, från inställningar tillåts användaren ändra och spara inställningar, och de två vyer som visar resultat hämtar
dessa från minneskortet (sparade mätningar) respektive som argument (från en slutförd mätning). Det är
endast vyn för att starta en ny mätning som beror på flera andra klasser som inte tillhör Androids API.
Dessa är en klass med statiska metoder för att analysera bilderna, en klass för tagning av en bildsekvens
samt en specialiserad underklass som är till för att applicera mätmetoden i takt med att bilderna tas.
4.6.2
Sekvenstagning av bilder
För sekvenstagning av bilder fanns två krav: att bilderna ska kunna tas med samma tidsupplösning som
använts för att skapa den ursprungliga datamängden, och att bildupplösningen dessutom ska vara lika
hög. Ingetdera av kraven var något problem när intervallet är minst 1-2 sekunder. Den begränsande
faktorn i det här fallet visade sig vara användningen av autofokus. Avståndet för fokus går däremot både
att ställa in i förväg, eller endast justera efter enstaka bilder. I implementationen används autofokus för
varje bild, då det relativt långa intervallet mellan bilder som använts (4 sekunder) medger tid för detta.
Automatisk vitbalans avaktiveras då detta lett till större skillnader i ljusförhållanden mellan varje bild.
Detta visade sig på de bildsekvenser som tagits på nära håll i vitt ljus, och där hela bilden sedan färgats
blått, som om detta vore ljusets färgning. Angående bildformat stödjer senare versioner av Android
användning av RAW, men i den här implementationen har det äldre API:t använts (bilder är redan i
JPEG när de hämtas från kameran) för att bilderna ska vara precis lika de som använts i datamängden.
4.6.3
Implementation av mätalgoritm
Den färdiga mätalgoritm som implementerats består av mätning av färgmättnad enligt HSV (se algoritm
1), den normalisering som visas i pseudokod i algoritm 4 (avsnitt ”Normalisering av ljus”), samt den
metod för lokalisering av mätområdet som visas i algoritm 6 (rubrik ”Lokalisering av mätområdet”).
Kravet på implementationen av dessa steg har varit att allt ska kunna köras parallellt med sekvenstagningen av bilder. Helst ska mätningen av varje bild vara klar redan innan nästa bild tas, på så sätt är
hela mätningen klar direkt när bildsekvensen avslutats.
Tidsåtgången för att analysera en bild får alltså vara högst fyra sekunder. De valda algoritmerna för normalisering av ljus, lokalisering av mätområdet samt mätning är inte kostsamma beräkningsmässigt. Normalisering av ljus och mätning av färgutveckling kan båda ske med endast en genomgång av sökområdet
i bilden (linjär tid), vilket för de storlekar som använts för sökområdet motsvarar ungefär 500 000 bildpunkter. För dessa bildpunkter sker sedan bara primitiva operationer.
Algoritmen har, precis som resterande delar av mobilapplikationen, implementerats i Java. För att klara
tidskravet på körtiden gjordes några smärre optimeringar när koden från Python flyttades över. Den
ursprungliga körtiden för att analysera en bild var över 60 sekunder, men reducerades sedan till kravet
på under 4 sekunder per bild (den exakta körtiden är givetvis beroende på hårdvaran). De förändringar
som krävdes var bland annat att minimera antal funktionsanrop som skedde per pixel. Bitmapsbilder
i Android kan exempelvis behandlas genom metoder för att hantera enstaka bildpunkter åt gången
(GetPixel, SetPixel). Att anropa dessa metoder för varje bildpunkt medför enorm overhead, varför större
delar av bilden bör läsas åt gången (GetPixels, data för bildpunkter ligger dessutom sekventiellt, så en
kopiering går också snabbt), varpå det kopierade bilddatat kan indexeras i.
Även enklare metoder visade sig medföra stort overhead. Exempel på detta är de getter-metoder för att
plocka ut en R, G eller B från en färg angiven som ett heltal (Color.red, Color.blue, Color.green). Dessa
metoder är statiska och använder bara en bitmask för att plocka ut bits 0-3, 4-7, och 8-11 för R, G och
20
B respektive, men metodanropen kunde bevisligen inte expanderas på plats då de ökade körtiden med
flera sekunder när de användes per bildpunkt. På samma sätt har metoder för omvandling från RGB till
HSV (Color.colorToHSV eller Color.RGBToHSV) undvikits i förmån för en egen implementation som
placerats direkt på de ställen där den krävts.
Dessa förändringar var tillräckliga, men om så inte hade varit fallet eller om de vidareutvecklingar som
föreslagits skulle behöva implementeras, skulle mätmetoden fördelaktigen kunna göras med Android
NDK. Detta gör det möjligt att både använda externa bibliotek och att låta delar av ens applikation
kompileras till maskinkod istället för bytekod (mellanliggande kod som tolkas av Javas virtuella maskin).
Ett exempel på ett relevant externt bibliotek är OpenCV, som har funktionalitet för bildanalys och
datorseende. Detta har däremot inte varit nödvändigt för den här implementationen. Hela mätmetoden
och mobilapplikationens övriga funktionalitet är implementerad i Java.
Bildsekvenser sparas på minneskortet i egna kataloger namngivna med tidsstämpel för den tidpunkt då
mätningen påbörjades. Varje enskild bild namnges också med en tidsstämpel, så att mätningar kan upprepas. Bildsekvenserna är däremot bara tänkta att sparas som del av felsökning. Resultatet av mätningar
sparas i separata filer i samma katalog som bildsekvensen vore sparad i. För att spara resultatet har ett
CSV-format använts (det vill säga kommaseparerade värden i textformat) där varje värde motsvarar
mätdata för en bild i sekvensen. Varje värde är dessutom tudelat och separerat med ett kolon; först
ligger en tidsstämpel i millisekunder för då bilden togs, sedan den uppmätta färgen för denna bild.
Jämförelsevärdet sparas också textuellt i en separat fil.
4.6.4
Gränssnitt och visualisering av resultat
Gränssnittet bygger på en huvudmeny där alla applikationens funktioner endast ligger ett steg från menyn. För att skapa gränsnittet användes Androids vanliga gränssnittskomponenter. För att visualisera
resultatet av mätningar i form av grafer behövdes däremot extern funktionalitet, och ett externt bibliotek vid namn GraphView (www.android-graphview.org) har använts till detta. Dessa grafer användes
sedan både för att visa resultatet när en mätning slutförs samt för att visa sparade jämförelsevärden.
Gränssnittet och en användarmanual redovisas under resultat.
5
5.1
Resultat
Mätmetod
De mätningar som gjorts har visat att både förflyttning av kameran och påverkan från ljus har haft
negativ påverkan på mätresultaten. För att komma runt dessa problem uppskattades provets mittpunkt
och radie, och några metoder för normalisering av ljus undersöktes. Den mätmetod som implementerats i
mobilapplikationen har därför tre ingående delar: ett mått på avstånd i färg, en metod för normalisering
av bildsekvenser, samt en metod för lokalisering och uppskattning av mätområdet. Utöver detta krävdes
också ett sätt att jämföra mätningar med varandra, varför ett sätt att räkna ut ett jämförelsevärde också
sökts.
5.1.1
Mått på avstånd i färg
Två mått på färg utreddes mer ingående i arbetet: euklidiskt avstånd i RGB och mätning av färgmättnad
i HSV. Mätning i euklidiskt avstånd har visat sig fungera väl för de flesta prov, men två problem har
observerats. Det första är att en förflyttning av mätområdet kan leda till att mätningen blir mer instabil,
det vill säga att det uppmätta värdet från varje bild varierar mer än vad mätning av mättnad gör (kurvan
som visar färgutvecklingen får fler toppar och dalar). Precis som konstanterats tidigare beror detta på
att det inom mätområdet fortfarande kan vara stor skillnad på bildpunkters färg. De bildpunkter som
från början varit starkt färgade (de som representerar en prick på filterpapperet som innehåller pigment)
21
fortsätter att vara mörka under större delen av en mätning, medan de områden som från början var vita
fortsätter att vara jämförelsevis ljusa. Det här leder till att en förflyttning av mätområdet, exempelvis
som följd av att identifieringen av provets mittpunkt inte varit helt perfekt, gör att fördelningen ljusa
och mörka punkter påverkas.
Det andra problemet är att saliven som droppats på provet orsakar en förmörkning i färg. När saliven
sedan spridits och absorberats av filterpapperet minskar effekten av detta, allt medan bildpunkterna
färgas mot blått. I avstånd i RGB (från antingen vitt eller blått) ses detta alltså som först en minskning,
och därefter en ökning.
Om färgutveckligen istället mäts i färgmättnad enligt hur det är definierat enligt HSV reduceras effekten
av både dessa problem. Förmörkningen orsakar ingen ökning i färgmättnad, och avståndet mellan de
ljusa och de mörkare bildpunkterna minimeras också (detta då bildpunkterna till största del skiljer i V).
Detta tillåter att mätområdet förflyttas utan att resultatet påverkas fullt lika mycket.
5.1.2
Ljusförhållanden och normalisering
De variationer i ljusförhållanden som förekommit ser ut att gå att kompensera med goda resultat. Den
mest förekommande variationen i ljus har varit skillnader i ljusstyrka mellan olika bilder ur samma
bildsekvens. Detta har ofta skett till följd av att kamerans position bara justerats lite, eller att bakgrundsljuset förändrats. Effekten av detta har varit att mätvärden från de drabbade bilder förskjutits
(graferna för dessa mätningar har exempelvis flera lokala minimum). Trots dessa variationer i mätvärden
har en ökning kunnat uppmätas över hela bildsekvensen.
Färgning av ljus mellan bilder i samma bildsekvens har inte förekommit i mer än enstaka mätningar,
och för dessa har det sannolikt orsakats av att kameran använt automatisk vitbalans. Detta har däremot
kunnat kunnat kompenseras för, trots att en förändring i färg – den vi vill mäta – faktiskt ska förekomma.
Något betydligt mer förekommande har varit skillnad i färgning mellan olika bildsekvenser (olika mätningar),
vilket har skett till följd av att olika ljuskällor funnits och att filterpapperet placerats på olika bakgrunder.
Detta har delvis kompenserats för genom normaliseringen baserat på maxvärden, men en mer noggrann
utvärdering återstår.
5.1.3
Förflyttning av kameran och lokalisering
Förflyttning av kameran visade sig vara den faktor som hade störst negativ påverkan på mätningar.
Om mätområdet förskjuts riskerar det helt eller delvis att hamna utanför salivprovet, med resultat
att det uppmätta värdet för bilden ofta blir lägre än vad sig bör (bildpunkter som inte påverkats av
färgningen räknas med i genomsnittet). Mätområdet kan också förskjutas men fortfarande befinna sig
inom salivprovet där färgningen skett. Detta påverkar som tidigare påpekat också resultatet då andelen
mörka och ljusa bildpunkter förändras.
Av dessa anledningar är en lokalisering av mätområdet nödvändig. För att uppskatta provets mittpunkt och dess storlek (radie) användes en enkel metod där bilderna segmenterades efter färgintervall.
Mittpunkten bestämdes till medelvärdet av de matchande bildpunkternas koordinater, och radien uppskattades genom att expandera en cirkel. Mätningar som har gjorts med dessa metoder har visat sig
fungera med några smärre problem.
Ett litet problem som observerades tidigt var att det är särskilt svårt att hitta provets storlek innan en
tydlig färgning har skett. Det här kan lösas genom att radiens storlek uppskattas först ett antal bilder in
i varje bildsekvens (när ett intervall på ett par sekunder mellan varje bild har använts), och en färgning
har uppstått. Mittpunkten kan däremot ändå hittas då klustret från segmenteringen är tätare vid provets
mitt. Om fördelningen av matchande bildpunkter påverkats av små förvrängningar som att det urklippta
filterpapperet vikts eller böjts (så att en del av det är upphöjt), kan detta dock vara tillräckligt för att
förskjuta mittpunkten. Mätningar har visat att mittpunkten trots detta kommer fixeras bra, även om
22
den felplacerats.
Ett betydligt större problem som den valda metoden för segmentering visade sig ha var svårigheten
att matcha en färg om en färgning av hela bilden skett (det vill säga en påverkan på alla bilder i
bildsekvensen). Ett exempel på detta är den tredje bilden i figur 17. Den här bilden har liknande bakgrund
som den andra bilden i figur 15, men på grund av en liten skillnad i ljus faller både de färgade pigmenten
och färgningen i fläcken helt utanför det förhållandevis generösa intervall som använts för att matcha
färgen. Efter segmentering matchas inga bildpunkter, och uppskattning av varken mittpunkt eller radie
kan ske.
5.1.4
Jämförelsevärde
Jämförelsevärde i det här arbetet har valts till skillnaden i uppmätt färgmättnad mellan den tredje och
sjätte bilden i mätningen. Lämpligheten med detta har inte utretts, då vad som är lämpligt är beroende
på vad som ger upphov till den färgutvecklingen som mäts (det vill säga nivån alfa-amylas). Måttet
borde därför väljas med detta i åtanke, och inte enbart efter den observerade färgutvecklingen. Detta
behandlas kort i diskussionen, men ligger utanför det här arbetets omfång.
5.2
Mobilapplikation
Mobilapplikationen som implementerats som sista steg i arbetet tillåter en användare att göra likadana mätningar som visats i de tidigare avsnitten. Utöver att visa färgutvecklingen används också de
jämförelsevärden som räknas ut från varje mätning. Det mått på färgavstånd som används är färgmättnad
enligt definitionen i HSV, normaliseringen är den som bygger på maxvärden i varje bild (visades i algoritm 4) och för lokaliseringen används färgmatchning. Dessa metoder har diskuterats i respektive avsnitt
och tas även upp i nästa avsnitt om diskussion och vidareutvecklingar.
Applikationen är enkelt utformad och är byggd runt en enda huvudmeny. När applikationen startas
möts användaren av denna huvudmeny. Här finns alternativ för att starta en ny mätning, visa sparade
mätningar eller komma åt inställningar. Huvudvyn har även en kort text som beskriver hur en mätning
kan göras. Figur 18a visar huvudmenyn och figur 18b visar vyn för inställningar.
(a) Huvudvy
(b) Inställningar
Figur 18: Huvudvy och inställningar
Om användaren från huvudmenyn väljer att göra en ny mätning öppnas en förhandsvisning av mobiltelefonens primära kamera (det vill säga kameran på baksidan av telefonen, riktad bort från användaren),
vilket visas i figur 19a. Det finns även en knapp för att påbörja och avbryta en mätning. När en mätning
påbörjas visas detta genom att ”start”-knappen byts mot en ”stopp”-knapp och en text vid skärmens
mitt talar om hur många bilder som har tagits och hur många som återstår. När mätningen slutförs visas
23
resultatet i en vy som den i figur 19b. Grafen visar den uppmätta färgutvecklingen över bildsekvensen
och det uträknade jämförelsevärdet visas ovanför denna. Denna vy visas också om användaren väljer att
avbryta mätningen, men bara om tillräckligt många bilder tagits för att ett jämförelsevärde ska kunna
räknas ut. Om så inte är fallet avbryts mätningen och förhandsvisningen av kameran visas fortfarande
så att användaren kan försöka igen.
Den sista vyn i mobilapplikationen nås genom menyalternativet för sparade mätningar och visas i figur
19c. Här visas de sparade jämförelsevärden för tidigare mätningar i en graf liknande den som syns i figur
19b. I den här figuren visas bara fallet när en mätning gjorts, vilket syns som att positionen för origo
ligger på detta värde. När flera mätningar gjorts ser grafen ut som den för en slutförd mätning.
(a) Pågående mätning
(b) Slutförd mätning
(c) Sparade mätningar (ett resultat)
Figur 19: Mätningar
Mobilapplikationen finns tillgänglig som källkod och i kompilerad i en APK-fil. Installation kan ske
genom att filen kopieras till telefonens minneskort med USB-anslutning och sedan öppnas i telefonen
med en filhanterare. Alternativt kan filen laddas ner direkt till telefonen genom webbläsaren, i vilket
fall användaren förfrågas om applikationen ska installeras. När applikationen är installerad är den redo att användas utan konfiguration. När den startas och öppnas i helskärm bemöts användaren med
huvudmenyn.
För att utföra en mätning följer användaren stegen som visas i text i huvudmenyn. Det vill säga att
användaren först väljer alternativet ”Ny mätning”, och en förhandsvisning av den framåtriktade kameran
öppnas tillsammans med en knapp för att starta och stoppa en mätning. När denna vy har öppnats kan
salivprovet göras, och mätningen startas. Filterpapperet bör inte överskuggas partiellt, och hela ytan ska
helst vara välbelyst.
6
6.1
Diskussion
Metod
Metoden skulle kunna ha varit mer kritiskt utformad. Det övergripande upplägget har fungerat väl,
och det var en tämligen logisk uppdelning då vissa moment bör föregå de andra. Exempelvis bör en
datamängd existera innan någon form av analys kan göras.
Datamängden, som genererades som första led i arbetet, syftade till att täcka in de olika förhållanden
som skulle kunna tänkas råda vid användning av mobilapplikationen. Utifrån dessa mätningar skulle de
tekniska problemen kunna identifieras. Det visade sig däremot att vissa problem upptäcktes först när
arbetet var längre fortskridet, och implementationen av mobilapplikationen redan var påbörjad. Ett av
problemen var det faktum att det inte enbart var ljuskällornas som påverkade bildens färgning, utan
även bakgrunden visade sig ha betydelse. Ett annat problem var att om redan komprimerade bilder läses
från kameran, kan artefakter förekomma. Dessa hade liten påverkan men syntes i segmenteringen.
Anledningen till att dessa problem upptäcktes när implementationen redan påbörjats var att det nu gick
enklare att göra mätningar med mindre förberedelse, och bildsekvenserna kunde analyseras samtidigt
som de togs. På så vis speglade dessa sena mätningar de reella användningsscenarion mycket bättre,
24
där användaren vill göra en mätning utan att behöva rigga upp ett avskärmat område. Genom att ha
användningsområdet i större åtanke redan från början hade dessa problem kunnat identifieras tidigare.
6.2
Resultat och vidareutveckling
Det här arbetet har utrett hur man kan genomföra en mätning av en färgutveckling med hjälp av en
mobilkamera, och vilka tekniska problem som kan förekomma. Den resulterande mätmetoden har sedan
implementerats i en mobilapplikation. Mobilapplikationen är utformad för att låta en användare utan
större teknisk förmåga kunna genomföra en mätning under något så när kontrollerade förutsättningar.
Med detta menas att ytan runt det urklippta filterpapperet bör hållas tomt och välbelyst.
Den första frågan som behövde besvaras var hur en förändring i färg kan mätas, och detta utreddes
i avsnitt 4.2.1. Lämpligheten med de olika måtten behandlades i avsnitt 4.3, om ljusets påverkan. De
mått som testats klarade samtliga att uppmäta en förändring, och hur väl de presterade visade sig till
stora delar bero på hur bra normaliseringen gjordes. För mätning med euklidiskt avstånd motverkades
resultatet av den ursprungliga förmörkningen som saliven medförde, för att sedan mer konsekvent mäta
ökningen när saliven väl spridits.
För mätning av färgmättnad så som det är definierat enligt HSV fanns inte detta problem då saliv är
ofärgat, men däremot var det känsliga mot en färgning av hela bilden. Detta var inget problem efter att
bilderna justerats, och inte heller instabiliteten med HSV. Detta på grund av att endast färgmättnad
mätts, och ljusstyrkan och färgnyansen ska ha justerats av normaliseringen, i vilket fall deras värden
inte spelar in (endast vid matchning av färg hade detta medfört ett problem). Både euklidiskt avstånd
och mätning av färgmättnad har bedömts som lämpliga mått. Det alternativ som implementerades är
mätning av färgmättnad, just för att kunna starta mätningen direkt när saliven droppats.
De yttre faktorer som haft negativ påverkan har (precis som identifierat i frågeställningen), varit just
varierande ljusförhållanden och det faktum att kameran kan vara svår att hålla stadigt. Angående normaliseringen har väldigt enkla metoder kunnat kompensera för förändringar mellan bilder i en bildsekvens.
Den metod som implementerades i mobilapplikationen, och som fungerar enligt en väldigt enkel per
bild-praxis, kompenserar visserligen inte för stora ändringar i ljusstyrka, men klarade väl av att kompensera för ändringar som skett över tid i en bildsekvens, både när bilderna blivit färgade och när enbart
ljusstyrkan justerats (det vill säga en lika stor ökning eller minskning i samtliga färgkomponenter skett).
Detta faktum i kombination med bildernas enkla natur, att inga objekt läggs in eller tas bort mellan
bilder, visar att det är rimligt att en mer avancerad algoritm helt skulle kunna kompensera för ljus.
Inom datorseende är kraven på algoritmer givetvis högre eftersom scenerna är mer komplexa än de
har varit i det här arbetet. Här har det rört sig om ett enda intressant objekt som ligger nära bildens
centrum, och kraven har varit att färgerna dels kan hållas konstanta genom en bildsekvens, och dels att
bildsekvenser helst ska vara oberoende av ljusets färgning. För detta har väldigt enkla algoritmer visat
sig kunna röna acceptabla resultat, vilket ger goda förhoppningar om att mer utvecklade, existerande
metoder med framgång kan nyttjas.
Effektiviteten av normaliseringen skulle däremot behöva utredas med reproducerbarhet och precision i
större fokus för att få en idé om hur stora variationer som faktiskt är acceptabla. Normaliseringen i det
här arbetet har skett av två anledningar: att färg och ljusstyrka mellan bilder i bildsekvenser ska ligga
på en konstant nivå, och att mätningar i största möjliga mån bör vara oberoende av ljusets färgning. Att
utreda effektiviteten mellan bilder har varit enkelt, då det kan göras genom att enbart titta på skillnader
i färgning mellan varje bild, samt genom att jämföra mätningar gjorda under sämre förhållanden med
de gjorda under nära optimala förhållanden. Det har däremot varit svårare att sia om hur stort fel som
faktiskt är acceptabelt utan att känna till kopplingen till alfa-amylas. Av precis denna anledning har det
varit väldigt svårt att få ett hum om hur bra normaliseringen mellan bildsekvenser bör vara, och detta
är ett av de frågetecken som behöver rätas ut i en vidareutveckling av arbetet.
Den metod som använts för att lokalisera mätområdet lämnar mer att önska. När systemet testades som
helhet upptäcktes att det enkla tillvägagångssätt som använts var för naivt. En enkel färgmatchning
25
är inte tillräckligt för att hitta bildpunkter som kan tänkas ingå i provet, även om ett väldigt generöst
intervall används. När filterpapperet och bakgrundsytan är väl belysta fungerar det, men vid sämre
belysning eller om ljuset färgar ytan fungerar det betydligt sämre. Segmenteringen bör alltså inte baseras
på färgmatchning (en binär segmentering i bildpunkter som potentiellt tillhör filterpapperet och de som
inte gör det) utan borde baseras antingen på något annat gemensamt drag hos samtliga mätningar, som
exempelvis skillnad i ljusstyrka (filterpapperet har vita, ljusa områden som kommer skärma in fläcken
såvida provet inte upptar hela filterpapperet), eller ännu hellre genom en mer avancerad algoritm som
tar hänsyn till närliggande bildpunkter för att på så vis identifiera särdrag.
Det enkla tillvägagångssättet har använts på grund av tidsramarna, men en vidareutveckling bör däremot
kunna ske utan större svårigheter. Exempelvis kan man bygga vidare på den segmentering som visades
i figur 17. Det finns öppna bibliotek för datorseende och bildanalys som innehåller färdiga implementationer för den funktionalitet som skulle krävas för att få till en mer robust lokalisering av mätområdet.
Exempelvis skulle biblioteket OpenCV, som går att använda på Android, kunna användas för att göra
en riktig blob detection efter segmenteringen. Experiment i Matlab visade att det möjligt att identifiera
både salivprovet och det urklippta filterpapperet, och då OpenCV erbjuder samma funktionalitet skulle
det kunna portas till mobilapplikationen. Rent prestandamässigt borde det på Android vara realiserbart
att den här beräkningen också sker i realtid då det existerar liknande applikationer som rimligtvis är
tyngre beräkningsmässigt.
Mobilapplikationen implementerar den mätmetod som har beskrivits i arbetet, och innehåller utöver
denna funktionalitet för att ta en bildsekvens samt ett enkelt grafiskt användargränssnitt. Den uppfyller
de uppsatta kraven, men en naturlig vidareutveckling av den är att öka användarvänligheten. Exempelvis
skulle visualiseringen av tidigare mätningar kunna göras överskådligare. I nuläget används en graf för att
visualisera alla tidigare resultat (de jämförelsevärden som räknas ut), vilket bara visas ihop med datum
för mätningen. I en slutlig implementation där kopplingen alfa-amylas utretts skulle detta kunna utvidgas
med en möjlighet att namnge mätningar (exempel: ”morgon, efter uppstigning”, ”efter motionspass”, och
liknande). Det skulle också vara fördelaktigt att antingen ha flera vyer istället för en enda. Exempelvis
skulle en kalendervy kunna användas för att på ett mer intuitivt sätt visualisera vilka dagar som vilka
mätningar hör till.
En annan förbättring som skulle kunna leda till bättre mätningar är att låta användaren aktivt få
feedback redan när bilderna tas. Detta kan göras genom att rita upp markörer på den förhandsvisning av
kameravyn som existerar. Om bilden är för mörk, om provet inte kan lokaliseras eller om provet lokaliseras
fel, kan användaren genast justera detta innan nästa bild tas. I den nuvarande mobilapplikationen skippas
bilder där provet inte kan identifieras om det är i början av en bildsekvens, och därefter avbryts mätningen
om provet inte kan hittas i en senare bild.
En fråga som återstår och som inte belystes i det här arbetet är hur stark kopplingen mellan den uppmätta
färgutvecklingen och nivån alfa-amylas faktiskt är, och om precisionen som uppnås är tillräcklig. I det här
arbetet syftade reproducerbarhet på att mätningar gjorda under samma förhållanden skulle ge snarlika
resultat. Två problem kan identifieras här. För det första används ingen konkret definition på vilka
resultat som ska klassas som lika nog för att reproducerbarheten ska anses godtagbar, annat än att dessa
mätningar har varit betydligt mer lika varandra än mätningar gjorda vid andra tillfällen. För det andra
syftade reproducerbarheten bara på att undersöka variationer i de förhållanden under vilka mätningarna
gjordes, det vill säga från påverkan av yttre faktorer.
Visserligen har utspädda prov använts för att kunna uppmäta olika resultat, men kopplingen mellan
dessa prover och de outspädda proverna har inte undersökts, även om flera observationer gjordes. Vissa
aspekter var rent tekniska: bland annat observerades att de utspädda proverna spreds snabbare då de var
mindre trögflytande, vilket ledde till en snabbare förmörkning av mätområdet innan färgningen uppstod.
Precis som noterades i avsnitten om lämplig mätmetod ledde detta till att mätningar blev lite svårare,
trots att det var ett överkomligt problem.
Å andra sidan visades de utspädda proverna ha en färgutveckling som mattades av snabbare, och detta
fenomen är högst intressant när färgutvecklingen ska kopplas till nivån alfa-amylas i salivproverna. Detta
undersöktes inte då arbetet är koncentrerat på de tekniska aspekterna med mätning av en färgutveckling,
26
men för att realisera idén att använda en mobilbaserad lösning med uttryckt syfte att mäta nivån
alfa-amylas (så som den korrelerar med färgutvecklingen) är detta givetvis något som måste utforskas
ingående. När detta är gjort är det enklare att besvara huruvida precisionen är tillräckligt bra.
6.3
Slutsats
Det här arbetet har undersöka möjligheten att med hjälp av en mobilbaserad mätmetod kunna uppmäta
en färgutveckling, samt undersökt vilka svårigheter som finns. Resultatet har implementerats i form av
en mobilapplikation till operativsystemet Android. Arbetet har visat att en mobilkamera mycket väl kan
användas för att utföra mätningar på ett konsekvent sätt. De faktorer som haft störst negativ inverkan
på mätningar har, precis som förutspåtts, visat sig vara förändringar i ljus och de mindre förflyttningar
av den handhållna kameran som förekommer när en bildsekvens tas. I implementationen av mobilapplikationen har dessa problem lösts med enkla metoder som ändå kunnat röna positiva resultat. För en slutlig
implementation bör dessa metoder däremot förbättras ytterligare, särskilt lokaliseringen av mätområde
bör göras mer pålitlig. Detta bedöms däremot som väldigt görbart, och konkreta vidareutvecklingar för
att lösa dessa problem har föreslagits i föregående avsnitt. Det bör också konstateras att precisionen av
mätningarna bör utredas med kopplingen till nivån alfa-amylas i åtanke, då detta är av stor vikt för det
slutliga syftet med mobilapplikationen.
27
Referenser
[1] Agoston, Max (2005), Agoston, Max K. (2005). Computer Graphics and Geometric Modeling: Implementation and Algorithms, London, s. 303
[2] Barnard, Kobusm.fl. (2002), “A Comparison of Computational Color Constancy Algorithms — Part
I: Methodology and Experiments With Synthesized Data”: IEEE Transactions on Image Processing,
nr 9, s. 972-984
[3] CIE (2004), “Colorimetry”: CIE Technical Report, 3:e utgåvan, s. 16-17
[4] Fairchild, Mark D.(2013), Color Appearance Models, John Wiley & Sons, 3:e utgåvan, s. 19-21, 26-27,
85-91, 179-180
[5] Fisher, R. B. (1999), Change Detection in Color Images, Division of Informatics, Edinburgh University
[6] Gevers, Theo m.fl. (2012), Color in Computer Vision: Fundamentals and Applications, John Wiley
& Sons, s. 13-16, 38, 143-146
[7] Ibraheem, Noor A. (2012), “Understanding Color Models: A Review”: ARPN Journal of Science and
Technology, nr 3, s. 265-274
[8] Obayashi, Konen (2013), “Salivary mental stress proteins”: Clinica Chimica Acta, nr 425, s. 196-201
[9] Ulf Dahlström, Ingemar Lundström, m.fl (2012), “Colorimetric detection of saliva amylase activity
as a general health marker”
[10] Pascale, Danny (2003), “A Review Of RGB Color Spaces”, s. 6-7
[11] Stokes, Michael (1996), “A Standard Default Color Space for the Internet - sRGB”, http://www.
w3.org/Graphics/Color/sRGB, hämtad 23-02-2015
[12] Bild, “Visible spectrum”, http://cnx.org/content/col11496/1.6/, hämtad 23-02-2015
[13] Bild, “Autumn leaves”, Albert Bridge,
https://commons.wikimedia.org/wiki/File:Autumn_leaves,_Dixon_Park,_Belfast_%282%
29_-_geograph.org.uk_-_1007172.jpg#mediaviewer/File:Autumn_leaves,_Dixon_Park,
_Belfast_%282%29_-_geograph.org.uk_-_1007172.jpg, hämtad 23-02-2015
28
Fly UP