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