TEKNILLINEN KORKEAKOULU Elektroniikan, tietoliikenteen ja automaation tiedekunta Automaatio- ja systeemitekniikka AS-0.3200 Automaatio- ja systeemitekniikan projektityöt Indosyaniinivihreä optisessa aivoverisuonikuvantamisessa: esitystekniikan kehittäminen Projektin aloitusaika: 16.09.2008 Projektin loppuaika: 19.12.2008 Dokumentin päiväys: 19.12.2008 Tehnyt: Martti Riuttamäki
Sisältö 1 Johdanto 3 2 Työn tavoitteet 4 3 Työn tulokset 5 3.1 MATLAB:n m-tiedostot ja niillä muokattuja kuvia........... 5 3.1.1 Kommentteja m-tiedostoista.................... 9 3.2 Simulink-mallit............................... 10 3.2.1 Ajastetut värikanavan muutokset................. 10 3.2.2 Manuaaliset värikanavan muutokset............... 13 3.2.3 Kommentteja Simulink-malleista................. 13 4 Yhteenveto 15 5 Toteutunut aikataulu 16 6 Viitteet 17 7 Liitteet 18 7.1 Liite 1. modifyimage4.m.......................... 18 7.2 Liite 2. modifyimage6.m.......................... 19
1 Johdanto Tämän projektityön aiheena on indosyaniinivihreä -nimisen merkkiaineen avulla tehdyn verisuonikuvantamisen esitystekniikan kehittäminen. Indosyaniinivihreä on merkkiaine, joka uoresoi, eli synnyttää valoa, kun siihen kohdistetaan infrapunavaloa (800nm). Leikkauksissa indosyaniinivihreää käytetään sen vuoksi, että infrapuna-taajuinen valo läpäisee kudoksia hyvin, mikä mahdollistaa ihon alaisten kudosten ja verisuonten läpivalaisun. Käytännössä indosyaniinivihreää ruiskutetaan potilaan verenkiertoon, minkä jälkeen hänen kudoksiaan läpivalaistaan infrapunavalolla. Valon osuessa merkkiaineeseen, alkaa merkkiaiane uoresoida valoa, joka voidaan kuvata tarkoituksenmukaisella kameralla. [1] Projektityön aiheena on luoda katsaus MATLAB:n tarjoamiin mahdollisuuksiin muokata läpivalaistuista kudoksista otettuja kuvia havainnollisempaan muotoon. 3
2 Työn tavoitteet MATLAB:sta löytyy lukuisa joukko valmiita funktioita kuvankäsittelyyn. Näille funktioille yhteistä on se, että niillä voidaan tehdä kuville perustavanlaatuisia muunnoksia. Kehittyneempään kuvankäsittelyyn vaaditaan kuitenkin useiden valmiiden funktioiden käyttöä tai omien uusien funktioiden luomista. Tämän projektityön puitteissa ollaan käytetty ainoastaan MATLAB:n valmiita funktioita. Ongelmallista valmiiden funktioiden käytön suhteen oli se, että läpivalaistuista kudoksista otetuille kuville tulisi suorittaa monimutkaisia kuvankäsittelyoperaatioita, jotta kuvankäsittelyn hyöty maksimoituisi. Siinä missä tämä työ toimii pelkkänä esiselvityksenä, toisi edistyneempi kuvankäsittely mukanaan mahdollisuuden esimerkiksi etsiä ja erotella toisistaan kuvissa näkyvät valtimot ja laskimot. 4
3 Työn tulokset Työn tuloksena syntyi kaksi MATLAB:n valmiita funktioita yhdistelevää m-tiedostoa ja kaksi Simulink-mallia. Seuraavissa kappaleissa on kuvattuna m-tiedostojen sisältö sekä Simulink-mallit. 3.1 MATLAB:n m-tiedostot ja niillä muokattuja kuvia Projektin tuloksena syntyneissä m-tiedostoissa kutsutaan parametrina saadulle kuvalle yksinkertaisia muokkausoperaatioita. Ensimmäisessä m-tiedostossa (Liite 1) parametrikuva muutetaan ensin harmaasävykuvaksi, jonka jälkeen tasataan kuvan korkeimpia ja matalampia kontrastiarvoja[2]. Tämän menettelyn myötä esimerkiksi ylivalottuneesta kuvasta suodatetaan pois ylisuuret kirkkausarvot, jotta kuvan yksityiskohdat erottuisivat paremmin. Sen jälkeen kuvan värikartta muunnetaan, jolloin kuvasta tulee värillinen. Seuraavaksi kuvalle kutsutaan imtophat-funktiota [3], [4], jolla siitä suodatetaan pois keskivaaleita sävyjä. Lopuksi kuvasta tehdään binäärinen mustavalkokuva. Toinen m-tiedosto (Liite 2) eroaa ensimmäisestä siten, että siinä binääriseksi muutetusta kuvasta etsitään yhtenäisiä alueita bwlabel-funktiolla[5]. Omilla väreillään kuvattujen alueiden tulisi esittää valtimoita ja laskimoita. Tosin eri suonia ei pystytyä näin helposti erottamaan toisistaan, koska MATLAB:n bwlabel-funktio ei jostain syystä onnistunut erottelemaan kuvasta eri alueita kovinkaan mielekkäällä tavalla. Funktio bwlabel ottaa parametrikseen muutettavan matriisimuotoisen kuvan ja etsittävien alueiden lukumäärän (4 tai 8). Funktio ei kuitenkaan kyennyt erottelemaan selvästi erillisiä suurehkoja alueita omiksi saarekkeikseen, joten sen käytöstä ei tehtyjen testausten perusteella ollut juurikaan hyötyä. Seuraavassa on kaksi kuvasarjaa, jotka on tulostettu kutsumalla projektityössä luotuja m-funktioita testikäytössä olleesta ICG-videosta poimituille kahdelle pysäytyskuvalle. Molemmat m-tiedostot ottavat parametreikseen muokattavan kuvan tiedostopolun sekä sen värikartan[6], jonka mukaisesti parametrikuva värjätään sitä muokattaessa. 5
Seuraavassa kuvasarjassa on esitetty ensimmäinen testivideosta poimituista kuvista. Kuvasarjassa näkyy sekä muokkaamaton harmaasävykuva, että harmaasävykuvasta muokattuja kuvia (modifyimage4.m, Liite 1). Kuva 1: Ensimmäinen kuva (vas. yl.) on alkuperäinen harmaasävykyva, toinen kuva (oik. yl.) on alkuperäinen kuva, jonka kontrastia on muokattu. Kolmannessa kuvassa (vas. al.) on muokattu kontrastia sekä värikartta. Viimeinen kuva on binäärinen mustavalkokuva. 6
Seuraavassa kuvasarjassa on näytetty saman kuvan muunnoksia, kuin Kuvassa 1, mutta mukaan on lisätty mm. kuvan erillisten alueiden erottelu ja niiden värittäminen omilla väreillään (modifyimage6.m, Liite 2). Kuva 2: Tässä kuvasarjassa näkyy edellisen kuvasarjan tapaan muokatun kontrastin ja värikartan vaikutukset, mutta tällä kertaa värikartan muutos on esitetty erillisenä kuvana (vas. kesk.). Viimeisessä kuvassa (oik. al.) näkyy lisäksi tilanne, jossa binäärisestä kuvasta on eroteltu alueita ja merkitty ne eri värisiksi. 7
Kuvassa 3 on muokattuna toinen testivideosta napattu pysäytyskuva (modifyimage4.m, Liite 1). Kuva 3: Samat muokkaukset, kuin Kuvassa 1, mutta tällä kertaa kuvassa näkyy enemmän verisuonia, koska merkkiaineen konsentraatio on suurempi. 8
Kuvassa 4 on esitetty jälkimmäisen pysäytyskuvan muokkausta (modifyimage6.m, Liite 2). Kuva 4: Samat muokkauoperaatiot kuin kuvassa 2, mutta muokattava kuva on tässä kohtaa sama kuin Kuvassa 3. 3.1.1 Kommentteja m-tiedostoista Edellisen kappaleen kuvista voidaan nähdä se, että mitään mullistavaa kuvankäsittelyä värisuonikuville ei olla tehty. Silmään pistää etenkin puutteet erillisten alueiden värittämisessä, koska edes selvästi erillisiä alueita ei olla väritetty omilla väreillään. Tämä johtuu siitä, ettei käytetty bwlabel-funktio[5] osaa erotella mielekkäästi verisuonikuvista erillisiä alueita. Funktio bwlabel etsii kuvasta muotoja. Muoto on yhtenäinen kirkas alue. Toisaalta on kyseenalaista, kannattaako verisuonia erotella toisistaan pelkkien kirkkauden muutosten perusteella. Tällöin luokittelu tapahtuu sokeasti, eikä suonten jaottelu valtimoihin ja laskimoihin todennäköisesti onnistu. Huomattavasti edistyneemmän kuvankäsittelyn myötä valtimot ja laskimot voitaisiin erottaa toisistaan käyttämällä älykästä ajastusta, jossa videokuvassa näkyvien verisuonten kirkkausmuutoksista pääteltäisiin, mitkä suonet ovat valtimoita (kirkastuvat ensin) ja mitkä suonet ovat laskimoita (kirkastuvat pienellä viiveellä). Valtimoiden ja laskimoiden erittelu yksittäisistä kuvista ei tosin tällöinkään onnistuisi, koska erottelu olisi riippuvainen aikatiedosta. Seuraavassa kappaleessa on esitelty projektityön puitteissa tehtyjä videokuvan käsittelyyn kykeneviä Simulink-malleja, joissa on esitetty videokuvan toistoa ja esimerkiksi ajastusten käyttöä Simulink:ssä. 9
3.2 Simulink-mallit Edellä esitetyt MATLAB-tiedostot soveltuvat vain yksittäisten kuvien muokkaamiseen. Tässä kappaleessa on esitetty projektityössä tehdyt Simulink-mallit, joilla voidaan muokata liikkuvaa kuvaa. Tosin liikkuva kuva esitetään Simulink:ssä yksittäisinä kuvina. Siten edellisen kappaleen m-tiedostoja voitaisiin käyttää myös Simulink:ssä. Seuraavassa on esitetty Simulink-mallit, joista ensimmäisessä luetaan videotiedostosta muokkaamatonta videokuvaa, muutetaan videokuvan kontrastia sekä muutellaan värikanavia (RGB) ajastetusti. Jälkimmäisessä Simulink-mallissa käyttäjän on mahdollista valita käyttöön haluamansa värikanavat, jolloin tuloksena on esimerkiksi violetteja värisävyjä silloin, kun käytössä on punainen(r) ja sininen(b) värikanava. 3.2.1 Ajastetut värikanavan muutokset Ensimmäisessä Simulink-mallissa toistettavan muokatun kuvan värikanavien vaihdokset tapahtuvat ajastusti (malliin on lisätty kello ja vipuja). Seuraavassa on esitetty kuvia ajastetusti värikanavia muuttavasta Simulink-mallista. Kuva 5: Ajastetut värikanavan muutokset Simulink:ssä. Ensimmäisessä videossa (vas.) on alkuperäinen video, keskimmäisessä videon kontrastia on muokattu, ja viimeisessä lisäksi sen värikanavaa on muutettu. Aikaa videotoiston alusta on kuvan tapauksessa kulunut 3s. 10
Kuva 6: Ajastetut värikanavan muutokset Simulink:ssä. Ensimmäisessä videossa (vas.) on alkuperäinen video, keskimmäisessä videon kontrastia on muokattu, ja viimeisessä lisäksi sen värikanavaa on muutettu. Aikaa videotoiston alusta on kuvan tapauksessa kulunut 10s. 11
Kuva 7: Ajastetut värikanavan muutokset Simulink:ssä. Ensimmäisessä videossa (vas.) on alkuperäinen video, keskimmäisessä videon kontrastia on muokattu, ja viimeisessä lisäksi sen värikanavaa on muutettu. Aikaa videotoiston alusta on kuvan tapauksessa kulunut 15 s. 12
3.2.2 Manuaaliset värikanavan muutokset Toisessa Simulink-mallissa värikanavien muutokset tapahtuvat käyttäjän valinnan mukaan manuaalisesti. Käytettävien värikanavien valinta tehdään vivuilla(switch), joiden tilaa (on/o) voidaan muuttaa hiiren napin klikkauksin. Seuraavassa on kuva manuaalisten värikanavien vaihdosten mallista. Kuva 8: Manuaalinen värikanavien valinta. Ensimmäisessä videossa (vas.) on alkuperäinen video, keskimmäisessä videon kontrastia on muokattu, ja viimeisessä lisäksi sen värikanavaa on muutettu. Kuvan tapaksessa käytössä ovat vihreä(g) ja sininen(b) kanava. 3.2.3 Kommentteja Simulink-malleista Edellisten kappaleiden Simulink-mallit ovat lähinnä Simulink:n perustoimintoja esitteleviä äärimmilleen pelkistettyjä esimerkkejä. Ajastettuja värikanavien muutoksia esittelevässä mallissa värien lisäämisellä kuvasta saadaan hiukan havainnollisempi, koska ihmissilmän kyky erotella harmaasävyjä on hyvin rajoittunut. Tosin värien käyttöön ei tällöinkään liity juurikaan älykkyyttä, koska valtimoita ja laskimoita ei 13
edelleenkään erotella mitenkään toisistaan. Jälkimmäinen malli on vieläkin yksinkertaisempi sen ainoastaan tarjotessa käyttäjälle mahdollisuuden valita, minkä väristä videokuvaa hän katselee. 14
4 Yhteenveto Tämä projektityö tarjoaa lähtökohdan mahdollisesti tuleville samaa aihetta käsitteleville töille. Seuraavassa on listattuna projektin kuluessa kertyneitä havaintoja, jotka kannattaa ottaa huomioon jatkossa. - Windows tukee käyttöjärjestelmänä codeceja, joita myös MATLAB ja Simulink tarvitsevat pakattuja videoita toistettaessa. Pakkaamattomat videot ovat kohtuuttoman suurikokoisia ja raskaita prosessoida. - MATLAB:n valmiit funktiot eivät ilmeisesti riitä monimutkaisten verisuonikuvien käsittelyyn, vaan kuvanmuokkaus on tehtävä pikselitasolla. - MATLAB tarjoaa työkaluja reaaliaikaisen videokuvan käsittelyyn (Data Acquisition Toolbox) - Verisuonten luokittelu valtimoiksi ja laskimoiksi voitaisiin kenties tehdä tilakoneen avulla, jossa syötevideosta poimittaisiin kirkastuvia kohtia, ja niitä värjättäisiin ajastusta apuna käyttäen asteittain muuttuvilla värisävyillä. (Simulink:n State- ow Toolbox) - Mikäli ICG-kuvien käsittelystä halutaan saada taloudellista hyötyä, niin PC:n ja MATLAB:n sijaan kannattanee kuvankäsittelyssä käyttää kameraan liitettävää ohjelmoitavaa logiikkaa (FPGA), jolloin lopputulos on edullisempi, nopeampi(?) ja helpompi kaupallistaa. 15
5 Toteutunut aikataulu Seuraavassa on esitetty projektin tekoon kulunut aika. Tehtävä Kulunut aika [h] MATLAB:n m-tiedostojen teko 10 Simulink-mallien teko 20 Dokumentointi ja esitykset 15 Yhteensä 45 Tarkemmin eriteltynä eniten projektissa kului aikaa videotiedoston saattamiseen MAT- LAB:n tukemaan muotoon. Lisäksi TKK:n Windows-luokkien tietokoneiden codectuki paljastui melko puutteelliseksi, joten aikaa kului myös sopivia codec-muunnoksia tekevän ohjelman etsimiseen internetistä. 16
6 Viitteet Viitteet [1] http://lipas.uwasa./ TAU/memos/AUTOaivo/, viitattu 19.12.2008 [2] http://www.mathworks.com/access/ helpdesk/help/toolbox/images/index.html?/access/helpdesk/ help/toolbox/images/stretchlim.html, viitattu 19.12.2008 [3] http://www.mathworks.com/access/ helpdesk/help/toolbox/images/index.html?/access/helpdesk/ help/toolbox/images/imtophat.html, viitattu 19.12.2008 [4] http://www.mathworks.com/access/ helpdesk/help/toolbox/images/index.html?/access/helpdesk/ help/toolbox/images/strel.html, viitattu 19.12.2008 [5] http://www.mathworks.com/access/ helpdesk/help/toolbox/images/index.html?/access/helpdesk/ help/toolbox/images/bwlabel.html, viitattu 19.12.2008 [6] http://www.mathworks.com/access/ helpdesk/help/techdoc/index.html?/access/helpdesk/ help/techdoc/ref/colormap.html, viitattu 19.12.2008 17
7 Liitteet 7.1 Liite 1. modifyimage4.m % Function modies the parameter image by: % (1) changing a parameter image to a grayscale -> show % (2) adjusting the resulting image's contrast (*) -> show % % (3) performing morphological top-hat ltering % (4) determining a proper level for thresholding % (5) converting image into black and white binary image by % thresholding -> show % (*) Also showing the contrast adjusted colormap manipulated % image. % % The function returns the black and white binary image, which % it has tried to sort into 4 dierent regions. function imout = modifyimage4(imin, cmap) grayscale = rgb2gray(imread(imin)); %(1) subplot(2, 2, 1) % Plotting as subimage (lets the image to have its original colormap % -> gray) subimage(grayscale) title('original image in grayscale'); % stretchlim is used to determine a proper latter and upper % limit for the contrast to be taken in account of input image. % The contrast values below the latter limit and values above % the upper limit are ignored: adjusted = imadjust(grayscale,stretchlim(grayscale),[], 1); %(2) subplot(2, 2, 2) subimage(adjusted) title('modied contrast'); subplot(2, 2, 3), imshow(adjusted), title('modied colormap and contrast'); tophat = imtophat(adjusted, strel('disk',35)); %(3) level = abs(graythresh(tophat)); %(4) binary = im2bw(tophat, level); %(5) imout = binary; subplot(2, 2, 4), imshow(binary), title('tophat ltered, binary image'); % Changing the colormap for all the images besides the 1st one colormap(cmap) %(2) 18
7.2 Liite 2. modifyimage6.m % Function modies the parameter image by: % (1) changing a parameter image to a grayscale -> show % (2) adjusting grayscale image's colormap (*) -> show % (3) adjusting the resulting image's contrast (*) -> show % % (4) performing morphological top-hat ltering % (5) determining a proper level for thresholding % (6) converting image into black and white binary image by % thresholding -> show % (7) seeking connected areas for representing them with % dierent colors -> sorts image into labels. % (8) converting image's label matrix into RGB image -> show % (*) Also showing the contrast adjusted colormap manipulated % image. % % The function returns the colored binary image, which it % has tried to sort into 4 dierent regions(bwlabel-function). function imout = modifyimage6(imin, cmap) grayscale = rgb2gray(imread(imin)); % (1) subplot(3, 2, 1) % Plotting as subimage (lets the image to have its original colormap % -> gray) subimage(grayscale) %(*) title('original image in grayscale'); % stretchlim is used to determine a proper latter and upper % limit for the contrast to be taken in account of input image. % The contrast values below the latter limit and values above % the upper limit are ignored: adjusted = imadjust(grayscale,stretchlim(grayscale),[], 1); % (3) subplot(3, 2, 2) subimage(adjusted) title('modied contrast'); subplot(3, 2, 3), imshow(grayscale) title('modied colormap'); subplot(3, 2, 4), imshow(adjusted), title('modied colormap and contrast'); tophat = imtophat(adjusted, strel('disk',35)); %(4) level = abs(graythresh(tophat)); %(5) binary = im2bw(tophat, level); %(6) 19
[labeled] = bwlabel(binary, 4); %(7) RGB_label = label2rgb(labeled, @winter, 'k', 'shue'); %(8) imout = RGB_label; subplot(3, 2, 5), imshow(binary), title('tophat ltered, binary image'); subplot(3, 2, 6), imshow(imout), title('tophat ltered, colored binary image'); % Changing the colormap for all the images besides the 1st one colormap(cmap) %(2) 20