Visualisering av plackdistribution i atherosklerosisk aorta - CSC

Visualisering av plackdistribution
i atherosklerosisk aorta
Anpassning av bilder på blodkärl med hjälp av deformerbara kurvor
CHRISTOFFER
SABEL
Examensarbete
Stockholm, Sverige 2006
Visualisering av plackdistribution
i atherosklerosisk aorta
Anpassning av bilder på blodkärl med hjälp av deformerbara kurvor
CHRISTOFFER
SABEL
Examensarbete i datalogi om 20 poäng
vid Programmet för datateknik
Kungliga Tekniska Högskolan år 2006
Handledare på CSC var Mårten Björkman
Examinator var Jan-Olof Eklundh
TRITA-CSC-E 2006:032
ISRN-KTH/CSC/E--06/032--SE
ISSN-1653-5715
Kungliga tekniska högskolan
Skolan för datavetenskap och kommunikation
KTH CSC
100 44 Stockholm
URL: www.csc.kth.se
Sammanfattning
Inom medicinsk forskning behöver man ibland analysera bilder för att utvärdera vilket
resultat ett experiment gav. Det kan göras på två sätt, antingen kan en kunnig person
titta på en bild och göra ett utlåtande, eller så kan ett datorprogram analysera bilden.
Det sista alternativet kräver att egenskaper hos bilderna kan identifieras och kvantifieras.
Det här Examensarbetet undersöker hur ett verktyg, datorprogram, kan konstrueras för
att underlätta analys av en grupp provbilder på plackdistribution i atherosclerotisk aorta.
Viktiga frågor för ett sådant verktyg är, vilken funktionalitet behövs? Vad går att genomföra
med tillräcklig precision? Vilka hinder måste övervinnas? Examensarbetet avslutas med en
genomgång av resultaten, samt förslag på utveckling av metoder för att förbättra dessa.
Imaging of plaque distribution in atherosclerotic aorta
Adaptation of images of blood vessels with deformable curves
Abstract
Within medical research there is sometimes a need to analyse images to evaluate the
result of an experiment. This can be done in two ways, either a knowledgable expert examines the image and gives an opinion, or a computer program can be used to analyse the
image. The latter alternative requires that image features can be identified and quantified.
This Master Thesis will examine how a tool, computer program, can be developed to facilitate the analysis of a group of sample images of plack distribution in atherosclerotic aorta.
Important questions for such a tool are, what functionality is needed? What is plausible
to accomplish with sufficient precision? What obstacles must be overcome? The Master
Thesis is concluded with an overview of the results, and proposals for further developments
to improve them are presented.
Innehåll
1 Inledning
1.1 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Verktyg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Rapportens uppbyggnad . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
2
3
2 Projekt
2.1 Hypotes . . . . . . . . .
2.2 Beskrivning . . . . . . .
2.2.1 Tekniska detaljer
2.3 Arbetsförfarande . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
6
7
3 Utförande
3.1 Utvecklingsmiljö . . .
3.2 Projektlösning . . . .
3.2.1 Databas . . . .
3.2.2 Bildanpassning
3.3 Utvärdering . . . . . .
3.3.1 Modell . . . . .
3.3.2 Intensitetskarta
3.4 Framtida arbete . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
12
12
13
17
17
18
18
. . .
. . .
. . .
. . .
. . .
. . .
. . .
bild
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
29
29
30
30
30
32
33
35
36
37
38
41
.
.
.
.
.
.
.
.
4 Bildbehandling
4.1 Definition av en bild . . . . . . . . .
4.2 Faltning . . . . . . . . . . . . . . . .
4.2.1 Definition av ett filter . . . .
4.2.2 Faltning i en dimension . . .
4.2.3 Faltning i två dimensioner . .
4.2.4 Filter i två dimensioner . . .
4.3 Lokalisera kanter . . . . . . . . . . .
4.3.1 Egenskaper hos derivatan i en
4.4 Segmentering . . . . . . . . . . . . .
4.5 Deformerbara kurvor . . . . . . . . .
4.5.1 Multigrid . . . . . . . . . . .
4.6
4.7
4.8
Delaunay triangulering . . . . . . . . . . . . . . . . . . . . . . . . . .
Bilinear filtrering . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sammanfattning . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
44
45
5 Sammanfattning
51
Litteraturförteckning
53
A Ordlista - Medicin
55
B Ordlista - Dator
57
Kapitel 1
Inledning
1.1
Bakgrund
Examensarbetet har sin grund i studier av åderförkalkning [6] en sjukdom som sker
i artärer. Fokus har legat på att utreda huruvida inlagring i kärlväggen sker på
specifika områden till skillnad mot en jämn fördelning. Arbetet går ut på att skapa
ett verktyg som ska kunna användas för att underlätta analysen av resultaten för
ett projekt på Karolinska Institutet om atheroskleros1 .
Atheroskleros är en komplex sjukdom som drabbar systemkretsloppets [5] stora
och medelstora artärer. Artärernas uppgift består av att transportera syrerikt blod
från hjärtat och ut i kroppen. Detta sker under ett högt tryck i hjärtats arbetsfas.
Artärerna är elastiska och kan till viss del reglera blodtrycket, om diametern ökar
så minskar trycket och vice versa. Venerna som ej drabbas av åderförkalkning har i
uppgift att transportera det syrefattiga blodet tillbaka till hjärtat, detta sker under
ett lägre tryck.
Sjukdomen innefattar inlagring av fetter och inflammation i kärlväggen med invandring av leukocyter. Detta gör att kärlväggen växer och blir tjockare vilket i sin
tur täpper till kärlet och blodflödet försämras. Det som bildas kallas för atherosklerotiska plack. Blodets uppgift är att transportera syre till kroppens vävnader. Vid
atheroskleros blir det förträngning av kärlet vilket försvårar syresättningen och den
drabbade vävnaden blir då hypoxisk. Allvarliga komplikationer av detta är hjärtinfarkt och claudicatio intermittens. En annan komplikation till följd av plackutbredningen är att dess egen syreförsörjning hotas. Centrala delar av placket utsätts för
hypoxi och går slutligen i nekros. Placket förkalkas, därav namnet skleros. När det
har gått så här långt så är det generellt för sent att åtgärda problemet.
Det är känt sedan tidigare att atheroskleros framförallt drabbar områden där
det finns ett växlande blodflöde, t.ex vid förgreningar eller kurvaturer (aortabågen),
detta är dock ännu ej kvantifierat. Även bakgrundsmekanismen till detta är okänt,
men följande teorier finns. Anledningar skulle till exempel kunna vara att:
• Det förändrade flödet i sig leder till inlagring av fett i kärlväggen.
1
I bilaga A finns en lista som förklarar vad de medicinska termerna betyder
1
• Det turbulenta blodflödet gör att cellerna lättare fastnar i dessa områden.
• Det fluktuerande blodflödet leder till att endotelcellernas fenotyp förändras.
Dessa celler blir då mer lika endotelcellerna som finns i vener (vilka är inflammatoriskt aktiva, vilket de i artärer normalt sett inte är).
Endotelcellerna som finns i dessa speciella regioner är mer benägna att rekrytera
leukocyter (kroppens försvar på skada). De gör detta genom att uppreglera celladhesionsmolekyler (CAMs) på sin yta.
För att få bilder på hur placket fördelar sig i aortan har genmanipulerade möss
fötts upp på en specialkost, sk Western Diet, som har ett mycket högt fett- och
kolesterolinnehåll (vanliga möss drabbas inte av atheroskleros). Sedan har man tagit
ut aortan och satt fast den på en provbricka. Blodkärl är formade som en cylinder.
För att man ska kunna se hur det ser ut inuti har kärlträdet klippts upp och
monterats en face (se figur 1.1).
En annan uppsättning möss används också. En krage placeras runt deras carotidartär som konstringerar kärlet för att skapa turbulent flöde vid det specifika
området. Genom att undersöka hur leukocyterna rör sig vid dessa områden och var
placket placeras hoppas man kunna dra slutsatser om varför atheroskleros uppstår.
1.2
Verktyg
Det här Examensarbetet går ut på att skapa en prototyp till ett verktyg som ska
gå att använda för att analysera en mängd bilder på flera olika provexemplar. Vid
skrivandet av den här rapporten så togs bilderna direkt från ett mikroskop med en
digitalkamera. Flera faktorer påverkar egenskaperna hos bilderna, speciellt när de
tas vid olika tillfällen. De viktigaste faktorerna är följande:
• Ljusförhållanden i rummet kan påverka färgnyanserna.
• Skalan mikroskopet är inställt på. Bilderna kan vara tagna med olika förstoringar.
• Placeringen, eftersom Varken provet eller brickan är placerad på exakt samma
position vid varje tillfälle.
• Aortans form, eftersom proverna tas och placeras på brickan för hand så kommer konturerna av aortan inte att ha samma form.
Analysen går till så att alla bilderna överlagras mot en mall som representerar ett
generellt utseende på en aorta. Varje bild placeras i ett eget lager där man markerar
placket. När man har flera av dessa markeringar över samma område så ska en
intensitetskarta skapas. Kartan består av en bild på mallen och en summering av
alla markeringar. En unik färg tilldelas de positioner där den totala markeringen är
ett, en annan där den är två osv.
2
Man vill även kunna markera leukocyter i bilder på aortor utan atheroskleros.
För att få en användbar statistisk karta över det måste man beräkna hur stor del
av ett område innehåller leukocyter. Det beror på att leukocyter är så små att
sannolikheten att två leukocyter sammanfaller på flera bilder är väldigt liten, vilket
gör att en intensitetskarta inte skulle vara en bra representation.
1.3
Rapportens uppbyggnad
För att underlätta läsandet av rapporten följer en kort beskrivning över vad de
olika kapitlen innehåller samt behandlar så att läsaren snabbt kan navigera till de
områden som är intressanta:
• Kapitel 1 - Överblick av problemställning, vad och varför som ska göras.
• Kapitel 2 - Mer detaljerad information om målet för projektet, beskrivning av
problematiken samt en genomgång av hur programmet kan användas.
• Kapitel 3 - Beskrivning av hur projektet har utförts tillsammans med arkitekturen för programmet. Innehåller även förslag på områden som kan undersökas
för att förbättra prestanda och kvalitet hos resultatet.
• Kapitel 4 - För att förstå detaljerna i lösningen krävs viss grundläggande kunskap om bildbehandling. Det här kapitlet beskriver alla metoder som används
tillsammans med illustrativa exempel.
• Kapitel 5 - En sammanfattning av projektet.
• Appendix A - Ordlista över medicinska termer för att göra det lättare att
förstå inledningen samt bakgrunden till projektet.
• Appendix B - Många termer inom datalogi skrivs vanligtvis på engelska, appendix B innehåller därför en ordlista med beskrivningar på svenska.
3
Figur 1.1. Ett exempel på en aorta hos 4
en mus. Fyra bilder har tagits från vänster
till höger. Bilderna togs med en digitalkamera så kanterna överlappar inte exakt. De
raka linjerna är nålar som fäster aortan vid provbrickan. Placket syns som en vit
massa. Proverna måste bevaras fuktiga, ljuset i mikroskopet kan orsaka reflexioner.
I den översta bilden saknas det en förgrening som ska gå parallellt med den som går
åt vänster. Förgreningen var så full med plack att den torkade och gick sönder.
Kapitel 2
Projekt
2.1
Hypotes
Man vill verifiera hypotesen att det turbulenta blodflödet i artärerna orsakar en
förändring i endotelcellernas fenotyp så att de liknar endotelcellerna i venerna. [6]
En av skillnaderna mellan artärer och vener är att det fysiologiskt sker inflammation på vensidan, men ej på artärsidan. Inflammationen är kroppens svar på
vävnadsskada och är således ett nödvändigt ont. När det uppstår en inflammation
så rekryteras leukocyter från blodbanan till vävnaden utanför venerna mha celladhesionsmolekyler. Leukocyterna kan då attackera det främmande element som
orsakat inflammationen.
Om endotelcellerna i artärerna förändras så att de får liknande egenskaper som
endotelcellerna i venerna finns det risk för att leukocyter rekryteras till dessa områden utan ett identifierat stimuli. När leukocyterna har vandrat ut subendotelialt
är artärväggen signifikant tjockare än den venösa väggen och leukocyterna verkar
fastna där. Det blir då en lokal inflammation i kärlväggen som gör att ytterligare
celler rekryteras, fett kommer in, fagocyteras upp av cellerna och området växer,
plack bildas. När placket växer så minskar blodflödet tills cellerna utsätts för hypoxi
och går i nekros. Allt detta sker i en ond cirkel där den initiala inflammationen och
inlagringen av leukocyter samt fetter i kärlväggen orsakar bildandet av atheroskleros.
2.2
Beskrivning
Studien baseras på försök hos möss vilka har visats ha stor korrelation till atheroskleros hos människor. Då möss i normala fall ej utvecklar sjukdomen, krävs genetisk
manipulation och en högkolesterolrik kost för att åstadkomma denna modell. Atheroskleros är en mycket lång process som hos en människa tar decennier, men hos
dessa möss tar det cirka 3-6 månader.
Mössen sövs sedan och kärlen plockas ut, monteras en face på en provbricka
samt fotograferas med en digitalkamera kopplad till ett mikroskop. Dessa bilder
5
används sedan för analys.
Att göra detta för hand kan vara en omständlig process med risk för att resultatet
påverkas av hur stadig på hand och noggrann provtagaren är. Blodkärlen hanteras
för hand och placeras på en skiva som man sedan tar bilderna på. Detta gör det
väldigt svårt att få formen på blodkärlen att bli densamma på alla bilder. Att det
dessutom finns variationer i formen på blodkärlen gör det svårare att avgöra vilka
partier som motsvarar varandra i de olika bilderna.
Examensarbetet går ut på att utveckla en prototyp av ett verktyg med ett
grafiskt gränssnitt som ska kunna visa en mall över ett generellt blodkärl. För varje
provexemplar skapas ett lager med en bild, karta över markerade områden samt
information för hur bilden kan anpassas mot mallen. Man vill även kunna beräkna
statistik över hur plack har fördelats på mallen enligt de olika proven. Detta ska
sedan jämföras med hur leukocyter transporteras genom kärlen, så man måste även
kunna kvantifiera tätheten av leukocyter i olika områden.
Arbetet består i huvudsak av två delproblem:
• Att utveckla ett grafiskt gränssnitt som är intuitivt och lättanvänd.
• Att skapa en intressant funktion som gör det möjligt för verktyget att automatiskt kunna markera ut speciella områden på en bild, eller åtminstone
ge en grov approximation. Det skulle kunna göra arbetet effektivare då man
slipper att manuellt göra alla markeringarna.
Konturerna av blodkärlet i ett prov överenstämmer inte helt med konturerna i
andra prov eller mot mallen. Detta orsakar problem för analysen av var plack
eller leukocyter samlas. Om intressanta områden som t.ex grenar eller kurvor
inte finns på samma ställen på alla bilder så blir statistiken förvrängd. För att
åtgärda det används dels en mall, men även en teknik för att vrida på en bild
så att de intressanta områdena överlappar motsvarande områden på mallen
ska utvecklas och utvärderas
2.2.1
Tekniska detaljer
För att lyckas med projektet finns det flera tekniska detaljer som måste undersökas.
Nedan finns en grov lista över de mest uppenbara frågetecknen:
1. Förbehandling av bilderna.
a) Ska man använda gråskala eller går det att använda färgkanalerna för att
skapa en gråskala som framhäver de viktigare partierna samtidigt som
den döljer de mindre viktiga?
b) Eftersom proverna som bilderna tas ifrån måste hållas fuktiga så kan det
uppstå ljusare områden (vita) där ljuset reflekteras i vätskan. Kommer
detta att orsaka problem?
c) Måste storleken på bilderna vara samma, alternativt måste det gå att
skala om en bild efter mallen?
6
d) Ljusstyrkan och kontrasten i bilderna ska inte orsaka några skillnader i
resultaten.
2. Konturanpassning.
a) Hur ska blodkärlens konturer lokaliseras?
b) Hur ska man kunna utnyttja konturerna för att modifiera bilderna så att
de överlagras på mallen så bra som möjligt utan att förvanska originalbilden alltför mycket (ska gärna gå att reglera hur mycket man vrider på
bilden)?
3. Markering av områden med skleros.
a) För att markera områden där det finns skleros, går det att använda samma teknik som för att lokalisera konturerna?
b) När man har ett område markerat, vilka olika sätt ska man kunna modifiera den för att anpassning mot mallen ska bli bättre?
4. Prototyp.
a) Det ska gå att lägga till ytterligare funktionalitet utan att det kräver
alltför omfattande förändringar av programmet.
b) Det krävs en utbyggbar sparmetod. Man ska kunna lägga till enheter
som representerar andra typer av data utan att den gamla sparmetoden
blir oanvändbar.
c) Det kommer att finnas många bilder och inställningar som ska sparas
och det måste göras på ett effektivt sätt.
d) Den stora mängden bilder gör att minneshanteringen sker på ett effektivt
sätt. Endast de bilder och data som är relevanta vid ett visst tillfälle ska
lagras i arbetsminnet, resten sparas i filer på hårddisken och läses in när
de behövs.
Funktionaliteten i programmet ska underlätta arbetet för användaren så mycket som
möjligt. Anpassning av en bild mot en mall kan resultera i att bilden förvanskas för
mycket för att vara användbar. Därför är det viktigt att man ska kunna stänga av
funktionalitet för att göra en manuell bedömning.
2.3
Arbetsförfarande
För att illustrera hur programmet fungerar följer en steg-för-steg beskrivning över
hur det ska användas för att analysera en mängd bilder.
• Starta programmet - Om det är första gången som programmet startas har
man en tom arbetsyta, i annat fall så laddas det man tidigare arbetade med
automatiskt.
7
• Skapa ny databas - Välj en katalog för att spara all data i, katalogen måste
vara tom för att undvika att programmet skriver över några befintliga filer.
• Inläsning av bilder.
– Mall - Det första som behövs är en representation av kanterna för den
genomsnittliga bilden, som vanligtvis är en svartvit bild men den kan
även vara i färg.
– Konturer - Genom att placera ut kurvsegment och enskilda punkter på
strategiska positioner får programmet en intern representation av hur
mallen ser ut. Kurvorna är deformerbara, vilket innebär att man bara
behöver placera ut dom på ett ungefär. Programmet kan därefter anpassa
kurvorna så att de följer kanterna i bilden. Till viss del kan man behöva
justera kurvorna efter det, men man har fått en initial representation
för lite arbete. Det är ett vektorfält (vektorfältet pekar i riktning mot
närmaste kant) som gör det möjligt för kurvorna att anpassa sig, vilket
gör att det först måste beräknas:
1. Gradienter (se kapitel 4 - Alla intressanta kanter (se kapitel 4 markeras med en etta och resterande bakgrund med nolla varefter ett
gradientfilter används för att skapa ett vektorfält som innehåller gradienterna. Räckvidden för vektorerna blir väldigt kort, bara en pixel,
men det finns möjlighet att göra beräkningarna på en grövre nivå för
att sedan skala upp resultatet. Räckvidden ökar då men precisionen
för var kanterna är minskar.
2. ”Gradient Vector Flow” (se kapitel 4 - Markerar kanter på samma
sätt som den tidigare metoden. Skillnaden är att en iterativ metod används för att sprida inflytandet av hur en kant påverkar vektorfältet. Kräver mer beräkningar men räckvidden för att kunna se
närmaste kant ökar.
Vektorfältet behöver bara beräknas en gång och sparas tillsammans med
övriga data för varje bild.
– Lager - För varje provbild som ska analyseras, skapa ett nytt lager och
läs in bilden. Positionera bilden och ändra storleken så att konturerna
överlappar mallen så bra det går.
– Anpassning - Om bilden skiljer sig för mycket jämfört med mallen kan
man prova att vrida bilden på plats. Kurvorna som skapades för mallen
kopieras automatiskt över till alla andra lager i relativ skala (om bilden
i lagret är dubbelt så stor som mallen så dubbleras även positionernas
värden). På samma sätt som för mallen anpassar man kurvorna efter
bilden. När det är klart kan man låta programmet approximera hur det
skulle se ut ifall man vred den ursprungliga bilden så att motsvarande
partier i mallen och bilden placeras i samma område. Det går att välja hur
mycket bilden ska vridas för att man ska kunna se hur stor förvanskning
i bilden vridningen orsakar.
8
– Markering - Efter att bilden har anpassats efter mallen så markeras de
partier där det finns plack.
• Intensitetskarta - Eftersom alla bilder följer samma mall kan man få statistik
över vilka områden som är mer benägna att ansamla plack än andra. För varje
pixel i mallen undersöks i hur många av lagren som det finns en markering på
samma position. Summan definierar vilken färg pixeln får i intensitetskartan.
Färgerna går över en HSB skala från blått, en markering, till rött, maximalt
antal markeringar. Skalan har 255 distinkta färger. Vilket exakt värde den helröda representerar beror på antalet lager av bilder som analyseras. Områden
som helt saknar markering färgas svart. Intensiteterna kan sedan kombineras
med mallen för att man ska kunna urskilja de olika områdena.
9
Kapitel 3
Utförande
Examensarbetet består av två delar, ett grafiskt gränssnitt som ger funktionaliteten
som behövs för att analysera en mängd provbilder, och en teknik för att anpassa
bilderna efter en gemensam mall. Mallen föreställer den genomsnittliga formen hos
en aorta och behövs för att det ska gå att jämföra var i två olika bilder som plack
bildas. Analysen av en mängd bilder ger en intensitetskarta som representerar mängden plack som förekommit över alla bilder längs hela aortan. Om bilderna inte vore
anpassade efter en gemensam mall skulle informationen inte gå att använda, då
markeringar i olika bilder inte motsvarar samma område.
3.1
Utvecklingsmiljö
Programmet utvecklades i programmeringsspråket Java 1.5 som har både för- och
nackdelar.
Fördelar:
• Plattformsoberoende - Programmet startar under alla operativsystem som
stöder Java 1.5 (har testats under Sun Solaris 10 och Windows XP).
• Gränssnittsvänligt - Swing är ett paket som följer med Java 1.5 som gör det
möjligt att skapa grafiska gränssnitt.
• Omfattande - Java 1.5 innehåller det mesta som behövs för att skriva ett program, om det behövs något externt paket så räcker det ofta att bara kopiera
paketfilerna. Till skillnad från t.ex programmeringsspråket C/C++ behöver
man inte konfigurera och kompilera programmet med alla externa paket speciellt för varje ny plattform.
Nackdelar:
• Effektivitet - Det går inte att programmera lika maskinnära kod som i t.ex
C/C++ vilket gör att algoritmerna inte utförs lika effektivt.
11
• Plattformsoberoende - Det går inte att skriva kod som utnyttjar speciella
instruktioner beroende på vilken processor programmet körs på. Många av
dagens processorer har instruktioner som kan utföra flera liknande operationer parallellt, speciellt bildbehandlingsalgoritmer (se kapitel 4) som upprepar
samma beräkningar flera gånger kan teoretiskt förbättra sin prestanda med
flera hundra procent. För program skrivna i Java 1.5 är det upp till Javamotorn ifall sådana instruktioner utnyttjas, vilket kan vara svårt då algoritmer
ofta behöver anpassas för att fungera korrekt.
Notera att ovanstående punkter låg som grund för att använda Java 1.5 för att
utveckla programmet och endast reflekterar författarens egna åsikter och erfarenheter. Det uppstår ofta diskussioner huruvida algoritmer skrivna i Java kan producera
lika snabba program som de skrivna i t.ex C/C++.
3.2
Projektlösning
Den här rapporten fokuserar på hur själva anpassningen av en bild mot en mall har
lösts då det är den stora delen av projektet. Men först beskrivs programmets övriga
funktionalitet då den inte är lika omfattande och komplicerad.
3.2.1
Databas
Det första steget består av att bygga grunden för hur en mängd provbilder ska lagras
på hårddisken. Hur dessa sedan representeras i arbetsminnet (när programmet körs)
är också en viktig aspekt som måste planeras.
Hårddisk
För att få tillräckligt med detaljer på provbilderna utan att behöva utföra beräkningar på alltför stora bilder, ska det för en mängd bilder gå att dela in varje bild
i olika regioner. Varje region kan sedan behandla ett specifikt intressant område,
t.ex kurvaturer eller förgreningar i en aortan.
Större delen av utrymmet i databasen kommer att bestå av olika former av
bilder. Det vore praktiskt ifall det gick att utnyttja databasen även när programmet
inte är igång för att enkelt kunna modifiera den eller hämta enskilda bilder. För
det ändamålet används XML-filer1 för att beskriva innehållet. Hela databasen för
ett projekt 2 sparas i en katalogstruktur där rotkatalogen har samma namn som
projektet. När ett nytt projekt skapas måste en tom katalog som ska innehålla
databasen specificeras. Den måste vara tom för att undvika risken att befintliga
filer blir överskrivna.
Databasens katalogstruktur:
I bilaga B finns en lista som förklarar vad de datortekniska termerna betyder på svenska
För att kunna analysera en mängd bilder måste ett projekt skapas, detta består av en databas
som programmet använder sig av.
1
2
12
• <rot> - Rotkatalog med samma namn som projektet.
– workspace.xml - Information om när projektet skapades och när det senast modifierades. Innehåller även en lista över alla moduler.
– <modul> - Varje region sparas i en separat modul, en modul ligger under
en egen katalog.
∗ trace.xml - Information om hur mallen och varje lager med provbilder
sparas. Innehåller data som behövs för att anpassningen av bilderna
ska fungera.
∗ template_Template.png - Bild på den generella mallen.
∗ template_Template.vf - Vektorfält för mallen.
∗ layer_<id>.png - Bild för ett lager vid namn <id>.
∗ layer_<id>.vf - Vektorfält för ett lager vid namn <id>.
∗ layer_<id>_markimage.png - Markeringar sparas som bilder.
∗ layer_<id>_markimage_tmp.png - Temporär sparning av markeringar som används medan programmet körs.
I datorns arbetsminne
En region består av en lagerstruktur med mallen som det första lagret. Ett nytt
lager skapas för varje provbild. Varje lager anpassas och jämförs endast med mallen
och inte något annat lager. Informationen i varje lager består till största delen av
bilder. För att minska mängden arbetsminne som används när programmet körs
läses endast data för ett lager in när det behövs. Programmet har bara ett lager
aktivt åt gången (förutom mallen). När man byter lager så sparas alla ändringar
i det aktuella lagret varefter det rensas från arbetsminnet och det nya lagret läses
in från hårddisken. Den här mekanismen gör det möjligt för programmet att öka
antalet lager utan att mängden arbetsminne som används ökar drastiskt (förutom
bilder så finns det en del beskrivande information för varje lager, som alltid finns i
arbetsminnet).
3.2.2
Bildanpassning
Anpassning av bilder i de olika lagren mot en mall görs för att motsvarande områden i de olika bilderna ska överlappa. Att anpassa en bild innebär att intressanta
områden i bilden flyttas, vridas eller skalas till fördefinierade områden som finns
markerade i mallen. Detta gör att bilden förvanskas från dess ursprungliga värden.
När ett område ändras så har det även en effekt på andra områden i dess närhet.
Målet för en anpassning är att bibehålla de intressanta områdena samtidigt som det
endast påverkar de irrelevanta.
I det här examensarbetet löstes anpassningsproblemet genom följande punkter
(se kapitel 4 för en detaljerad beskrivning av de tekniker som används):
13
• Lokalisering av särdrag - För att kunna modifiera en bild måste särdrag i både
bilden och mallen lokaliseras.
• Representation - Särdragen kombineras för att skapa en representation över
de intressanta områdena.
• Modifiering - Använd representationen för att göra ändringar i bilden så att
den anpassas efter mallen.
Lokalisering av särdrag
Ett prov på en aorta liknar en uppklippt cylinder med förgreningar. De intressanta
områdena i en sådan bild är allt som ligger mellan aortans kanter, vilket gör dessa
till bra kandidater för att användas som särdrag. I en aorta finns det många mindre
förgreningar som är riktade in i bilden och syns endast som prickar. Förgreningar
är intressanta områden (se avsnitt 2.1) vilket gör att även enstaka prickar kan
användas för särdrag. Funktionalitet i programmet finns för att använda båda men
fokus ligger på kanterna.
I avsnitt 4.3 beskrivs hur man kan använda gradienten i en bild för att lokalisera
alla kanter. Gradientens magnitud indikerar hur stark en kant är relativt till de andra kanterna. Magnituden beskriver hur stor skillnad det är mellan två intilligande
pixlar. Det finns nackdelar med att direkt använda magnitudvärdet:
• Varje pixel i bilden räknas som en kant, oavsett hur svag den är.
• Om kraftigt ljus orsakar vita reflektioner eller saturering av vissa områden kan
artificiellt kraftiga kanter upptäckas. Dessa får ofta en stor gradientmagnitud
och riskerar att dominera över de andra kanterna. En algoritm som utgår från
en kantkarta av originalbilden kan då tolka de dominerande kanterna som
viktigare än alla andra, vilket resulterar i att för två kanter som egentligen är
lika utmärkande, ignoreras den ena.
För att undvika dessa nackdelar används tröskling av gradientmagnituderna för att
avgöra vad som är kant eller inte. För att en pixel ska klassificeras som en kantpixel
ska dess värde vara högre en ett specificerat tröskelvärde. Ett bra tröskelvärde för
en mängd bilder beror på flera faktorer:
• Ljusstyrkan i bilden kan orsaka stora respektive små gradientmagnituder vilket gör att olika tröskelvärden behövs för att återge samma kant. Tröskelvärdet
ska vara oberoende av ljusstyrkan i en bild för att likvärdiga resultat ska ges
mellan flera bilder.
• Tröskelvärdet beror på hur kraftiga de intressanta kanterna är. Det ska vara tillräckligt högt för att endast de intressanta kanterna upptäcks utan att
riskera att någon missas.
14
• Hur sammanhängande en kant måste vara påverkar också tröskelvärdet. Ett
högt tröskelvärde ger få men starka kanter medan ett lågt tröskelvärde ger
många. En balans mellan för få och för många kanter används för att finna
ett passande tröskelvärde.
• Om bara kanter inom ett visst intervall av gradientmagnituder är intressanta
kan flera tröskelvärden användas för att även sålla bort för starka kanter.
En metod för att beräkna ett passande tröskelvärde visade sig vara medelvärdet av
alla gradientmagnituder.
g(x, y) = |∇f (x, y)|
g =
−1
−1 N
X
1 MX
g(x, y)
M ∗ N x=0 y=0
(3.1)
Genom att använda medelvärdet kunde aortans kanter upptäckas separerade från
andra områden i bilden. Brus i bilden, stor skillnad mellan enstaka pixlar i ett annars homogent område, överförs till brus i kantkartan då små grupper av pixlar
klassificeras som en kant. Bruset gör att de intressanta kanterna riskerar att skymmas för en algoritm. För att minska mängden brus måste en pixel klara följande
test för att kunna tillhöra en kant:
• Gradientmagnituden måste vara större än g.
• Medelvärdet av pixeln och dess 8 grannars gradientmagnituder måste vara
större än g.3
Punkter som kan användas som särdrag identifieras manuellt av användaren. När
proverna fotograferas används en så kraftig förstoring att ojämnheter i provbrickan
syns. Ojämnheterna är helt ointressanta och tillför endast brus. Bruset kan i vissa
fall tolkas som delar av en kant, vilket illustreras i figur 3.3. Dessa kanter är oftast
korta och kan därför tas bort genom att endast tillåta kantsegment (se avsnitt 4.4)
som har en större area än ett godtyckligt passande tröskelvärde. I figur 3.4 har en
∗höjd
används för att ge ett acceptabelt resultat.
tröskel på bredd
700
Representation
För att kunna lokalisera aortans konturer utifrån en kantkarta används ”Deformerbara kurvor” (se avsnitt 4.5). Utifrån en grov approximation av en kontur kan den
iterativa algoritmen anpassa en kurva så att den lägger sig längs konturen så gott
den kan efter dess restriktioner.
Målet skulle vara att få programmet själv att upptäcka var kurvorna ska börja
och sluta, samt hur många kurvor som behövs för att täcka alla kanter. Det är
Det visade sig att det andra kravet inte skalade så bra när man varierar upplösningen på
bilderna. En pixels storlek i bilden avgörs av bildens upplösning, vilket innebär att brusreduktionen
också påverkas. För att få en stabilare brusreduktion används segmentering (se avsnitt 4.4) istället.
3
15
ett väldigt komplicerat problem med stor risk för otillräckliga resultat att utveckla
en algoritm för. En människa däremot löser problemet både snabbt och enkelt.
Programmet använder därför en hybrid metod, där användaren får placera ut var en
kurva börjar och slutar, varefter programmet försöker anpassa den efter närmaste
kant. Metoden är iterativ vilket innebär att det även går att manuellt modifiera
kurvor för att justera resultatet.
Det finns många olika sorters parametriska kurvor, Spline, B-Spline, Beziér och
Polynom för att nämna några. Men den som passar bäst för det här ändamålet
är den allra enklaste, en linjär kurva. De olika kurvorna har gemensamt att de
definieras av en mängd kontrollpunkter. En linjär kurva består av raka linjer mellan
sina kontrollpunkter. Sättet som en bild modifieras på (se sida 16) för att anpassas
efter en mall speglas bäst av de raka linjerna.
Algoritmen utnyttjar informationen i kantkartan genom att skapa ett vektorfält
som för varje position anger en vektor som pekar i riktning mot den närmaste kanten
och vars storlek minskar med avståndet. Vektorfältet kan beräknas genom att ta
gradienten av kantkartan. För att förbättra räckvidden kan ett utjämningsfilter
appliceras på resultatet. ”Gradient Vector Flow” [8] ger ett effektivare vektorfält
men tar avsevärt längre tid då den går igenom alla värden flera gånger.
När vektorfältet är uträcknat används det för att flytta på kurvans fria kontrollpunkter4 , för att ge ett jämnare resultat vid modifieringen så används restriktionen
att avståndet till de två närmaste kontrollpunkterna ska vara så lika som möjligt.
Betydelsen mellan de två effekterna regleras med vikter.
För att algoritmen ska läsa av vektorfältet med tillräcklig precision införs temporära punkter mellan alla kontrollpunkter på givna avstånd. Vektorvärdet som
används för en kontrollpunkt beräknas som medelvärdet av kontrollpunktens och
alla omkringliggande temporära punkters vektorer.
Figur 3.5 illustrerar vektorfältet beräknat med de två olika metoderna för en bild
på 390x274. Endast en del av vektorfältet visas för att vektorerna ska synas. Med
GVF metoden uppstår små virvlar vilket beror på bruset som resulterar i enstaka
punktkanter. En förbättrad metod för att upptäcka kanter skulle ge bättre resultat.
Modifiering
För att omvandla en bild efter en mall används en mängd referenspunkter. Två
referenspunkter markerar en position i varje bild som motsvarar samma område.
För att omvandla en bild ska alla referenspunkter i bilden som ska modifieras överlappa med motsvarande referenspunkt i mallen. Pixlarna mellan referenspunkter
beräknas utifrån omgivningen. För att omvandling ska vara möjligt krävs det att
referenspunkterna har en 1-till-1 relation 5 , vilket programmet garanterar genom
4
Endast fria kontrollpunkter påverkas av algoritmen. Detta gör det möjligt att låsa delar av
en kurva som inte ska ändras som t.ex start- och slutpunkt.
5
Varje referenspunkt i den ena bilden motsvaras av en och endast en referenspunkt i den andra,
och vice versa.
16
att endast tillåta att användaren lägger till kurvor och enstaka punkter i lagret
som innehåller mallen som sedan kopieras över till de övriga. Varje konturs kontrollpunkter tillsammans med alla enstaka utplacerade punkter utgör mängden av
referenspunkter.
”Delaunay triangulering” (se avsnitt 4.6) används för att dela in mallen utifrån dess referenspunkter till ett nätverk av oregelbundna trianglar (TIN). För att
anpassa bilden efter mallen används den som mönster när trianglarna ritas upp, referenspunkterna i originalbilden specificerar vilka bildkoordinater trianglarnas hörn
tilldelas.
Programmet tillåter en delvis anpassning genom att låta trianglarnas hörn uniformt variera från originalbildens referenspunkter till mallens referenspunkter. Att
bara göra en delvis anpassning kan vara praktiskt om en full anpassning orsakar
att bilden förvrängs för mycket.
3.3
Utvärdering
Hur en teknik för att anpassa bilder ska utvärderas är inte självklart då det inte
resulterar i några konkreta värden som kan jämföras. Eftersom det här programmet
ska användas för att analysera provbilder som en del av ett annat projekt finns det
inte tillräckligt med data för att göra några jämförelser. En förbättring av tekniken
för att lokalisera kanter behövs, mest för att bli av med brus, vilket skulle göra att
kurvorna skulle söka sig mer effektivt mot kanterna. Som det är nu så lokaliseras
även andra kanter än aortans. Kanterna som upptäcks tenderar att bli breda vilket
gör att precisionen för var en kant befinner sig inte är exakt. En kantbredd på en
pixel skulle ge bäst precision, förutsatt att den har placerats korrekt (en kant har
två sidor vilka markeras med en varsin pixel, vilken av dessa ska väljas?).
3.3.1
Modell
Då anpassningen utförs genom att överlagra en triangel i modellen med motsvarande
triangel i bilden får man ett bättre resultat desto mer lika de är. Den ena triangeln
kan vara en roterad version av den andra vilket ger en perfekt avbildning.
En utvärderingsmodell för anpassningen går ut på att för varje intressant triangel6 jämföra hur den ser ut i bilden respektive mallen vilket ger ett anpassningsvärde.
Medelvärdet över alla anpassningsvärden beskriver anpassningen i helhet. Ett medelvärde används för att bilder över olika områden inte behöver använda samma
antal trianglar vilket annars skulle ge värden som inte skulle gå att jämföra.
Anpassningvärdet beräknas bara över de intressanta trianglarna just för att det
inte spelar någon roll hur förvrängda de andra blir eftersom de inte innehåller någon
intressant information.
Figur 3.7 illustrerar hur en triangulering av mallen respektive provbild kan se ut.
I figur 3.8 vrids provbilden mot samma form som mallen, först halvvägs och sedan
6
En intressant triangel är en triangel som upptar ett område inuti aortan.
17
fullt ut. En provbild som är lik mallen kan anpassas utan att den behöver vridas
alltför mycket. Anpassningsfunktionens värde ligger på 0.47 för exemplet över de
intressanta områdena, vilket är ganska högt. Mallen ritades för hand för att grovt
likna provbilden. I en verklig situation kan man använda en annan provbild som
underlag för en mall, vilket borde ge en mer proportionerlig mall och därför bättre
resultat.
Anpassningsfunktion
En triangel består av tre inre vinklar α0 , α1 och α2 som beskriver triangelns form,
men inte storlek. Alla möjliga triangelformer spänner upp ett plan i R3 med följande
restriktioner.
2
X
(3.2)
αi = π
i=0
0 < αi < π
∀αi ∈ {i = 0, 1, 2}
(3.3)
En specifik triangel motsvaras av en punkt på det planet. För att jämföra två
trianglar projiceras de först upp på planet, varefter avståndet mellan punkterna
beräknas som deras anpassningsvärde.
t0 = (α0 , α1 , α2 )
t1 = (β0 , β1 , β2 )
Anpassningsvärde = |t0 − t1 | =
p
α0 β0 + α1 β1 + α2 β2
(3.4)
Anpassningsfunktionen beräknas bara på lokal nivå utan att ta hänsyn till hur trianglar förhåller sig till sina grannar, vilket skulle kunna påverka anpassningen. Anpassningsfunktionen används bara som en indikation till användaren på hur mycket
en bild har vridits. Inga inre beräkningar använder sig av den.
3.3.2
Intensitetskarta
Analysen av provbilderna går ut på att i varje bild markera var plack har uppstått.
Detta är en binär operation, plack eller inte plack. Varje pixel i intensitetskartan
beskriver i hur många av alla provbilder det fanns plack i den pixeln. Svart motsvarar ingen markering. Intervallet av möjliga pixelvärden följer en HSB skala som
går från blått till rött där rött motsvarar en markering i alla bilder. Tanken är
att intensitetskartan ska visa var placket statistiskt sett har högst benägenhet att
uppstå.
3.4
Framtida arbete
Programmet fungerar och gör vad det ska, men det finns alltid utrymme för förbättringar av både prestanda och effektivitet, alternativt att lösa problemet med
en annan metod.
18
• Lokalisering av kanter - Om det går att förbättra precisionen att bara markera just de intressanta kanterna skulle de deformerbara kurvorna anpasssas
lättare efter aortans konturer. Kurvornas begynnelsevärden kan vara längre
ifrån målen men ändå finna konturerna.
– Använda färginformation i bilden för att skilja mellan aortan och provbrickan.
– Kombinera tröskling med ”Canny Edge Detection” [9] för att ge smalare
kanter som resulterar i ett bättre vektorfält.
• Automatik - Förbättring av användarvänligheten genom att få programmet
att automatiskt lokalisera nyckelpunkter som kurvorna kan spännas mellan
för den första approximationen.
• En annan teknik - Använda specifikationen av kurvorna direkt för att vrida
på bilden så att den passar kurvorna i mallen. För en sådan teknik skulle det
även kunna löna sig att utvärdera olika sorters kurvor.
• Optimering av algoritmer och data för att programmet ska utföra beräkningar
snabbare och utnyttja mindre minne.
19
Figur 3.1. En del av en aorta med upplösning 390x274 (övre), gradientmagnituden
beräknad med ett Sobel-filter (undre) (se avsnitt 4.2.4).
20
Figur 3.2. Fortsättning av figur 3.1, gradientmagnituden efter funktion 4.15 med
α = 10 och β = 255 visar att de flesta områden har en gradientmagnitud större än 0
(övre). Tröskling av gradientmagnituden med dess medelvärde (undre).
21
Figur 3.3. Fortsättning av figur 3.2. Tröskling där gradientmagnituden runtomkring
en pixel även måste ha ett lokalt medelvärde högre än det globala, minskar mängden
brus (övre). Resultatet för en 1025x701 bild (nerskalad till 390x267) som visar att
tekniken även fungerar för större bilder, men blir mer känslig för brus (undre). Kan
åtgärdas genom att bilden först jämnas ut lite med ett filter (se avsnitt 4.2.4).
22
Figur 3.4. Motsvarande bilder som i figur 3.3 med skillnaden att varje kantsegment
bredd∗höjd
som är mindre än ett tröskelvärde (
) har tagits bort.
700
23
Figur 3.5. Fortsätter med den övre bilden i figur 3.3. Vektorfältet beräknat som
gradienten av kantkartan med utjämning för att öka räckvidden (övre). GVF ger
längre räckvidd för att hitta kanter (undre).
24
Figur 3.6. Mall att anpassa provbilden efter (övre), ursprunglig provbild (undre).
Observera att i provbilden som används så har den övre av de vänstra förgreningarna
torkat och lossnat, vilket berodde på att hela förgreningen var täckt med plack.
25
Figur 3.7. Triangulering över mallen (övre) respektive provbilden (undre).
26
Figur 3.8. Provbilden halvvägs (övre, anpassningsfunktionens felvärde endast 0.14
jämfört med 0.47 efter hela vridningen) respektive fullt vriden (undre) mot mallen.
Se figur 3.6 som referens.
27
Kapitel 4
Bildbehandling
Examensarbetet handlar mycket om grafik och bearbetning av bilder för analys.
Därför finns det vissa förkunskapskrav inom ämnet bildbehandling för att man ska
kunna förstå varför och hur teknikerna fungerar för att lösa de problem som uppstår.
För att göra det möjligt för en person utan tidigare erfarenhet av bildbehandling
att förstå den här rapporten innehåller det här kapitlet en detaljerad beskrivning
av alla kända tekniker som används i arbetet. Se litteraturförteckningen i slutet av
den här rapporten för referenser till ytterligare information.
4.1
Definition av en bild
En färgbild kan definieras som en tvådimensionell funktion f (x, y) där funktionens
värde består av tre komponenter: röd, grön och blå. Dessa formar en trippel som
kallas för en RGB pixel, där de olika komponenterna anger hur mycket av de respektive primära färgerna1 den består av. Alla sekundära färger skapas genom att
kombinera de primära färgerna på olika sätt.
Vanligtvis har komponenterna ett intervall på 0 − 255 då det motsvarar en byte
(minsta lagringsenheten hos en dator). Ibland kan det vara praktiskt att representera värdena som decimaltal 0..1, vilket gör att man inte begränsar sig på samma
sätt till ett visst färgdjup.
De tre RGB komponenterna brukar även kallas för kanaler där t.ex den röda
kanalen motsvarar bilden enbart med de röda värdena (grönt och blått är satt till
0), och motsvarande för de två andra kanalerna. För att applicera filter och liknande operationer måste man behandla varje kanal som en separat bild, för att
sedan kombinera de tre resultaten. Hur värdena i de olika kanalerna förhåller sig
till varandra är inte alltid uppenbart. En operation som upptäcker kanter kan markera en pixel som kant i en av kanalerna men inte i de båda andra, är pixeln en
kant eller inte? För att undvika det problemet kan man göra om bilden så att den
använder en gråskala (r, g, b) → (i) istället och utföra alla beräkningar på den nya
I datorvärlden räknas grön som en primär färg istället för gul, vilket beror på att grön färg
var lättare alt. billigare att producera för skärmar.
1
29
representationen. En vanlig modell för att göra om ett RGB värde till en intensitet
är:
r+g+b
(4.1)
Intensitet =
3
I det här arbetet så sker alla beräkningar på en gråskalig version av varje bild,
men observera att färginformationen i vissa fall kan användas för att identifiera
egenskaper hos en bild (se kapitel 3.4 på sida 18 för ytterligare information).
4.2
Faltning
Faltning är en matematisk operation som används för att applicera linjära filter [14]
på en analog signal, t.ex ljud. Ett filter beskriver hur man önskar förändra en signal
till en annan. Filtret kan, men behöver inte, vara av samma storlek som signalen.
4.2.1
Definition av ett filter
Man brukar säga att ett filter har en kernel. En kernel är en lista med värden
som beskriver hur signalen ska förvandlas. Beroende av vad för information man
är intresserad av har en kernel olika värden. Oftast är kerneln av udda längd där
det mittersta värdet har index 0, värdena till vänster har negativa index medans
värdena till höger har positiva. Genom att definiera en kernel så, kan man tänka
sig att kerneln centreras över det värde man vill beräkna och man använder sig av
lika många värden till vänster som till höger om detta.
Det här avsnittet beskrev hur ett endimensionellt filter är uppbyggt, men samma
idéer kan användas för att skapa filter i högre dimensioner, t.ex för bilder används
ofta tvådimensionella filter.
4.2.2
Faltning i en dimension
För att lättare kunna förstå konceptet med faltning kommer det här avsnittet att
beskriva hur det fungerar i en dimension (se avsnitt 4.2.3 för faltning i två dimensioner). Faltning definieras som:
fˆ(t) = (f ⊗ g)(t) =
Z
∞
f (t − u) ∗ g(u)du
(4.2)
−∞
Notera att faltning är kommutativ.
fˆ(t) = (f ⊗ g)(t) = (g ⊗ f )(t) = ĝ(t)
(4.3)
En dator arbetar varken kontinuerligt eller har oändligt med minne, vilket betyder
att signalen är samplad från analog till digital. Därför måste ekvation 4.2 formuleras
som ett uttryck med diskreta värden.
fˆ(m) = (f ⊗ g)(m) =
X
fm−n ∗ gn
(4.4)
n
Där n sträcker sig över filter kernelns intervall, t.ex för en kernel av längd tre är tar
n värdena −1, 0, 1.
30
Tre viktiga detaljer
Det finns ett problem med ekvation 4.4, nämligen hur man beräknar värdet av
(f ⊗ g)(0) (antag att g är av längd tre)?
(f ⊗ g)(0) = f (1) ∗ g(−1) + f (0) ∗ g(0) + f (−1) ∗ g(1)
Problemet är den sista termen, f (−1) ∗ g(1), för en diskret funktion är det lägsta
indexet 0, man försöker alltså läsa utanför funktionens intervall av värden. Om m är
antalet värden av f och n är antalet värden i filtret så kan man hantera problemet
genom att:
• Beräkna endast de värden där alla termerna har giltiga index, resultatet kommer att ha färre värden än den ursprungliga funktionen (m − n + 1).
• Alla funktionsvärden med negativa index tilldelas värdet 0 (eller någon annan
passande konstant).
• Beräkna endast de värden där alla termerna har giltiga index, men behåll
de omkringliggande värdena också, alternativt sätt dom till någon passande
konstant.
• Om man placerar filtret så att endast ett värde överlappar ett värde hos funktionen, och utför beräkningarna ända fram till motsatt kant kommer resultatet
ha fler värden än den ursprungliga funktionen (m + n − 1), de funktionsvärdet
med negativa index tilldelas värdet 0.
Notera att som ett resultat av ekvation 4.4 går funktionen från höger till vänster,
medan indexet i filtret går från vänster till höger. När man konstruerar och använder
ett filter måste man alltså tänka på att värdena kommer att användas i omvänd
ordning. Om filtret är symmetriskt, vilket många är, har detta dock ingen betydelse.
Två filter kan kombineras till ett genom att utföra en faltning mellan dem.
f ⊗ g ⊗ h = f ⊗ (g ⊗ h) = f ⊗ K
Det kan vara effektivare att kombinera två filter än att utföra en faltning för varje
på signalen (förutsatt att filtren är mindre).
Ett exempel
För att illustrera hur faltning fungerar ska f ⊗ g beräknas då f = (2, 4, 3, 5, 5) och
g = (1, 2, 3).
(f ⊗ g)(0) = f (1) ∗ g(−1) + f (0) ∗ g(0) + f (−1) ∗ g(1) = 4 ∗ 1 + 2 ∗ 2 + 0 ∗ 3 = 8
(f ⊗ g)(1) = f (2) ∗ g(−1) + f (1) ∗ g(0) + f (0) ∗ g(1) = 3 ∗ 1 + 4 ∗ 2 + 2 ∗ 3 = 17
(f ⊗ g)(2) = f (3) ∗ g(−1) + f (2) ∗ g(0) + f (1) ∗ g(1) = 5 ∗ 1 + 3 ∗ 2 + 4 ∗ 3 = 23
31
(f ⊗ g)(3) = f (4) ∗ g(−1) + f (3) ∗ g(0) + f (2) ∗ g(1) = 5 ∗ 1 + 5 ∗ 2 + 3 ∗ 3 = 24
(f ⊗ g)(4) = f (5) ∗ g(−1) + f (4) ∗ g(0) + f (3) ∗ g(1) = 0 ∗ 1 + 5 ∗ 2 + 5 ∗ 3 = 25
Så f ⊗ g = (8, 17, 23, 24, 25) om man definierar alla funktionsvärden utanför intervallet till 0.
4.2.3
Faltning i två dimensioner
Det är enkelt att utvidga faltning för högre dimensioner. För att göra beräkningar
på bilder behöver man kunna utföra faltning i två dimensioner. Från ekvation 4.2
får man.
fˆ(s, t) = (f ⊗ g)(s, t) =
Z
∞
Z
∞
f (s − u, t − v) ∗ g(u, v)dudv
(4.5)
−∞ −∞
Den diskreta versionen av ekvation 4.5 är.
fˆ(k, l) = (f ⊗ g)(k, l) =
XX
m
(4.6)
fk−m,l−n ∗ gm,n
n
Ett exempel
För att illustrera skillnaden mellan en och två dimensioner används samma signalstorlek (i båda dimensionerna).




f =


2
7
3
5
2
7
4
9
9
6

5
9
8
6
8
7
3
3
3
5
7
3
8
7
4








1 2 3


g= 4 5 6 
7 8 9
(f ⊗ g)(1, 1) =
f (2, 2) ∗ g(−1, −1) + f (2, 1) ∗ g(−1, 0) + f (2, 0) ∗ g(−1, 1) +
f (1, 2) ∗ g(0, −1) + f (1, 1) ∗ g(0, 0) + f (1, 0) ∗ g(0, 1) +
f (0, 2) ∗ g(1, −1) + f (0, 1) ∗ g(1, 0) + f (0, 0) ∗ g(1, 1)
=
8∗1+9∗2+3∗3+
9∗4+4∗5+7∗6+
5∗7+7∗8+2∗9
= 242
Alla andra värden beräknas på samma sätt, signalvärden utanför intervallet behandlas på samma sätt som för en dimensionella signaler.
32
Komplexitet
Om varje dimension i signalen är av längd n, och m för filtret, så är komplexiteten
för att utföra en faltning.
O(n, m, d) = nd ∗ K ∗ md
(4.7)
K är kostnaden för en multiplikation och en addition (för varje värde som beräknas
så används i verkligheten en färre addition än multiplikation), d är antalet dimensioner i signalen. För en bild där d = 2 så krävs det fyra gånger så mycket arbete
om man dubblerar filtrets storlek, vilket gör att faltning med stora filter kan ta
lång tid. För att klara av stora filter kan man använda The Fast Fourier Transform
[3] [2], den bygger på att man representerar signalen i frekvens domän där faltning
motsvaras av en vanlig komponentvis multiplikation. Att konvertera signalen till
den nya domänen och sedan tillbaka kräver extra arbete, men för stora filter är
det en liten kostnad jämfört med vad man sparar in på att bara behöva utföra en
multiplikation för varje värde. Komplexiteten för The Fast Fourier Transform är:
O(nd log d ).
4.2.4
Filter i två dimensioner
Det finns många typer av filter som används för olika ändamål, för att t.ex ta
bort ”Salt & peppar”-brus (enskilda svarta eller vita pixlar), jämna ut kanter eller
beräkna partiell derivata (se figur 4.1 och figur 4.2).
Box
Ett Boxfilter används för att jämna ut en bild. Man tar medelvärdet av alla positioner som kerneln täcker.


1 1 1
1 

g = ∗ 1 1 1 
9
1 1 1
Konstanten 19 används för att värdena i resultatet ska bibehålla samma intervall av
möjliga värden som de ursprungliga (man delar kerneln med summan av dess värden). Nackdelen med ett Boxfilter är att den kan introducera fyrkantiga artefakter
i bilden.
Gaussian
För att slippa artefakterna som ett Box-filter skapar kan man använda ett Gaussianfilter. Idéen är att ju längre ifrån mitten ett värde är desto lägre betydelse har
det och tilldelas därför en lägre vikt i filtret. För att beräkna värdena för ett filter
använder man ekvationen.
g(x, y) = e
−0.5∗
33
(x2 +y 2 )
σ2
(4.8)
σ 2 står för variansen och bestämmer hur kraftigt värdena minskar när de rör sig
från mittpunkten. Då σ 2 = 1 får man


3 5 3
1 

∗ 5 8 5 
g=
40
3 5 3
Figur 4.1. Heiligenblut vid foten av Grossglockner (Österrike). Från vänster till
höger, ursprunglig bild, resultatet av ett 5x5 Boxfilter, resultatet av ett 5x5 Gaussianfilter med σ 2 = 1.
Partiell derivata
Då man representerar en signal som en funktion kan det vara praktiskt att kunna
beräkna dess derivata, partiella derivatorer för bilder. En partiell derivata beräknas
separat för varje dimension, vilka tillsammans bildar en gradientvektor. Ibland är
man mer intresserad av derivatavektorns magnitud än dess riktning. Magnituden
kan beräknas med Euklidisk norm
|f | =
q
(fx ∗ fx + fy ∗ fy )
1 0 −1
(4.9)
Ett enkelt filter för att beräkna en approximation av en partiell derivata kallas för
”Central difference”
gx =
34
(4.10)


1


gy =  0 
−1
(4.11)
”Central difference” är tyvärr känslig för brus eftersom det i praktiken är ett högpass
filter, vilket kan ge ett kantigt resultat vid kurvaturer i en bild.
Sobel-filtret adresserar problemen genom att först jämna2 till bilden i en riktning
för att sedan beräkna dess derivata i en annan riktning.
gx
gy


1 0 −1


=  2 0 −2 
1 0 −1

(4.12)

1
2
1


0
0 
=  0
−1 −2 −1
(4.13)
Resultatet är mindre känsligt för brus och ger bra värden vid kurvaturer.
Figur 4.2. Illustration av magnituden för gradienvektorerna (alla bildernas färger är
skalade så att svart representerar det lägsta värdet och vitt det högsta). Från vänster
till höger, ursprunglig bild, resultatet av ”Central difference”-filter och resultatet av
Sobelfilter.
4.3
Lokalisera kanter
En av de mest grundläggande teknikerna inom bildbehandling är lokalisering av
kanter. Den används som en lågnivåoperation för att användas inom mer komplicerade högnivåoperationer (vissa högnivå operationer kombinerar resultatet av lågnivå
operationer för att producera ett bättre resultat, se avsnitt 4.5).
• Lågnivåoperationer arbetar direkt med en bilds pixelvärden och andra lokala egenskaper, t.ex klassificering av en pixel, lokalisera kant eller hörn och
upptäcka var i en bild en viss symbol är placerad.
2
Kom ihåg att två filter kan kombineras till ett (se avsnitt 4.2.2).
35
• Högnivåoperationer försöker kombinera små bitar av information över bilden
för att skapa sammanhängande komponenter, t.ex förbättring av kantdetektering, segmentering med avseende på mönster i en bild.
4.3.1
Egenskaper hos derivatan i en bild
För en människa är det inte svårt att utifrån en bild markera vad som är en kant
eller avgöra hur bilden ska segmenteras efter de föremål den avbildar (det gäller åtminstone för föremål man känner igen sedan tidigare, medan det för okända föremål
kan vara svårare att avgöra a priori om det är en eller flera olika). En människa kan
snabbt avgöra vad som är en kant eller inte. Det är därför lätt att tro att det skulle
lika enkelt att modellera detta beteendet för en dator, men så är tyvärr inte fallet.
En människa utnyttjar tidigare erfarenheter och arbetar med en uppifrån-och-ned
metod. Det är svårt att kvantifiera alla ledtrådar som man omedvetet använder för
att simulera dessa i ett program:
• Uppifrån-och-ned innebär att man börjar med att titta på helheten i bilden,
försöker upptäcka en grov approximation över vad olika segment föreställer.
Beroende på vad man söker efter så förfinar man beräkningarna men bara i
de områden som är relevanta, och så fortsätter man ner till pixel nivå.
• Nedifrån-och-upp börjar på pixel nivå och för varje nivå kombineras resultatet
från tidigare nivå till mer komplicerade strukturer.
En ledtråd som har visat sig fungera bra är det faktum att en yta ofta har en uniform
färg, det vill säga färgnyansen har en låg varians. Om ett pixelvärde i en bild skiljer
sig tillräckligt mycket ifrån någon av dess grannar är sannolikheten stor att de tillhör
olika områden och därför har en kant mellan sig. Hur kan man hitta de områden där
närliggande pixlar har tillräckligt olika värden? I avsnitt 4.1 definierades en bild som
en funktion f (x, y) där funktionsvärdet var färgintensiteten vid en viss position. Det
finns en operator inom matematiken som används för att beräkna hur en funktion
varierar med dess parameter, derivator. Genom att använda ett filter som beräknar
den partiella derivatan (se avsnitt 4.2.4) kan man uppnå samma resultat med den
diskreta bildfunktionen. I figur 4.3 illustreras hur genomskärningen av en rektangel
påverkas av derivata operatorn. I den sista bilden ser man en positiv spets till
vänster och en negativ spets till höger där rektangelns kanter ligger. Gradientens
riktning indikerar vilket håll kanten är riktad åt medan magnituden representerar
hur ”stark” en kant är (relativt till andra kanter i bilden).
Tröskling
När man har beräknat gradientmagnituden för varje pixel återstår fortfarande att
avgöra för vilken storlek en pixel ska klassificeras att tillhöra en kant. Den minsta
magnituden en kantpixel kan ha kallas för tröskelvärdet, T , alla pixlar med högre
magnitud än T är kantpixlar.
36
Ett bra värde på T beror på vilken sorts bild man arbetar med, vilket gör att man
måste experimentera med en mängd generella bilder (som är typiska för tillämpningen) för att få fram ett bra värde. När man försöker anpassa parametrar för
bildbehandling underlättar det ofta ifall man kan visualisera resultatet som en bild.
Det kan vara stor skillnad mellan gradientmagnituderna vilket gör att endast de
största värdena syns tydligt. För att kringå det kan man använda en förvandlingsfunktion. Om m(x, y) är gradientmagnituden och h(v) är förvandlingsfunktionen
ger ekvation 4.14 den nya gradientmagnituden m′ (x, y).
m′ (x, y) = h(m(x, y))
(4.14)
Ett användbart uttryck för h(v) är.
h(v) = log(α + β ∗ v)
(4.15)
α bestämmer var på logaritmskalan de nya värdena ska börja, β avgör bredden på
intervallet av möjliga värden. Bra värden för β beror på storleksordningen av v (se
figur 4.4).
Det går att ha fler än ett tröskelvärde för en signal. Man skapar då en mängd
intervall där varje intervall representerar en viss typ av pixel (två intervall kan
motsvara samma pixeltyp).
4.4
Segmentering
Segmentering [11] av en bild innebär att områden grupperas ihop baserat på någon
egenskap. Vad egenskapen är beror på tillämpningen. En kantkarta innehåller endast information om en pixel är en del av en kant eller inte, kanterna representeras
på en väldigt låg nivå. Det kan vara intressant att länka ihop närliggande kantpixlar
till kantsegment, för att sedan länka ihop dessa till än mer avancerade strukturer.
Pseudo-algoritm för segmentering:
• Etikett = 1.
• För varje pixel, vänster till höger, uppifrån och ner.
– Om pixeln har egenskapen.
∗ Om åtminstone en granne har egenskapen och alla grannar har samma etikett, kopiera etiketten till den här pixeln.
∗ Om åtminstone två grannar har egenskapen men har tidigare tilldelats olika etiketter, kopiera någon av etiketterna till den här pixeln
och notera att de alla är ekvivalenta.
∗ Om ingen granne har egenskapen, kopiera nuvarande etikett till den
här pixeln och inkrementera etiketträknaren.
• Gruppera alla etiketter som är ekvivalenta i klasser.
37
• För varje pixel.
– Tilldela pixeln värdet av den klass dess etikett tillhör.
4.5
Deformerbara kurvor
Deformerbara kurvor är en global bildbehandlingsteknik som kan användas för att
bl.a lokalisera kanter i en bild. De tekniker som beskrevs i avsnitt 4.3 är lokala,
vilket betyder att man undersöker ett område i taget utan att ta hänsyn till att ifall
två kanter upptäcks nära varandra är det möjligt att det egentligen är två delar av
samma kant.
”The Hough Transform” [3] kan utifrån en mängd kantfragment beräkna de
mest framträdande linjerna. Nackdelen är att linjerna är raka och inte har någon
start eller slutpunkt. Man kan kombinera informationen med kantfragmenten för
att avgöra vilka av dem som är tillräckligt sammanhängande för att räknas som en
kant. Två kantfragment som ligger längs samma linje kan kopplas ihop till en kant.
En deformerbar kurva definieras som en funktion f (s) där s sträcker sig över
kurvans längd. Att uttrycka en kurva som en funktion gör det möjligt att diskutera
konceptet med deformerbara kurvor utan att fastna för en viss sorts kurva. Antalet
dimensioner är inte heller relevant utan samma tillvägagångssätt kan användas för
varje dimension. Deformerbara kurvor är en iterativ metod som söker sig till en
stabil lösning. Det finns två sorters kurvor:
• I en sluten kurva är första och sista punkten en och densamma. Denna kurva kan användas för att lokalisera och markera omkretsen på ett föremål.
Man måste vara försiktig när man bestämmer vilka egenskaperna en kurva
förväntas ha så att det inte slutar med att alla punkter sammanfaller till en
punkt.
• För en öppen kurva, där första och sista punkten är olika, kan det vara praktiskt att låsa start- och slutpunkten vid strategiska positioner, ty annars kan
det hända att alla punkterna söker sig till samma position och man får en
punkt istället för en kurva.
En deformerbar kurvas beteende regleras i projektet av en energifunktion Esnake .
Målet för den iterativa algoritmen är att minimera Esnake så att en stabil lösning
erhålles. Om man tittar på varje iteration hur kurvan utvecklas så ser det ut som
den rör sig över bilden alltmedan den söker en optimal form (den ser ut som en
orm, därav smeknamnet ”Snake”). Det fullständiga uttrycket för Esnake är:
Êsnake =
Z
1
Esnake (f (s))ds
0
=
Z
1
α ∗ Eint (f (s)) + β ∗ Eext (f (s)) + γ ∗ Econ (f (s))ds
(4.16)
0
• Eint - Energi som beror på hur mycket kurvan avviker från dess önskade form.
38
• Eext - Energi som påverkas av yttre faktorer, t.ex egenskaper i en bild. Den
här sortens energi är ofta kostsam att beräkna. Därför brukar man utföra alla
beräkningar i förväg och spara dessa i en uppslagningstabell.
• Econ - Energi som ser till att kurvan följer vissa restriktioner för hur den får
utvecklas (används inte i det här projektet och kommer inte att nämnas mer).
För att kunna använda ekvation 4.16 måste den uttryckas i diskreta termer, vilket
man gör genom att utvärdera funktionen f (s) vid diskreta värden på s och sedan
beräkna.
X
α ∗ Eint (fn ) + β ∗ Eext (fn ) + γ ∗ Econ (fn )
(4.17)
Êsnake =
n
Faktorerna α, β och γ används för att reglera hur viktiga de respektive termerna
är. Algoritmen söker den kurva som har den minsta energinivån. Idéen är att man
för varje punkt beräknar energifunktionens gradient med avseende på den. När
alla gradienter är beräknade uppdaterar man kurvans punkter i motsatt riktning i
förhållande till deras respektive gradient. Se figur 4.5 för ett exempel på hur Eint
beräknas för elasticitet, där α skalar gradientens längd.
Intern energi
Det finns två egenskaper som är vanliga för att bestämma en kurvas form:
• Elasticitet - Kurvan fungerar som ett gummiband, som vill bibehålla en viss
längd.
• Böjning - Begränsar hur stor böjning som är acceptabelt, fungerar bäst för
slutna kurvor eftersom öppna kurvor får som effekt att tryckas ut som en rak
linje, vilket elasticiteten redan gör.
I det här projektet används öppna elastiska kurvor. Energifunktionen och dess gradient för elasticitet beräknas enligt.
Eint = (pi+1 − pi )2 + (pi−1 − pi )2
∂Eint
= 2 ∗ (2 ∗ pi − pi−1 − pi+1 )
∂pi
(4.18)
(4.19)
Den här typen av elasticitet försöker minimera längden av kurvan på båda sidor
av en punkt. Om inget mer används kommer alla punkter att samlas på samma
position. Kvadraten på avstånden används för att avstånden mellan två punkter
alltid är positiv (se figur 4.5).
Extern energi
Extern energi uppstår från pixelvärdena i bilden som kurvan rör sig över. För att
öka prestandan av minimeringsalgoritmen kan man i förväg beräkna en vektorfält
39
där varje position innehåller en vektor som pekar i vilken riktning en punkt ska röra
sig för att komma till ett minima enligt bildens egenskaper.
Ett alternativ är att man följer gradienten över bilden, eller så kan man beräkna
var kanterna finns och söka efter dom direkt. Att söka sig till kanter kräver att
man först beräknar vilka pixlar som är kantpixlar (se avsnitt 4.3), och därefter
gradienten (se avsnitt 4.2.4) över bilden. Gradientvektorerna pekar då i riktning
mot den närmaste kanten i bilden.
Ett problem är räckvidden för informationen i en bild. Endast närliggande pixlar
vet något om varandra. Det är speciellt ett problem om man utgår från kanterna
i bilden. En punkt måste vara väldigt nära en kant för att ens veta att den finns.
För att öka räckvidden kan man använda ett filter (se avsnitt 4.2.4) som sprider
information till pixlar ännu längre bort från kanten. Nackdelen med den metoden
är att precisionen för var exakt en kant finns blir sämre ju större utjämningsfilter
man använder. Större räckvidd ger sämre precision.
”Gradient Vector Flow” [8] är en teknik som har stor räckvidd utan att förlora
precision. Tyvärr innefattar den att beräkna lösningen till minimering av en energifunktion vilket man gör numeriskt och kan ta lång tid. Vektorerna styrs som ett
flöde (därav namnet) genom bilden vilket ger ett mer naturligt beteende än den
vanliga metoden. Vektorflödet definieras som v(x, y) = [u(x, y), v(x, y)] och f (x, y)
är kantfunktionen (man kan låta 0 symbolisera ingen kant och 1 en kant eller så kan
man låta kanterna ha olika styrka, vad som passar bäst beror på tillämpningen).
Energifunktionen som ska minimeras blir.
Eext =
Z Z
µ(u2x + u2y + vx2 + vy2 ) + |∇f |2 |v − ∇f |2 dxdy
(4.20)
Vid en icke kantpixel är |∇f | liten och energin domineras av den första termen,
vilket resulterar i ett sakta varierande fält. Om |∇f | är stort så domineras energin
av den andra termen och minimeras genom att sätta v = ∇f . Det här gör att
vektorfältet är likt gradienten av kantfunktionen när den är stor, men i homogena
områden varierar den sakta. Parametern µ regulerar den relativa betydelsen av
första och andra termen, för stort brus i bilden ska µ ökas.
En iterativ lösning för minimeringen av ekvation 4.20 får man genom följande
uttryck:
bx,y = fx (x, y)2 + fy (x, y)2
c1x,y = bx,y fx (x, y)
c2x,y = bx,y fy (x, y)
un+1
= (1 − bx,y ∆t)unx,y + r(unx+1,y +
x,y
unx,y+1 + unx−1,y + unx,y−1 − 4unx,y ) + c1x,y ∆t
(4.21)
n
n+1
n
vx,y
= (1 − bx,y ∆t)vx,y
+ r(vx+1,y
+
n
n
n
n
vx,y+1
+ vx−1,y
+ vx,y−1
− 4vx,y
) + c2x,y ∆t
µ∆t
r =
∆x∆y
40
(4.22)
(4.23)
Där n anger tidsteg, ∆x, ∆y och ∆t är upplösningen spatialt och temporalt. Tidsteget ∆t måste uppfylla följande villkor för att garantera konvergens.
∆t ≤
∆x∆y
4µ
(4.24)
All ovanstående information om ”Gradient Vector Flow” finns beskrivet i den ursprungliga artikeln [8].
Man kan beräkna det nya värdet för en position på flera olika sätt, där varje
metod har sina för- respektive nackdelar. Två av dessa metoder [4] är:
• Jacobi - Beräkna de nya värdena utifrån de gamla. Detta kräver dubbel uppsättning av data, gamla och de nya värdena. Metoden har långsam konvergens
jämfört med andra metoder, men ger ett bra resultat.
• Gauss-Seidel - Använder en uppsättning värden. Uppdatering av en position
sker med hjälp av nya värden för grannpositioner som redan har uppdaterats
under nuvarande iteration och gamla värden för de övriga grannarna. Metoden
har bättre konvergens än Jacobi, men ger inte lika bra resultat då man drar
värden från ena hörnet ned till motsatt hörn under varje iteration. För att
motverka detta kan man rotera mellan vilket av hörnen man ska börja vid.
4.5.1
Multigrid
I avsnitt 4.5 beskrevs en iterativ numerisk metod för att finna en lösning till ett
minimeringsproblem. Liknande metoder används ofta för att lösa komplicerade differentialekvationer numeriskt då en analytisk metod inte går att använda (vilket
det nästan aldrig gör i praktiken). Problemet med dessa metoder är att tiden det
krävs för att hitta en lösning ökar kvadratiskt. Om man dubblerar bildstorleken tar
det alltså fyra gånger så lång tid. Om man använder Jacobis metod sprids informationen över bilden en pixel per iteration, vilket gör att en större bild även kräver
fler iterationer.
Vilket storlek på bilder som räknas som för stora ökar i takt med att datorer
blir allt snabbare, men inte lika snabbt (se tidigare paragraf). Större bilder gör det
möjligt för mer detaljerad information från t.ex vädersatelliter vilket gör att man
alltid vill kunna arbeta med största möjliga upplösning. För att lösa stora problem
inom rimlig tid byter man precision i svaret mot ökad prestanda genom att använda
en ”Multigrid” [4] teknik.
Idéen består av att man har flera uppsättningar av samma mätdata, men i olika upplösningar, från den finaste upplösningen till den grövsta. Bilderna sorteras i
nivåer efter upplösning. De grövre nivåerna innehåller den övergripande informationen, en global approximation av data, medan de finare nivåerna innehåller lokala
detaljer.
Beräkningarna utförs över alla nivåer med några iterationer på varje, vilket är
orsaken till den förbättrade prestandan. När iterationerna för en nivå är färdiga
överförs dess värden till nästa nivå:
41
• Den ursprungliga bilden måste ha dimensionerna (2m + 1, 2n + 1) för godtyckliga värden på m och n. Dimensionerna på det närmast grövre nivån blir då
(2m−1 + 1, 2n−1 + 1).
• Man kan bara överföra värden mellan två intilligande nivåer.
Överföringen av värden sker med två olika operatorer:
• Restrict - Kopierar värden från en nivå till ett grövre. Den grövre nivån har
färre antal pixlar vilket gör att värdena för flera pixlar i den finare nivån
kombineras till en pixel i den grövre.
• Interpolate - Kombinerar värdena för flera pixlar i den grövre nivån till en
pixel i den finare.
Operatorerna kan beskrivas som ett par filter.


0 1 0
1 

Restrict = ∗  1 4 1 
8
0 1 0


1 2 1
1 

Interpolate = ∗  2 4 2 
4
1 2 1
För att beräkna kantpixlarnas värden måste filtren modifieras eftersom de inte har
lika många grannpixlar. Det går även att använda andra filter med motsvarande
egenskaper. Se figur 4.6 för hur operatorerna fungerar.
Det finns flera olika sätt att variera mellan de olika nivåerna, som till exempel:
• V-cykel - Börja med den finaste nivån, arbeta ned till den grövsta och sedan
tillbaka.
• W-cykel - Sätt ihop två V-cykler.
• Multi-cykel - Sätt ihop flera V-cykler, men för varje utöver den första, gå ner
en nivå kortare.
4.6
Delaunay triangulering
En triangulering av data innebär att man utifrån en mängd punkter skapar en
mängd trianglar som spänner över samma område utan att två trianglar överlappar.
Ett intuitivt exempel kan vara att visualisera en karta i tre dimensioner, man väljer
då ut punkter från kartan och skapar en triangulering mellan dem. Dessa trianglar
kan man sedan med hjälp av ett grafikpaket rita upp i en tredimensionell miljö.
Det enklaste sättet man kan välja ut punkter är att använda ett rutnät och plocka punkter med jämna avstånd från varandra. Den tekniken har följande nackdelar:
42
• För att få hög upplösning krävs det många punkter vilket i sin tur betyder
att mycket minne behövs.
• Alla områden i bilden anses som lika viktiga tilldelas lika många punkter. Men
ett område med hög varians i höjdled, som ett berg, kräver fler punkter än
åkermark som har relativt låg varians för att uppnå samma kvalitet. En ökning
av antalet punkter ger bättre resultat för berget, men samtidigt används fler
punkter över åkermarken utan att tillföra särskilt mycket.
• Genom att använda ett rutnät för att avgöra vilka punkter som ska användas
finns det en risk för att viktiga egenskaper missas. Punkten som representerar
toppen av ett berg missas medan de omkringliggande punkterna (som alla är
lägre) används. Modellen får då fel maxhöjd.
”Delaunay triangulering” [13] är en TIN-metod vilket innebär att den skapar oregelbundna trianglar utifrån en godtycklig mängd punkter. ”Delauney triangulering”
adresserar bristerna i rutnätsmetoden genom att tillåta varierande antal punkter i
områden beroende på den lokala variansen av dess värden. Nätverket av trianglar
skapas genom att man betraktar en punkt i taget och avgör vilka befintliga trianglar som är tillräckligt nära den punkten för att påverkas. Unionen av trianglarna
formar en konkav polygon. Trianglarna ersätts med de trianglar som bildas mellan
varje kant i polygonen och den nya punkten (se figur 4.7). Om en punkt ligger inom en triangels circumcircle så påverkas triangeln av punkten. Om A, B och C är
triangelns hörn och A2 = A2x + A2y så beräknas circumcircle genom följande formler
som kommer från Wikipedia [14].
A
x Ay 1 a = det Bx By 1 Cx Cy 1 A2 A
y 1
1
2
Sx =
det B By 1
2
2
C
Cy 1
A
2 1
x A
1
2
Sy =
det Bx B 1
2
Cx C2 1
A
2
x Ay A
b = det Bx By B2
Cx Cy C2
circumcenter =
circumradius =
S
a
s
b S2
+ 2
a
a
Pseudo-algoritm för ”Delaunay triangulering”:
43
(4.25)
(4.26)
1. Initiera en tom kö för att spara alla trianglar.
2. Skapa en ”supertriangel” (c0 , c1 , c2 ) som omfattar alla punkterna med god
marginal och placera den i kön.
3. För varje punkt p i mängden.
• Plocka ut alla trianglar från kön för vilken p ligger inom triangelns circumcircle.
• Skapa en polygon genom att ta unionen av trianglarna, de kanter från
en triangel som hamnar inuti polygonen tas bort.
• För varje kant k i polygonen.
– Beräkna triangeln t mellan p och hörnen av k.
– Lägg till t i kön.
4. Ta bort alla trianglar från kön som har en eller flera av c0 , c1 eller c2 som
hörn.
5. Returnera mängden av trianglar i kön.
4.7
Bilinear filtrering
I interaktiva datormiljöer representeras objekt oftast som en mängd trianglar3 för
att ge den grova strukturen. Detaljerna för ett objekt beskrivs av bilder som ritas på
trianglarna. Hela bilden behöver inte få plats på en triangel. Utöver koordinaterna
för positionen behövs även ett par koordinater, u och v, som beskriver i vilken del
av bilden ett hörn är placerad. Bilden sträcks över triangeln.
När en triangel ritas i samma storlek som bilden så motsvarar en pixel i triangeln
en pixel i bilden, men om triangeln är större måste ett värde mellan två bildpixlar
approximeras. Den enklaste metoden är att välja samma värde som den närmaste
pixeln, men när triangeln blir tillräckligt stor går det att urskilja ett kvadratiskt
område med uniform färg för varje bildpixel. En bättre metod är att kombinera
värdena av de fyra närmaste bildpixlarna med vikter baserat på avståndet till pixeln.
Metoden kallas Bilinear filtrering och fungerar på följande sätt:
• (u, v) - Koordinater i bilden.
• (uint , vint ) - Heltalsdelen av (u, v).
• (uf rac , vf rac ) - Bråkdelen av (u, v).
• c0,0 - Pixel (uint , vint ) i bilden.
• c1,0 - Pixel (uint + 1, vint ) i bilden.
Vid skrivandet av den här rapporten är grafikkorten i persondatorer optimerade för att rita
trianglar.
3
44
• c1,1 - Pixel (uint + 1, vint + 1) i bilden.
• c0,1 - Pixel (uint , vint + 1) i bilden.
bilinear(u, v) = c0,0 (1 − uf rac )(1 − vf rac ) +
c1,0 (uf rac )(1 − vf rac ) +
c1,1 (uf rac )(vf rac ) +
c0,1 (1 − uf rac )(vf rac )
4.8
(4.27)
Sammanfattning
Beskrivning av var och hur de olika bildbehandlingsteknikerna används i projektet.
• Faltning.
– Utjämning för att minska mängden brus i en bild.
– Kanter upptäcks med hjälp av gradienter.
• Deformerbara kurvor används för att markera ut de kanter som representerar
konturerna.
• Multigrid är en metodik med vilken man utför beräkningar i flera olika nivåer
av noggrannhet. Den används för att snabba på beräkningarna av vektorfälten.
Vektorfälten behövs för att de deformerbara kurvorna ska kunna anpassa sig
efter konturerna i en bild.
• Delaunay triangulering används för att dela in en mall i trianglar. Punkter
längs kurvorna används för att representera trianglarnas hörn. Motsvarande
uppdelning av områden i trianglar görs för varje provbild. På så sätt får man
en 1-till-1 relation mellan trianglarna i mallen och trianglarna i en provbild.
Vridningen av en provbild utförs genom att överlagra dess trianglar på motsvarande trianglar i mallen. För att få en stegvis vridning interpoleras hörnkoordinaterna mellan mallen och provbilden, baserat på mängden vridning.
• Bilinear filtrering används för att approximera värdet i en bild mellan fyra distinkta koordinater. Ibland måste algoritmer som arbetar med bilder använda
decimala koordinater för att få tillräckligt bra resultat (t.ex vid förstoring av
en bild eller när man läser av ett vektorfält).
45
Figur 4.3. Illustration av derivatan för en rad i en bild. Bild med den mittersta
raden markerad, radens värden sett från sidan och derivatan av den endimensionella
radfunktionen.
46
Figur 4.4. Heiligenblut vid foten av Grossglockner (Österrike). Från vänster till
höger, originalbild, gradientmagnituden skalad till intervallet 0..1, förvandlad av ekvation 4.15 med α = 10 och β = 255, bild tre nerskalad till 0..1 och trösklad med
T = 0.2, bild tre nerskalad till 0..1 och trösklad med T = 0.4
47
Figur 4.5. p0 = (2, 1), p1 = (4, 3), p2 = (8, 2), beräkning av gradienten (den heldragna pilen) för elasticiteten vid punkt p1 .
48
Figur 4.6. De ifyllda prickarna representerar pixlar som finns i båda nivåerna medan
de resterande endast finns i den finare nivån, den större pricken indikerar för vilken
position ett nytt värde ska beräknas. Restrict operatorn kombinerar de fem närmaste
pixlarna i den finare nivån. Interpolate operatorn har tre fall, pixeln finns i båda
nivåerna, närmaste i den grövre nivån ligger till vänster och höger, närmaste i den
grövre nivån ligger längs diagonalerna.
49
Figur 4.7. Bild ett visar att två trianglar påverkas när en ny punkt ska läggas till,
trianglarna tas bort och fyra nya skapas enligt bild två.
50
Kapitel 5
Sammanfattning
Efter en beskrivning av de medicinska aspekterna i projektet har ett program för att
analysera en mängd bilder skapats. Utöver beräkningar och det grafiska gränssnittet
behövde data lagras på ett strukturerat vis. Minneskravet under körning skulle vara
såväl hanterbart som effektivt. Bilderna anpassas efter en gemensam mall genom
att en bild vrids så att motsvarande partier upptar samma områden i mallen. Det
finns flera faktorer som gör det svårt att isolera de intressanta kantkonturerna:
• Förstoring - Aortorna är bara några centimeter långa vilket gör att bilderna
måste tas via ett mikroskop för att man ska kunna urskilja tillräckligt mycket
detaljer. Problemet är att vid den förstoringen så kan man även se ojämnheter
i provbrickan tillsammans med eventuellt damm, vilket i sin tur resulterar i
att en del pixlar felaktigt klassificeras som kanter. Stor del av detta brus tas
bort genom segmentering.
• Plack - Kanter upptäcks genom att jämföra intensiteterna för intilliggande
pixlar. Stor skillnad indikerar en kant. Problemet det här fallet kommer sig
av att placket har en väldigt ljus färg medan kärlväggen (backgrunden) är
ganska mörk, vilket gör att ointressanta kanter markeras. Kanterna påverkar
vektorfältet negativt då programmet inte kan avgöra vilka kanter som tillhör
konturerna.
• Bredd - Sättet som kanter upptäcks gör att kanterna ofta markeras med en
bredd större än en pixel, vilket minskar precisionen när kurvorna ska anpassas.
Om kanternas bredd kunde minskas till en pixel borde resulatet bli mer exakt.
Trots problemen kan programmet underlätta arbetet med att hitta konturerna i
en bild av en aorta, vilka behövs för att anpassa bilden efter en mall. Projektet
avslutas med en mängd förslag på områden som kan undersökas för att förbättra
användarstödet samt resultatet av anpassningen.
Om förvanskningen av bilderna som orsakas när de anpassas efter mallen är
acceptabla är upp till användaren att bedömma. Ju närmare aortans konturer motsvarar konturerna i mallen desto bättre blir resultatet. Användaren har möjlighet
51
att stegvis se hur bilden vrids, vilket gör det lättare att avgöra ifall förvanskningen
är acceptabel.
Programmet innehåller tillräcklig funktionalitet för att användas som ett hjälpverktyg vid analys av provbilder när hypotesen (se avsnitt 2.1) ska verifieras. Figur 5.1 illustrerar hur intensitetskartan för tio olika provbilder skulle kunna se ut.
Uppdragsgivaren vid Karolinska Institutet är nöjd med programmet och det finns
Figur 5.1. Ett exempel på hur programmet visualiserar fördelningen av plack över
tio olika bilder. En HSB färgskala används som går från blått till rött.
goda möjligheter att det till slut används i deras projekt.
52
Litteraturförteckning
[1] Active Contours, Andrew Blake and Michael Isard (1998). Springer, ISBN: 3540-76217-5.
[2] Computer Algorithms: Introduction to Design and Analysis, Sara Baase, Allen
Van Gelder. Addison Wesley Publishing Company, ISBN: 0-201-61244-5.
[3] Digital Image Processing, Gonzalez R. C., Woods R. E. Addison Wesley
Publishing Company, ISBN: 0-201-60078-1.
[4] Foundations of Multithreaded, Parallel, and Distributed Programming, Gregory
R. Andrews (2000). Addison Wesley Publishing Company, ISBN: 0-201-357526.
[5] Fysiologi, andra upplagan, Jan Lännergren, Mats Ulfendahl, Thomas Lundeberg och Håkan Westerblad. Addison Wesley Publishing Company, ISBN: 9144-00842-2, sidor: 248-251, 257-261, 270-274.
[6] Leukocyte-Endothelial interactions in arteries in vivo, a new concept in the
study of physiology and disease in large blood vessels, Einar Eriksson. Department of Physiology and Pharmacology Karolinska Institutet, S-171 77 Stockholm, Sweden 2001 ISBN: 91-7349-098-9, sidor: 20-22, Arbete III.
[7]
”Snakes: Active Contour Models”, Michael Kass, Andrew Witkin, and Demetri
Terzopoulos. International Journal of Computer Vision, 1988, pp. 321-331.
[8]
”Snakes, Shapes, and Gradient Vector Flow”, Chenyang Xu, Student Member,
and Jerry L. Prince, Senior Member. IEEE Transactions on image processing,
vol. 7, no. 3, march 1998.
[9]
”A Computational Approach to Edge Detection”, Canny, J., IEEE Trans. on
Pattern Analysis and Machine Intelligence, vol. PAMI-8, no. 6, November 1986,
pp. 679-698.
[10] Active contour models (Snakes), David Young, March 1995.
http://www.cogs.susx.ac.uk/users/davidy/teachvision/vision7.html
dan var aktiv 2006-01-09).
53
(hemsi-
[11] Identifying connected components,
http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/LECT3/node2.html
(hemsidan var aktiv 2006-02-07).
[12] Image Analysis and Communication Lab, GVF Algorithm,
http://iacl.ece.jhu.edu/projects/gvf/ (hemsidan var aktiv 2006-01-09).
[13] Triangulate - Efficient Triangulation Algorithm Suitable for Terrain Modelling,
Delaunay triangulation,
http://astronomy.swin.edu.au/˜pbourke/modelling/triangulate/
(hemsidan
var aktiv 2006-01-09).
[14] Wikipedia - Den fria encyklopedin,
http://en.wikipedia.org/wiki/Main_Page (hemsidan var aktiv 2006-01-20).
http://en.wikipedia.org/wiki/Circumcircle (hemsidan var aktiv 2006-01-30.
http://en.wikipedia.org/wiki/Linear_operator (hemsidan var aktiv 2006-0130.
54
Bilaga A
Ordlista - Medicin
I de delar av den här rapporten som innehåller medicinska fakta används en del latinska ord, den här ordlistan är till för att underlätta förståelsen av vad de betyder
på svenska.
Aorta
Atheroskleros
Carotidartär
Celladhesionsmolekyler
Claudicatio intermittens
Endotel(ium)
En face
Fagocyteras
Fenotyp
Hypoxi
Leukocyter
Nekros
Skleros
Subendotelialt
Den stora blodådern som är kopplad direkt till hjärtat.
Åderförkalkning.
Halspulsåder.
Rekryterar leukocyter från blodbanan.
Fönstertittarsjukan, förträngning av
benens artärer.
Det lager av celler som täcker blodkärlens insida.
Med rätt sida upp.
“Äts upp av...”.
Utseende och funktion.
Syrebrist.
Vita blodkroppar.
Lokal vävnadsdöd.
Förhårdning av kroppsvävnad.
Under endotelcellslagret.
55
Bilaga B
Ordlista - Dator
Engelska är det språk som används mest inom datorvärlden och datortermer skrivs
därför oftast på engelska. Att översätta termer till svenska brukar ofta bara leda
till minskad förståelse då de flesta är vana att läsa dem på engelska. För den som
inte är bekant med dessa termer kan använda sig utav den här listan för att få en
svensk beskrivning. Även filer och kommentarer i källkodsfilerna skrivs på engelska
av samma orsak.
A priori
Byte
Circumcircle
Faltning
Gradient
HSB
Interpolate
Kernel
Pixel
Polygon
Restrict
RGB
Sampled
Segmentering
Snakes
TIN
XML
Latin för kända fakta, vad man vet innan erfarenheter.
Enhet som kan lagra ett värde i intervallet 0..255.
En cirkel vars omkrets ligger på en triangels tre
hörn.
Applicering av linjära filter på en signal.
Lutning eller riktning vid en viss punkt.
Hue, saturation and brightness. Beskrivning av en färg.
Operator, beräkna värdet på okända punkter mellan kända.
En lista av udda längd med filtervärden.
Bildpunkt.
En mängd slutet sammankopplade punkter. I en konkav
polygon kan alla par av punkter bilda en linje som inte
korsar någon av polygonens kanter.
Operator, motsvarande signal fast med färre antal värden.
Röd, grön och blå.
Mäta värden vid diskreta punkter i en kontinuerlig signal.
Dela upp en bild i områden baserat på dess egenskaper.
Ett smeknamn på deformerbara kurvor.
Oregelbundet nätverk av trianglar
(Triangulated Irregular Network).
eXtensible Markup Language, en teknik för att strukturera text.
57
TRITA-CSC-E 2006: 032
ISRN-KTH/CSC/E--06/032--SE
ISSN-1653-5715
www.kth.se