: Automatisk detektion av lungemboli ur scintbilder Susann Stjernqvist, F00 och Handledare: Anders Ericsson HT2003 1
Innehåll 1 Syfte 3 2 Teori 3 2.1 SCINTbilder............................. 3 2.2 Snakes................................. 3 2.3 GVF.................................. 5 3 Metod 6 4 Resultat och diskussion 6 5 Sammanfattning 7 6 Källförteckning 8 2
1 Syfte Syftet med projektet är att studera SCINTbilder på lungor och utifrån dessa avgöra om en patient har lungemboli. Första uppgiften är att segmentera ut lungorna med en snake som bygger på Gradient Vector Flow, GVF. För att avgöra om en patient är frisk eller sjuk granskas krökningen hos de utsegmenterade lungorna. 2 Teori 2.1 SCINTbilder SCINTbilder har under en längre tid använts som metod för att diagnosticera lungemboli. Patienten får först inhalera en svagt radioaktiv gas. Med en gammakamera tas sedan bilder på patientens lungor i olika vinklar. Patienten får därefter en injektion med ett svagt radioaktivt ämne och samma set av bilder tas. Det finns nu två bilder i varje vinkel, en som visar luftflödet och en som visar blodflödet i lungorna. Se figur 1 och figur 2. Med dessa bilder kan man sedan avgöra om patienten har lungemboli eller inte. Om patienten har lungemboli kommer det finnas område där det finns luft men inte blod. På bilderna syns detta som hack in i lungorna[1]. 2.2 Snakes Snakes, eller Active Contours, är datagenererade kurvor som rör sig inom bilder för att hitta kanter på objekt. Denna segmenteringsmetod används flitigt inom bildanalys och datorseende. Interna krafter, från kurvan i sig, och externa krafter, från bilden den rör sig i, får kurvorna att röra sig. Krafterna genereras och anpassas så att kurvorna rör sig enligt önskemål. I den parametriska snaken, som är en av föregångarna till GVF-snaken som har använts i vårt fall, så består de externa krafterna framförallt av potentiella krafter som drar snaken mot kanterna. Den potentiella kraften definieras som den negativa gradienten på en potentialfunktion. De interna krafterna finns för att hålla ihop kurvan och se till att den inte böjer sig för mycket. Kurvan, x = [x(s), y(s)], s [0, 1], ska minimera energifunktionen: E = 1 0 1 2 (α x (s) 2 + β x (s) 2 ) + E extern (x(s))ds (1) Det fanns hos denna föregångare, och hos andra, två stora problem. Det första problemet var att då kurvan initierades så var den tvungen att ligga väldigt nära objektet som skulle segmenteras ut, annars så skulle den troligen konvergera till fel resultat. En lösning till detta problem var att göra det externa kraftfältet starkare och därmed få snaken att dra sig till rätt position. Det andra problemet var att kurvorna inte kunde hitta konkava kanter såsom fördjupningen i bokstaven U. Detta problem hade man ingen lösning till. Så fort man försökte lösa problemet med en metod så dök nya problem upp, osv. Det behövdes alltså ett nytt tänkade för att få rätt på problemet[2]. 3
20 40 60 80 100 120 20 40 60 80 100 120 Figur 1: Luftflöde i lungorna 20 40 60 80 100 120 20 40 60 80 100 120 Figur 2: Blodflöde i lungorna 4
2.3 GVF De första som lyckades klara av båda dessa problemen utan att möta nya olösbara problem var Chenyang Xu och Jerry Prince. De kallar sin metod för gradient vector flow, GVF. Där bestäms den externa kraften genom att beräkna diffusionen (strömningen) i en gråskalig eller binär edgemap. För att lösa ekvation 1 så måste ekvationen uppfylla F intern + F extern = 0. Ekvationen kan lösas med eulerekvationer. Med GVF så bestäms en ny F extern som fungerar bättre än den gamla. GVF-fältet definieras som det vektorfält v(x, y) = (u(x, y), v(x, y)) som minimerar energifunktionen: Ẽ = µ(u 2 x + u2 y + v2 x + v2 y ) + f 2 v f 2 dxdy (2) Parametern µ reglerar sambandet mellan de två termerna. Ju mer störningar i bilden ju större ska my vara. Första steget är att skapa en edge map f(x,y) från den ursprungliga bilden I(x,y). Denna edge map ska ha större belopp för punkter nära bildens kanter än för punkter längre bort. Den sätts därefter in i definitionen av GVF (ekvation 2) och även denna kan sedan lösas med hjälp av eulerekvationer. Då v är bestämd sätts den in som F extern i snaken och vi har nu fått en GVF-snake vilken klarar av de önskade sakerna. Ytterliggare en sak som den kan göra som inte den traditionella snaken klarar av är att initialiseras tvärs över föremålets kant och ändå omringa på rätt sätt. Ett exempel på ett GVF-fält kan beskådas i figur 3[3]. Figur 3: GVF-fältet för ett U-format objekt. Vektorerna drar till sig snaken. Slutresultatet blir att snaken ligger snyggt och fint runt objektets kanter. 5
3 Metod Arbetet har utgått från det färdiga exempel som finns på Xu och Princes hemsida 1 som sedan anpassats till detta projekt. Först skulle en edge map skapas. Då användes en canny -mask. För att kunna göra detta så fick bilderna blurras då orginalbilderna var mycket brusiga. För att blurra så användes GaussianBlur, ett program som medföljde exemplet. Detta program faltar bilden med en gausskärna. När en acceptabel edge map hade fåtts fram så användes denna till att beräkna GVF-fältet. Själva uträkningen sköttes av ett medföljande program GVF.m som baserar sig på teorin om GVF-fält. Nästa steg var att initiera snaken på rätt sätt. Initialsnaken var cirkelformad och uppgiften blev att anpassa dess storlek och centrumposition till lungorna. GVF-snaken applicerades på två bilder, en luftbild och en blodbild. För att kunna se de avvikelser som sjukdomen medför, beräknades krökningen för kurvorna som skapats. Först gjordes en båglängdsparametrisering för att få samma avstånd mellan alla punkterna. Därefter bestämdes krökningen som beloppet av andraderivatan. Krökningen hos kurvorna för de två bilderna jämfördes. Om patienten var sjuk så skulle krökningen hos blodbilden vara större än den från luftbilden, medan de båda skulle vara lika hos en frisk patient. 4 Resultat och diskussion Problemet med inställningen av blurrningsparametern var att får bort bruset men ändå ha kvar kanterna på lungorna. Här fick en avvägning göras. Om parametern valdes för stor så suddades en del av kanterna ut helt och kantdetektorn kunde inte hitta dem. Om den istället valdes för liten så hittade detektorn för många kanter. Ett tröskelvärde i kantdetektorn sattes in för att ta bort onödiga kanter som bruset orsakat. Även här uppstod ett avvägningsproblem. Det var lätt att ta bort fel kanter. De felaktiga kanterna, som trots allt fanns kvar, gjorde att delar av GVF-fältet blev riktat åt fel håll och inte alls så fint och symmetriskt som i figur 3. Det provades även att ändra på parametern µ men det konstaterades ganska snart att det förinställda värdet var det bästa. Snaken hade en tendens att fastna på felaktiga kanter inne i lungorna. Det blev därför viktigt att initiera snaken på rätt ställe. Det gjorde också att det var viktigt att storleken på snaken var så pass stor att den täckte större delen av lungorna. Den fick heller inte vara för stor då den istället drogs mot felaktiga kanter i ovandelen av bilden (troligtvis luftstrupen). Att ha två ovala snakes, en för var lunga, provades också. Fördelen med den metoden var att man slapp den linje som uppstod mellan lungorna då endast en snake användes. Lungorna var 1 http://iacl.ece.jhu.edu/projects/gvf under software 6
ofta placerade på olika ställen i bilderna vilket gjorde att initialvärdena skulle ha behövts ändras för varje bild. Metoden förkastades därför. 20 40 60 80 100 120 20 40 60 80 100 120 Figur 4: Lunga på vilken snaken appliceras 30 40 50 60 70 80 90 30 40 50 60 70 80 90 100 Figur 5: Resultatet När krökningen hade beräknats och värdena för de två bilderna skulle jämföras så uppnåddes inte önskat resultat. Krökningen hos sjuka patienters blodbild var inte större än deras luftbild så som det hade önskats. Ofta var krökningarna ganska lika och ibland var t.o.m. luftbildens krökning större än blodbildens. En trolig anledning till det felaktiga resultatet är att när bilden blurrades och trösklades så dämpades hacken som fanns i de sjuka patienternas blodbilder och snaken hittade inte hacken. 5 Sammanfattning Sammanfattningsvis kan man säga att vår metod inte fungerar så bra för de bilder vi fått. Den stora orsaken till det dåliga resultatet är att bilderna är för brusiga vilket får negativa konsekvenser. Då bilden blurras och trösklas så försvinner väsentliga kantdelar som skiljer frisk från sjuk. Med en annan teknik för att få fram bilder eller en bättre kantdetektor så skulle säkert ett bättre resultat kunna uppnås. 7
6 Källförteckning Referenser [1] Marika Bajc, Ulf Albrechtsson, Carl-Gustav Olsson, Berit Olsson and Björn Jonson ; Comparison of ventilation/perfusion scintigraphy and helical CT for diagnosis of pulmonary embolism; strategy using clinical data and ancillary findings; http://www.blackwellsynergy.com/links/doi/10.1046/j.1475-097x.2002.00448.x/abs/; 2003-11-20 [2] Chenyang Xu, Jerry L. Prince;Snakes, Shapes, and Gradient Vector Flow; http://iacl.ece.jhu.edu/pubs/p084j.pdf; 2003-11-21 [3] Chenyang Xu, Jerry L. Prince;Gradient Vector Flow: A New External Force for Snakes; http://iacl.ece.jhu.edu/pubs/p087c.pdf; 2003-11-22 8