Önálló laboratórium dokumentáció Képfeldolgozás orvosi alkalmazásai CT képfeldolgozás
Pollák Tamás Konzulens: Dr. Horváth Gábor
A feladat A CT felvételeket a betegről segédeszközként használjuk a pácienseken elváltozások után kutatva. Eredetileg tomográfiás röntgen képek készülnek a páciensről, egy eljárás során általában 40 kép, és ezeken kell megtalálni elváltozásokat a mellkasi területen, egész pontosan a tüdőn belül. Mivel a tomográfiás képek úgymond mindent tartalmaznak, ezért nehéz dolgunk van az elváltozások felderítésében. Léteznek algoritmusok, programok, amik diagnosztizálnak kóros területeket, de nagyon sok hibás osztályozás születik, amiről még el kéne dönteni, hogy valóban egy elváltozással van-e dolgunk. A mi feladatunk az, hogy az érhálózatot felderítsük, és megjelenítsük. Az érhálózattal a kezünkben, könnyen el lehet dönteni a hibás megállapításokról, hogy valóban elváltozást találtunk-e meg, vagy csak egy eret, esetleg egy érkanyarulatot. Ezek mellett önállóan is nagy segítséget nyújt a tomográfiás képek vizsgálatakor. A feladatom a CT képeken a tüdőterület körbehatárolása, és meghatározása volt, mivel a CT képekből vetítéssel nyerünk tomográfiás képeket, amikből majd újabb szelet képeket tudunk gyártani és eredetileg is csak a tüdőterületre voltunk kíváncsiak. Másik feladat a hajszálerek eltüntetése volt, tehát a tüdőben lévő nagyobb erek meghatározása. A feladat során ezekhez hasonló CT képekkel dolgoztunk.
A megvalósítas alapótlete Kiindulási ötlet a régiónövesztéses algoritmus alkalmazása volt, mely a következő tulajdonságokkal bír: -
van egy kiindulási pont megvizsgáljuk a szomszédjait, valamilyen tulajdonság szerint ha megfelelnek ezeknek a tulajdonságoknak, akkor a szomszédokkal bővítjük a régiót majd azoknak is megvizsgáljuk a szomszédjait, egészen addig, ameddig már senkinek nincsen alkalmas szomszédja
A mi esetünkben, ezért azért praktikus, mert ha sikerült megtalálni egy pontot a tüdőterületből, akkor onnan indítva egy ilyen eljárást, meg tudjuk határozni a tüdőben lévő pontokat, első körben az ereket a tüdőben nem határozzuk meg, mivel azok nem felelnek meg a kezdeti tulajdonságnak, ami alapján vizsgálódunk, tehát hogy egy küszöbérték alatt legyen a pont intenzitása. Az intenzitás azért fontos, mivel a CT képeken minél világosabb valami, annál inkább tömör anyag található ott, ebből kifolyólag a levegő fekete, ez jó kiindulási alap arra, hogy keresgéljünk és küszöbértéket határozzunk meg. Az alsó képen egy régiónövesztéses algoritmus futása látszik, ami a cellákat vizsgálja, itt éppen fehér régiót próbál meghatározni, de látszik, hogy még enyhén szürke pontok is beleférnek a használt küszöbbe, nekünk elsősorban az ellentettje lesz fontos, vagyis fekete pontból indulunk ki és fekete pontokat keresünk.
Tóvabbi próblemak A régiónövesztéses algoritmus tehát egy pontból indul (későbbiekben seed pont-ként hivatkozom az ilyen pontokra), amiből következik, hogy kell olyan pontokat találnunk, amik megfelelnek különböző kritériumoknak, a legfontosabbak: -
valószínűleg a tüdőterület része az intenzitása és a szomszédjainak intenzitása alapján egy levegőt reprezentáló pont, ahonnan kiindulhatunk
További jellemzői a pontoknak és a régióknak a később lesznek tárgyalva.
Megvalósítas – 1. Kepek beólvasasa Mivel a vetítés egy egész CT képsorozat segítségével történik, ami állhat akár 500 darab képből is, ezért ezt hatékonyan kell megtennünk. A program e részében egy ciklusban olvassuk be a képeket, majd meghívjuk rajt azt a függvényt, ami majd megkeresi a tüdőterületeket, és visszaad kettő mátrixot: -
Tüdőben lévő pontok mátrixa: minden olyan pont, ami a tüdőben van, beleértve az ereket is Tüdőben lévő erek mátrixa: minden tüdőben lévő ér 1-esként szerepel a mátrixban, minden más 0, tehát az a terület is, ami a tüdőben van, de levegő
A program ezt megvalósító része:
2. Seed póntók keresese Tehát olyan pontokat keresünk, ahonnan az algoritmust elindíthatjuk. A program egy mátrixban tárolja, hogy melyik pontot látogattuk már meg, és ez alapján később nem fogunk vizsgálni egy olyan pontot, amiről már kiderült, hogy része egy régiónak, amikor pontokat és régiókat keresünk a képen. Különböző feltételeknek kell megfelelnie ezeknek a pontokat, amik az alábbiak: -
-
-
még nem része egy megtalált régiónak sem, és a kép alsó felén helyezkedik el. nem teljesen fekete a pont o ez azért fontos, mert teljesen fekete pontok legnagyobbrészt csak a tüdőn és a testen kívül helyezkednek el van legalább 1 darab, egy kicsivel magasabb intenzitású szomszédja o mivel a tüdő teli van hajszálerekkel, és apróbb foltokkal, így is kiszűrjük a tüdőn kívül eső részeket, és kevesebb eséllyel találunk meg egy nyelőcsövet, ami többnyire teljesen fekete van legalább 4 darab sötét szomszédja o több azért nem fontos, mivel így már biztos szinte, hogy tüdőterület, és ha épp egy ér mellett vagyunk, akkor lehet a legtöbb szomszédja magas intenzitású, mivel az ér világosabb
Néhány kapcsolódó kódrész:
3. Regiók meghatarózasa Most, hogy már vannak seed pontjaink, még mindig nem lehetünk elégedettek, ugyanis lehetnek olyan megtalált régiók, amik semmiképpen sem a tüdőterület részei, ezeket utólagos vizsgálat után el kell dobnunk. Példádul az alábbi képen semmiképpen nem lenne jó, ha a középső két fekete területet is megtalálnánk, hiszen egyértelműen látszik, hogy van két nagy tüdőterületünk, a másik két régió pedig közte van.
Ugyanúgy megszorításokat, feltételeket kell szabnunk a régiókra, mint a seed pontokra, amikor kerestük őket, azonban a seed pontok rögtön eldőltek, hogy lehet-e vagy nem, és ha igen, indítottunk rajt egy régiónövesztést, most pedig a növesztés közben, vagy végén dől el, hogy a régió tüdőterület e, vagy sem. A feltételek: -
ha képhatárhoz ér a régió, akkor mindenképpen a testen kívül vagyunk, tehát el kell dobni ezt a régiót általában a tüdő mikor még csak kis részét látjuk, az alját, több részből állhat, de ekkor ezek a tüdőterületek kicsik, azonban, ha már van két nagy terület akkor megvan a tüdő két oldala, és nem kell már több régió, és biztos, hogy ez a két nagy lesz a tüdő nem más, mivel semmi más sem ilyen nagy a CT képeken, sehol sincs ennyi levegő
Kapcsolódó kódrészek, ahol a feltételek ellenőrizve vannak. A képhatárra vonatkozó feltétel:
A régiók méretére vonatkozó feltétel, ha nagyobb egy bizonyos százaléknál, akkor nagy régiónak számítjuk.
Fontos, hogy a régió növekedésénél a küszöb alatti pontokat egységes feketére állítjuk, így a képeken, már nem látszódnak a hajszálerek.
4. Tüdókórvónal megrajzólasa A CT képeken való könnyebb vizsgálódás miatt meg kell határozni a tüdőkörvonalat. Első körben azokat a pontokat vizsgáljuk meg, amik egy régió részei és vannak olyan szomszédjaik, amik a régión kívül esnek, ezek a pontok lehetnek a körvonal részei. Ekkor még a tüdőn belüli erek is körülhatárolásra kerülnek. Második lépésben, csak a tüdőkörvonalat kell meghatározni, a tüdőn belüli ereknek ne legyen körvonala. Az ötlet: -
-
indítsunk egy régiónövesztést, ami a legfelső fehér, körvonal pontból indul ki, és azt vizsgálja, hogy a szomszédjai is körvonal részek e, ekkor a tüdő tetejéről elindul egy régiónövesztés és végigmegy a körvonalon miután ez megvan, azok az előző pontok, amik nincsenek benne ebben a tüdőkörvonalban, feketítésre kerülnek, és már nem tartjuk őket úgy számon mint a tüdő korvonal részei.
Illusztráció a második esetre:
5. Tüdóterület matrix meghatarózasa A tüdőkörvonal megléte után, könnyű feladatnak tűnik a tüdőterület meghatározása, azok a pontok, amik a körvonalon belül vannak. Valójában nem ilyen egyszerű a helyzet, nem tudtam arra alapozva meghatározni a pontokat, hogy esetleg milyen irányban, lefele vagy felfele, oldalra vannak-e olyan pontok, amik a tüdőkörvonal részei. Azért volt így nehéz, mert lehet csavar is a tüdőben, és nem tudtam semmi olyan általánosat megállapítani, ami alapján az összes képre igaz lenne, és meg tudnám mondani, mely pontok vannak a körvonalon belül. Másik ötlet, ami a megoldáshoz vezet az, hogy eddig is egy mátrixban tároltuk azokat a pontokat, amik a tüdőben vannak, de nem erek. Most azt kell meghatároznunk, hogy az ereket is belevegyük ebbe a mátrixba. Egy for ciklussal végigiterálunk az összes ponton és azt vizsgáltam, hogy az intenzitásérték 0 és 1 közt van-e, illetve van-e a pontnak két tüdőbeli szomszédja (körvonal nem számít tüdőterületnek, és mivel fehér, ezért vizsgálandó területnek sem), mert ekkor biztosra mondhatjuk, hogy a tüdőben van. Továbbá ilyenkor a pontot belevettük a tüdőben lévő pontok eddigi mátrixába, és így haladva a pontokon az összes ér belekerül a tüdőben mátrixba. Így végül vissza tudjuk adni, a tüdőben lévő pontok mátrixát.
6. Erek matrix meghatarózasa A hajszálerek problémájának megoldása: -
a küszöbözés miatt, a tüdőben lévő erekben, már nincsenek benne a hajszálerek
Az erek mátrixát úgy határozzuk meg, hogy az előző algoritmust futtatjuk, azonban van egy üres mátrixunk, és amikor az előző feltételeknek megfelelő pontokat talál, tehát van két tüdőbeli szomszédja, és az intenzitásértéke a megadott tartományon belül van, akkor hozzáadjuk az új mátrixhoz, vagyis jelöljük benne, hogy ez a pixel az erekhez tartozik.
Tóvabbi teendók A CT képekből vetítéssel lesz tomográfiás kép, ez egy másik kollega feladata volt. Ez a program van összekapcsolva az övével, ennek a kimenete a tüdő mátrix, és az erek mátrix, ő pedig választhat, hogy melyiket vetíti éppen. A vetítésről pár szó: -
számítás idejében is jelentősen meglátszik, hogy csak az ereket vagy a tüdőterületet kell vetíteni a vetítés során megnézi, hogy az adott pixel az e program által visszaadott választott mátrixban 1-es e, és ha igen, akkor vetíti azt a pontot az összes CT képből egy vetítés során egy kép készül egy szögből
A prógram hianyóssagai Hibás régiódetektálások -
nem feltétlenül problémák, mivel ezek a régiók általában érmentesek, és majdnem feketék, tehát vetítés során, nem lesz szinte semmi hatásuk a kimeneti képre
Nem megtalált régiók -
jobban befolyásolják a kimeneti képet, azonban csak nagyon kis mértékben előfordul, hogy egy régió, az egyik képen még nem kapcsolódik a tüdőhöz, de a következőn már igen, ekkor a vetítés után kicsit halványabbnak látszódik az a terület, ahol kihagytuk a régiót, de mivel ez csak néha fordul elő, nem tűnik fel a kimeneti képen
Megjegyzesek A legtöbb helyen nem illesztettem a dokumentumba kódrészletet, mivel vagy triviális volt a megvalósítás a leírtak alapján, vagy túl hosszú lett volna a beillesztett kód.