• No results found

Engineering of an object-counting program

N/A
N/A
Protected

Academic year: 2021

Share "Engineering of an object-counting program"

Copied!
67
0
0

Loading.... (view fulltext now)

Full text

(1)

Univerza v Ljubljani

Fakulteta za raˇ

cunalniˇ

stvo in informatiko

Klara Nosan

Inˇ

zeniring programa za ˇ

stetje

objektov na slikah

DIPLOMSKO DELO

UNIVERZITETNI ˇSTUDIJSKI PROGRAM PRVE STOPNJE

RA ˇCUNALNIˇSTVO IN INFORMATIKA

Mentor

: doc. dr. Luka ˇ

Sajn

Somentor

: dr. Uroˇs ˇ

Cibej

(2)

koriˇsˇcenje rezultatov diplomske naloge je potrebno pisno privoljenje avtorja, Fakultete za raˇcunalniˇstvo in informatiko ter mentorja.

(3)

Fakulteta za raˇcunalniˇstvo in informatiko izdaja naslednjo nalogo: Tematika naloge:

Preuˇcite zmoˇznosti paralelizacije procesiranja v novi verziji programa Ima-geJ2. Prejˇsnjo verzijo ImageJ1 smo na fakulteti ˇze uporabljali v programu Learn123, ki je implementiran v programskem jeziku Scala, za ˇstudijo ˇstetja celic z genetskimi algoritmi s pomoˇcjo zaporednega izvajanja. Poskusite do-delati program Learn123 tako, da bo lahko uporabil vzporedno procesiranje in rezultate testirajte na obstojeˇcih in novih domenah.

(4)
(5)

Zahvaljujem se mentorju, doc. dr. Luki ˇSajnu, za priloˇznost sodelovanja pri ravoju programa Learn123 in pomoˇc pri iskanju novih primerov uporabe. Posebej se zahvaljujem tudi somentorju, dr. Uroˇsu ˇCibeju, za vso pomoˇc pri posodabljanju programa Learn123 in nasvete pri pisanju diplomskega dela.

(6)
(7)

Kazalo

Povzetek Abstract 1 Uvod 1 2 ImageJ 3 2.1 ImageJ1 . . . 4 2.2 ImageJ2 . . . 6 2.3 FIJI . . . 10 3 Program Learn123 11

3.1 Stetje celic z ImageJ1 . . . .ˇ 12 3.2 Uˇcenje ˇstetja . . . 14

4 Posodobitev programa Learn123 17

4.1 Ocenjevanje kromosomov z ImageJ2 . . . 18 4.2 Prehod z jezika ImageJ Macro na Python . . . 18 4.3 Primerjava razliˇcnih implementacij ocenjevanja kromosomov . 20 4.4 Teˇzave pri prehodu z ImageJ1 na ImageJ2 . . . 30

5 Nov primer uporabe programa Learn123 35

5.1 Stetje listnih reˇˇ z . . . 35 5.2 Stetje polipov meduz . . . .ˇ 37 5.3 Stetje ptic selivk v jatah . . . .ˇ 38

(8)

6 Zakljuˇcek 41

Literatura 45

(9)

Seznam uporabljenih kratic

kratica angleˇsko slovensko

API application programming in-terface

vmesnik za programiranje

CPU central processing unit centralno procesna enota

JVM Java Virtual Machine javanski navidezni stroj

(10)
(11)

Povzetek

Naslov: Inˇzeniring programa za ˇstetje objektov na slikah

Avtor: Klara Nosan

ˇ

Stetje objektov je pomembno podroˇcje raˇcunalniˇskega vida, ki ima veliko aplikacij na razliˇcnih domenah. Na podroˇcju bioloˇskih znanosti je posebej pomembno ˇstetje celic na mikroskopskih slikah, saj gre za eno izmed te-meljnih metod za analizo vzorcev. V diplomskem delu predstavimo pregled funkcionalnosti programske opreme ImageJ, ki se v bioloˇskih znanostih upo-rablja za procesiranje mikroskopskih slik. Opiˇsemo novosti in spremembe, ki jih prinaˇsa najnoveˇsja verzija ImageJ ter posebno pozornost namenimo ar-hitekturi programa in vmesniku za programiranje. Predstavimo program Learn123, namenjen avtomatizaciji ˇstetja celic na mikroskopskih slikah z ImageJ, v katerem je uˇcenje ˇstetja celic implementirano z genetskim algo-ritmom. Opiˇsemo postopek posodobitve programa Learn123, v kateri smo za avtomatsko ˇstetje celic na slikah uporabili aktualno posodobitev ImageJ in paralelizirali postopek uˇcenja ˇstetja celic. Predstavimo rezultate testira-nja paralelnega uˇcenja v primerjavi z zaporednim. Opiˇsemo tudi nov primer uporabe Learn123 in tipe slik, na katerih ne moremo ˇsteti objektov samo z uporabo programa ImageJ.

Kljuˇcne besede: ˇstetje objektov, procesiranje slik, ImageJ, genetski

(12)
(13)

Abstract

Title: Engineering of an object-counting program

Author: Klara Nosan

Counting objects in images is an important problem in many fields, such as the field of life sciences, where counting cells in microscopic images is a fundamental analysis tool. In this Bachelor’s Thesis we present ImageJ, the state of the art program for microscopic image processing in life sciences. We provide an overview of the newest version of ImageJ with an emphasis on the architecture and the API of the software. We present Learn123, a program designed to automize cell counting in microscopic images using ImageJ. We describe the process of updating Learn123 by using the most recent version of ImageJ and parallelizing the genetic algorithm used to learn cell counting. We then compare the parallel algorithm to its previous sequential version. Finally, we present a new use case of Learn123 and discuss which types of images are not suitable for object counting using ImageJ.

(14)
(15)

Poglavje 1

Uvod

ˇ

Stetje objektov je zanimivo podroˇcje raˇcunalniˇskega vida, ki ima veliko apli-kacij na razliˇcnih domenah. Pri analizi slik nas pogosto zanima, koliko doloˇcenih stvari je na njih. Za nadzor parkiriˇsˇc je pomembno ˇstevilo par-kiranih avtomobilov, pri nadzoru cest pa ˇstevilo vozil, ki so se peljala mimo izbrane toˇcke. V tovarnah nas zanima ˇstevilo izdelkov na tekoˇcem traku, v veliko situacijah pa ˇstevilo ljudi na slikah ali videoposnetkih.

ˇ

Stetje objektov je pomembno tudi na podroˇcju biologije. ˇStetje ˇzivali v jatah in ˇcredah se uporablja za spremljanje in napovedovanje sprememb v velikosti njihovih populacij. ˇStetje celic pa je ena izmed temeljnih me-tod za analizo vzorcev. Obema je skupno dejstvo, da je roˇcno anotiranje in ˇstetje primerkov na slikah zamudno opravilo, pogosto podvrˇzeno napa-kam. V zadnjih letih se zato pojavlja vedno veˇc poskusov avtomatizacije teh procesov [2, 8, 37, 39].

Eden izmed programov namenjenih avtomatizaciji ˇstetja na podroˇcju bio-logije je tudi Learn123 [23]. Gre za program za avtomatizacijo ˇstetja celic na mikroskopskih slikah, ki je nastal na Fakulteti za raˇcunalniˇstvo in informa-tiko. Uˇcenje ˇstetja celic je v Learn123 implementirano s pomoˇcjo genetskega algoritma, za procesiranje slik pa je uporabljena programska oprema ImageJ, ki predstavlja eno izmed najbolj uporabljenih orodij za anotacijo in analizo mikroskopskih slik na podroˇcju biologije.

(16)

V okviru diplomskega dela smo pripravili pregled funkcionalnosti pro-gramske opreme ImageJ ter novosti in spremembe, ki jih prinaˇsa njegova najnoveˇsja verzija. Posebno pozornost smo namenili arhitekturi in vmesniku za programiranje ImageJ in opisali, kako deluje na primeru programa Le-arn123. Le-tega smo posodobili tako, da za avtomatsko ˇstetje celic na slikah uporablja aktualno posodobitev ImageJ in uˇcenje ˇstetja celic paralelizirali. Posvetili smo se tudi iskanju novega primera uporabe programa Learn123.

V poglavju 2 predstavimo programsko opremo ImageJ, poglavje 3 pa opi-suje delovanje programa Learn123. Proces posodobitve programa Learn123 opiˇsemo v poglavju 4 in v poglavju 5 predstavimo postopek iskanja novega primera uporabe.

(17)

Poglavje 2

ImageJ

ImageJ je odprtokodni program za procesiranje slik, napisan v programskem jeziku Java. Namenjen je predvsem obdelavi slik v naravoslovnih znanostih, na primer mikroskopskih slik. Prva verzija ImageJ je nastala leta 1997 v ameriˇski instituciji National Institutes of Health (NIH) iz programa NIH Image. Gre za namizno aplikacijo, namenjeno prikazovanju, oblikovanju, procesiranju, analizi in shranjevanju slik.

Z veˇcanjem ˇstevila uporabnikov in njihovih zahtev so aplikaciji posto-poma dodajali funkcionalnosti. ImageJ se je tako razvil izven predvidenega obsega, vendar zaradi tehniˇcnih omejitev in prvotne arhitekture ImageJ 1.x (v nadaljevanju ImageJ1) ni veˇc dohajal trendov v naravoslovnih znanostih. Teˇzavo je zaˇcel predstavljati tudi pomanjkljiv API. ImageJ 2.x (v nadaljeva-nju ImageJ2) predstavlja novo generacijo programa s popolnoma prenovljeno arhitekturo in dodatnimi funkcionalnostmi, ki sledi trenutnim trendom slik v naravoslovnih znanostih.

V nadaljevanju predstavimo funkcionalnosti implementirane v ImageJ1 ter spremembe in razˇsiritve, ki jih prinaˇsa ImageJ2. Posebno pozornost na-menimo API-ju obeh verzij programske opreme, ki smo ga za detekcijo objek-tov na slikah uporabili v tem diplomskem delu. Predstavimo tudi razˇsirjeno distribucijo programa ImageJ, FIJI.

(18)

2.1

ImageJ1

Osnovne funkcionalnosti programa ImageJ1 so prikazovanje, oblikovanje, pro-cesiranje, analiza in shranjevanje slik, ki so lahko 8, 16 ali 32 bitne. Ima-geJ1 podpira standardne funkcije za procesiranje slik, kot so spreminjanje kontrasta, ostrenje, glajenje in filtriranje slik ter odkrivanje robov na sli-kah. Omogoˇca merjenje razdalj na sliki in raˇcunanje statistiˇcnih podatkov o oznaˇcenih delih slike. Implementirano je tudi risanje diagramov intenzitete sivinskih slik, ki so posebej uporabni pri analizi bioloˇskih vzorcev.

Funkcionalnosti programa ImageJ1 niso omejene le na osnovne operacije za procesiranje slik, saj ga je mogoˇce razˇsiriti z uporabniˇskimi vtiˇcniki. Ker pri procesiranju slik v znanosti pogosto ˇzelimo shraniti zaporedje operacij, ki smo jih uporabili za procesiranje slike, ali enake operacije uporabiti na veˇc slikah, so ImageJ1 dodali tudi moˇznost skriptiranja [11].

2.1.1

Skriptiranje v ImageJ1 z jezikom ImageJ Macro

Za skriptiranje so v ImageJ1 razvili lasten skriptni jezik,ImageJ Macro Lan-guage. Posamezno skripto v jeziku ImageJ Macro imenujemo Macro (slo-vensko makro), shranimo pa jo kot tekstovno datoteko s konˇcnico .ijm. Z makroji lahko avtomatiziramo ponovljive procese, dodamo bliˇznjice v orodno vrstico in doloˇcimo lastne bliˇznjice na tipkovnici.

Sintaksa je podobna programskemu jeziku Java, posamezni stavki se za-kljuˇcijo s podpiˇcjem, bloki kode pa so omejeni z zavitimi oklepaji. Spremen-ljivke v makrojih niso tipizirane, vendar je glede podatkovnih tipov Macro Language zelo omejen, saj so podprti samo numeriˇcni tipi in znakovni nizi. Pri pisanju makrojev je uporabnikom na voljo nabor funkcij za izvajanje Ima-geJ ukazov, obdelavo slik, datotek, znakovnih nizov, matematiˇcne operacije in manipulacijo z uporabniˇskim vmesnikom. Definiramo lahko tudi svoje funkcije, uporabljamo operatorje, ki so definirani v Javi, pogojne stavke, zanke in dodajamo komentarje.

(19)

Diplomska naloga 5 posnamemo z orodjem za snemanje makrojev, imenovanim Macro Recorder. Orodje med snemanjem shrani vse akcije uporabnika in zgenerira tekstovno datoteko, ki jo lahko uporabnik pregleda in spreminja v urejevalniku besedila, implementiranem v ImageJ1.

Jezik ImageJ Macro ima precej pomanjkljivosti, saj je zaradi arhitekture programa moˇcno vezan na grafiˇcni uporabniˇski vmesnik. Zaporedje ukazov, ki ga opiˇsemo z makrojem, je enako zaporedju akcij uporabnika, vkljuˇcno z manipulacijo z okni odprtimi v uporabniˇskem vmesniku. To lahko ponazo-rimo s primerom: tako kot v uporabniˇskem vmesniku pred izvedbo operacije na sliki najprej izberemo okno, v katerem je prikazana slika, ki jo ˇzelimo obdelati, moramo ta ukaz dodati v makro:

s e l e c t W i n d o w (" img ") ; run (" S h a r p e n ") ;

Makroji so omejeni tudi z vidika podatkovnih tipov in nabora funkcij, ki so na voljo uporabnikom. Kasneje so zato v ImageJ1 dodali ˇse moˇznost skrip-tiranja v jeziku JavaScript, vendar veˇcina uporabnikov, predvsem tistih, ki niso veˇsˇci programiranja, zaradi preproste sintakse in orodjaMacro Recorder

uporablja jezik ImageJ Macro [17].

2.1.2

Vtiˇ

cnki

Funkcionalnost ImageJ1 lahko razˇsirimo tudi s pisanjem vtiˇcnikov (ang. plu-gin) v programskem jeziku Java, s katerimi dodamo operacije v meni upo-rabniˇskega vmesnika ImageJ1.

V primerjavi z makroji je pisanje vtiˇcnikov bolj zahtevno, vendar pa so vtiˇcniki zmogljivejˇsi. Ni omejitev podatkovnih tipov in nabora funkcij, saj so pri programiranju na voljo vse metode, operatorji in podatkovni tipi pro-gramskega jezika Java. Za izvedbo ukazov ImageJ1 uporabljamo ImageJ1 API.

Za pisanje vtiˇcnikov ImageJ1 sta na voljo dve ogrodji v obliki Java inter-face [9], in sicer:

(20)

• PlugInFilter - ogrodje za pisanje vtiˇcnikov, ki delujejo na eni sliki, torej implementirajo operacijo, s katero obdelamo eno sliko.

• PlugIn - ogrodje za pisanje vseh ostalih vtiˇcnikov.

2.1.3

ImageJ1 API

ImageJ1 namizna aplikacija, ki je bila razvita z namenom, da uporabnik s pomoˇcjo uporabniˇskega vmesnika naenkrat uporablja eno instanco programa, zato ImageJ1 API ni dodelan. Celoten vmesnik za programiranje predstavlja en sam javanski razred (IJ), v katerem so implementirane statiˇcne metode za izvajanje ukazov ImageJ1, makrojev in vtiˇcnikov.

ImageJ1 API je primeren predvsem za pisanje vtiˇcnikov, ki so namenjeni uporabi z grafiˇcnim uporabniˇskim vmesnikom. Zaradi implementacije celotne programske opreme, ki je moˇcno vezana na uporabniˇski vmesnik, ima veliko klicev metod stranske uˇcinke povezane z uporabniˇskim vmesnikom, kot na primer odpiranje ali spreminjanje vsebine odprtih oken. Takˇsno obnaˇsanje pri uporabi vtiˇcnikov priˇcakujemo, pri rabi API-ja brez UI-ja v drugih programih pa ni zaˇzeljeno. Predvsem pri takˇsnem naˇcinu uporabe ImageJ1 sam javanski razred, ki naj bi bil celoten API, ne zadoˇsˇca, saj je pogosto potrebno roˇcno klicati metode za zapiranje ali spreminjanje oken uporabniˇskega vmesnika, ki so implementirane v drugih javanskih razredih.

Ker so vse metode statiˇcne in v veliki meri uporabljajo iste vire, je v primeru soˇcasnih klicev metod moˇzno tudi prepisovanje istih spremenljivk. ImageJ1 API je zato potrebno uporabljati previdno, saj lahko takˇsno prepi-sovanje podatkov vodi v napaˇcne rezultate.

2.2

ImageJ2

ImageJ1 se je z veˇcanjem ˇstevila uporabnikov in njihovih potreb s postopnim dodajanjem funkcionalnosti razvil izven predvidnega obsega. ImageJ2 je nova verzija programa ImageJ s prenovljeno arhitekturo, katere osrednji cilj

(21)

Diplomska naloga 7 je bil razˇsiriti funkcionalnost prve verzije programa s podporo procesiranja veˇcdimenzionalnih slik, ki so trenutni trend v naravoslovnih znanostih.

Poleg podpore veˇc tipom slik je v ImageJ2 podprtih tudi veˇc skriptnih jezikov, boljˇsa integracija z drugimi aplikacijami in moˇznost uporabe veˇc instanc programa hkrati. Uporabniˇska izkuˇsnja ostaja enaka, saj je upo-rabniˇski vmesnik nove verzije enak originalnemu, integrirane pa so tudi vse funkcionalnosti implementirane v ImageJ1. V uporabniˇskemu vmesniku so posodobili urejevalnik besedila (ScriptEditor) ter dodali orodje za avtomat-sko posodabljanje programa (ImageJ Updater) in iskalno vrstico, ki omogoˇca iskanje ukazov ter iskanje po dokumentaciji ImageJWiki in forumu Image-JForum [29].

2.2.1

Arhitektura ImageJ2

Nova arhitekutra programa ImageJ je modularna. Podatkovni model in ope-racije za procesiranje slik so loˇcene od uporabniˇskega vmesnika. Tako Ima-geJ2 ni veˇc samo namizna aplikacija, temveˇc obenem tudi zbirka knjiˇznic programske opreme, namenjenih za uporabo v drugih aplikacijah. Zgrajen je na ogrodju SciJava.

SciJava

SciJava je zbirka programske opreme, ki zdruˇzuje veˇc projektov namenjenim uporabi v znanosti. Sestavljajo jo ˇstiri osrednje komponente:

• SciJava - knjiˇznice namenjene pisanju razˇsirljivih aplikacij. Gre za

komponente za sploˇsno rabo, ki niso specifiˇcne za delo s slikami. Mednje sodi tudi knjiˇznica SciJava Commons, ki predstavlja ogrodje aplikacije ImageJ2.

• ImgLib2 - knjiˇznica, v kateri so implementirani podatkovni tipi

na-menjeni za predstavitev veˇcdimenzionalnih znanstvenih slik [16].

(22)

kateri so implementirane operacije za branje, pisanje in pretvorbo med raznimi formati veˇcdimenzionalnih slik [32].

• ImageJ2 - knjiˇznice in aplikacija za procesiranje veˇcdimenzionalnih

slik.

Opisane komponente niso neodvisne, njihova hieararhiˇcna organizacija je predstavljena na sliki 2.1.

Slika 2.1: Hierarhiˇcna organizacija projekta SciJava [34]

ImageJ2

ImageJ2 sestavlja veˇc programskih komponent:

• ImageJ Common - osnovni podatkovni model, ustvarjen z uporabo

ImgLib2.

• ImageJ Ops - programsko ogrodje za implementacijo algoritmov za

procesiranje slik.

• ImageJ Updater- mehanizem za posodabljanje posameznih vtiˇcnikov

in knjiˇznic znotraj ImageJ.

• ImageJ Legacy - skrbi za vzvratno kompatibilnost z ImageJ1.

(23)

Diplomska naloga 9

2.2.2

Kompatibilnost z ImageJ1

ImageJ2 je popolnoma neodvisen od ImageJ1, vendar pa je zaradi obstojeˇcih uporabnikov uporabniˇskega vmesnika in API-ja prve verzije programa nujna vzvratna kompatibilnost med prvo in drugo verzijo programa. Zanjo je poskr-bljeno s komponento ImageJ Legacy, ki vkljuˇcuje naslednje funkcionalnosti:

• Izvajanje ImageJ1 brez uporabniˇskega vmesnika (ang. headless).

• Ovijanje (ang. wrapping) uporabniˇskega vmesnika ImageJ1 v upo-rabniˇski vmesnik SciJava.

• Pretvorba med podatkovnimi strukturami ImageJ1 in ImageJ2. ImageJ Legacy vkljuˇcuje tudi ImageJ1 API [5].

2.2.3

ImageJ2 API

Arhitektura ImageJ2 je prilagojena uporabi posameznih knjiˇznic in metod v drugih aplikacijah. V primerjavi z ImageJ1 API-jem ni veˇc teˇzav z upo-rabniˇskim vmesnikom, saj je ta loˇcen od podatkovnih tipov, vhodno-izhodnih operacij in operacij za obdelavo slik.

Kljub izboljˇsani arhitekturi opazimo, da zaradi modularnosti ImageJ2 in zbirke SciJava, ki jo sestavljajo ˇstirih komponente (SciJava, ImageJ2, ImgLib2 in SCIFIO), programiranje z ImageJ2 API-jem zahteva veˇc progra-merskega znanja in razumevanja programskega jezika Java. Ukazi, ki jih z ImageJ1 API-jem lahko izvedemo s klicem ene metode, so v ImageJ2 pogosto kompleksnejˇsi [15].

ˇ

Sibka toˇcka ImageJ2 API-ja je tudi dokumentacija, ki je sicer precej obseˇzna, vendar ni zbrana na enem mestu. Na voljo je avtomatsko generirana dokumentacija kode v Javi (ang. Javadoc) za posamezne komponente [33]. Na spletni strani projekta ImageJ so na voljo ˇse opisi arhitekture, posame-znih komponent in API-ja, ki jih je veliko, a se vsebina na razliˇcnih straneh ponavlja, izrazoslovje pa je v veliko primerih nekonsistentno. Primanjkuje predvsem konkretnih primerov uporabe API-ja.

(24)

Zaradi omenjenih negativnih lastnosti ImageJ2 API-ja za obstojeˇce upo-rabnike ImageJ1 API-ja ne predstavlja nujno tako velike izboljˇsave, kot se to zdi na prvi pogled. Primer uporabe ImageJ2 API-ja, potek prehoda z ImageJ1 API-ja na novo verzijo in teˇzave, na katere smo naleteli pri tem, opiˇsemo v poglavju 4.

2.3

FIJI

FIJI (Fiji Is Just JmageJ) je distribucija ImageJ2, razˇsirjena z vtiˇcniki, ki so nastali v uporabniˇski skupnosti programa ImageJ. FIJI je namenjem predvsem uporabi v bioloˇskih razkiskavah, ˇcemur je prilagojen tudi nabor vtiˇcnikov, ki so vkljuˇceni v distribucijo.

Uporabniki lahko vtiˇcnike prispevajo preko platforme github, zanje obja-vijo dokumentacijo in ustvarijo strani za posodabljanje (ang. update site) [38], kamor objavljajo posodobitve prispevanega vtiˇcnika. Takˇsen naˇcin posoda-bljanja vtiˇcnikov omogoˇca ostalim uporabnikom FIJI-ja, da z orodjem Ima-geJ Updater izberejo verzijo vtiˇcnika, ki jo ˇzelijo uporabljati [31].

(25)

Poglavje 3

Program Learn123

Learn123 je program namenjen avtomatizaciji ˇstetja celic na mikroskopskih slikah z uporabo orodja ImageJ. Roˇcno anotiranje in ˇstetje celic je zelo za-muden proces, zato v biologiji zanj pogosto uporabijo program ImageJ. Z njim lahko sliko avtomatsko anotirajo in nato preˇstejejo oznaˇcene objekte na sliki. Takˇsen naˇcin ˇstetja je hitrejˇsi od roˇcnega ˇstetja, vendar pa je tudi izbira operacij in parametrov ukazov, s katerimi pred avtomatskim ˇstetjem obdelajo sliko, zahtevna in dolgotrajna. Program Learn123 vkljuˇcuje posto-pek uˇcenja ˇstetja celic, v katerem s poskuˇsanjem doloˇci parametre in tako popolnoma avtomatizira proces ˇstetja celic.

Poleg popolnoma avtomatskega ˇstetja celic na mikroskopskih slikah pro-gram uporabnikom omogoˇca tudi roˇcen pregled oznaˇcenih slik in popravljanje oznak.

Learn123 uporablja ImageJ1 in je implementiran v programskem jeziku Scala. Uˇcenje ocenjevanja ˇstevila celic na slikah poteka s pomoˇcjo genetskega algoritma, ki je opisan v nadaljevanju. Podrobneje opiˇsemo tudi postopek ˇstetja celic z ImageJ1 in uporabo ImageJ1 API-ja.

(26)

3.1

Stetje celic z ImageJ1

ˇ

Objekte na sliki v programu ImageJ1 ˇstejemo s pomoˇcjo ukazaAnalyze parti-cles. Ukazu kot parametre podamo velikost objektov, ki jih ˇzelimo upoˇstevati, njihovo pribliˇzno obliko (sploˇsˇcenost elipse, s katero lahko aproksimiramo obliko objekta) in katere podatke analize ˇzelimo prikazati oz. shraniti. Za avtomatsko analizo (ˇstetje) objektov potrebujemo binarno sliko, na kateri se objekti ne prekrivajo. Zato moramo pred uporabo ukaza Analyze particles

sliko segmentirati in nastaviti prage slike (ang. thresholding).

Pri nastavljanju pragov slike toˇcke na sliki razdelimo v dva razreda: ospredje (ang. foreground) in ozadje (ang. background). Za nastavljanje pragov slike je v ImageJ1 implementiranih veˇc metod za avtomatsko na-stavljanje pragov slik, ki jih uporabimo z ukazom setAutoThreshold. Pred nastavljanjem pragov sliko navadno obdelamo tako, da se ospredje ˇcimbolj loˇci od ozadja (na primer poveˇcamo kontrast, izostrimo in podobno). Ko nastavimo prag slike, z ukazem Convert to Mask sliko pretvorimo v binarno masko. To lahko pred ˇstetjem objektov dodatno obdelamo z naborom opera-cij, namenjenih obdelavi binarnih slik, s katerimi poskusimo objekte na sliki loˇciti med seboj, da se ne prekrivajo.

Primer takˇsnega zaporedja ukazov lahko zapiˇsemo z jezikom ImageJ Ma-cro: run (" E n h a n c e C o n t r a s t ..." , " S a t u r a t e d p i x e l s = 0 . 5 % " ) ; s e t A u t o T h r e s h o l d (" O t s u ") ; run (" C o n v e r t to M a s k ") ; run (" F i l l H o l e s ") ; run (" A n a l y z e P a r t i c l e s ..." , " s i z e =100 - I n f i n i t y c i r c u l a r i t y = 0 . 5 0 - 1 . 0 0 s h o w = N o t h i n g ") ;

Z zgornjim zaporedjem ukazov na sliki najprej poveˇcamo kontrast, nato nastavimo prag slike z metodo Otsu in sliko pretvorimo v binarno masko. Na binarni sliki zatem zapolnimo luknje v objektih in izvedemo ukazAnalyze Particles. Rezultate analize objektov ImageJ1 prikaˇze v posebnem oknu, kjer

(27)

Diplomska naloga 13 so navedeni podatki o posameznih objektih (na primer njihove koordinate na sliki, povrˇsina, in tako dalje).

V programu Learn123 celice na slikah ˇstejemo tako, da s pomoˇcjo ImageJ1 API-ja izvedemo makro z naborom ukazov za ˇstetje objektov.

3.1.1

Implementacija z ImageJ1 API

V ImageJ1 API-ju je za izvajanje makrojev implementirana metoda

runMacro, ki ji kot argument podamo zaporedje ukazov v jeziku ImageJ Ma-cro v obliki znakovnega niza. Ker v programu Learn123 makroje izvajamo na posameznih slikah, bi potrebovali metodo, ki bi makro izvedla na izbrani sliki. Ta ne obstaja, zato se je potrebno pri programiranju z API-jem zgledo-vati po uporabniˇskem vmesniku, v katerem velja, da se makro izvede na sliki, ki je odprta v programu ImageJ1 in trenutno v fokusu. Makro na izbrani sliki z API-jem izvedemo tako, da dvojnik slike roˇcno nastavimo kot trenutno izbrano sliko v uporabniˇskem vmesniku in nato s klicem metode runMacro

izvedemo makro:

W i n d o w M a n a g e r . s e t T e m p C u r r e n t I m a g e ( img . d u p l i c a t e ) IJ . r u n M a c r o ( m a c r o )

Slike so v ImageJ1 predstavljene kot instance razreda ImagePlus. Pri izvajanju makroja za detekcijo objektov sliko obdelamo in jo spremenimo v binarno sliko ter s tem spremenimo tudi objekt ImagePlus. Za trenutno izbrano sliko nastavimo dvojnik naˇse slike, ˇce bi ˇstetje ˇzeleli ponoviti ali na isti sliki kasneje izvesti drug makro. Dvojnik slike dobimo s klicem metode

duplicate, ki je implementirana v razreduImagePlus.

Podobno nedovrˇsenost API-ja kot pri izvajanju makrojev opazimo tudi pri pridobivanju rezultatov ˇstetja objektov, saj se moramo ponovno zgledovati po delovanju uporabniˇskega vmesnika. Ker je slednji implementiran tako, da je naenkrat odprto samo eno okno z rezultati oz. so rezultati shranjeni v eni globalni tabeli rezultatov, tudi te dobimo s klicem statiˇcne metode:

(28)

3.1.2

Teˇ

zave pri ˇ

stetju celic z ImageJ1

Kljub preprosti sintaksi jezika ImageJ Macro in relativno majhnemu ˇstevilu ukazov, ki jih potrebujemo, da avtomatsko preˇstejemo celice na izbrani sliki, se lahko to v praksi izkaˇze za precej zamudno in zahtevno opravilo. Isti nabor ukazov ne deluje za vzorce z razliˇcnimi vrstami celic, drugaˇcno poveˇcavo mi-kroskopa ali osvetljenostjo vzorca pri zajemu slike. Nabolj zamuden del ˇstetja je zato izbira operacij, s katerimi pred ˇstetjem obdelamo sliko in doloˇcanje parametrov ukazov programa ImageJ1, ki jih uporabimo.

Ta proces je v programu Learn123 avtomatiziran z uˇcenjem ˇstetja, kjer gre v resnici za optimizacijo makroja z zaporedjem ukazov, ki jih uporabimo za ˇstetje.

3.2

cenje ˇ

stetja

Pri uˇcenju ˇstetja celic z orodjem ImageJ gre v programu Learn123 za op-timizacijo makroja, ki ga uporabimo za ˇstetje celic. Proces optimizacije je implementiran s pomoˇcjo genetskega algoritma.

Za zaˇcetek uˇcenja potrebujemo mnoˇzico slik z oznaˇcenimi celicami in predlogo makroja z zaporedjem ukazov za ˇstetje celic, ki jo bomo optimizirali.

3.2.1

Predloga za optimizacijo

Predloga (ang. template) za optimizacijo je napisana v jeziku ImageJ Macro s posebno sintakso, s katero posploˇsimo parametre makroja. Implementirane so naslednje posploˇsitve parametrov:

• Interval vrednosti celoˇstevilskega parametra (integer interval)

- namesto celoˇstevilske vrednosti podamo meje intervala, v katerem mora biti dana vrednost. Primer: $i{1,10}.

• Interval vrednosti realnega parametra (double interval) -

na-mesto realne vrednosti podamo meje intervala, v katerem mora biti dana vrednost. Primer: $d{0.50,1.00}.

(29)

Diplomska naloga 15

• Nabor moˇznih vrednosti v obliki znakovnih nizov (options for

string parameters) - namesto parametra v obliki znakovnega niza

podamo nabor moˇznih parametrov. Primer: $o{a,b,c,d}.

Predloga je torej makro z zaporedjem ukazov za ˇstetje, v katerem lahko namesto toˇcnih vrednosti parametrov (argumentov) podamo samo interval, v katerem naj bi se vrednosti nahajale, ali pa nabor moˇznih vrednosti, v kolikor gre za nize znakov. Primer tako parametriziranega ukaza je sledeˇc: run (" E n h a n c e C o n t r a s t ..." , " S a t u r a t e d p i x e l s =

$i{0.1, 2.0} %") ;

Nabor moˇznih vrednosti lahko uporabimo tudi za opcijske operacije za procesiranje slike pred ˇstetje objektov, za katere nismo prepriˇcani, ali bi jih uporabili ali ne. V tem primeru imamo nabor dveh moˇznih vrednosti: ukaza ali niˇcesar (praznega niza):

$o{run("Fill Holes");,}

Del programa Learn123 je tudi vnaprej pripravljena predloga z osnovnim naborom ukazov in parametrov (priloga 1).

3.2.2

Genetski algoritem

Genetski algoritmi so vrsta optimizacijskih algoritmov, ki delujejo po vzoru naravne selekcije in za optimiziranje reˇstive uporabljajo bioloˇske tehnike, kot so selekcija, kriˇzanje in mutacija [12].

Algoritem delovanje zaˇcne z mnoˇzico reˇsitev problema (populacijo), ki jo predstavlja 30 kromosomov, sestavljenih iz genov. V programu Learn123 vsak kromosom predstavlja en makro, geni pa so parametri, ki jih optimi-ziramo. Zaˇcetna populacija je generirana tako, da makroje (kromosome) iz predloge ustvarimo tako, da nakljuˇcno izberemo vrednosti parametrov za vsak kromosom.

V vsaki generaciji genetskega algoritma kromosome ocenimo, da lahko izberemo predstavnike, ki jih bomo kriˇzali med seboj (opravimo selekcijo).

(30)

Ocenjevanje kromosomov poteka tako, da z makrojem, ki ga predstavlja po-samezen kromosom, avtomatsko preˇstejemo celice na vseh slikah iz uˇcne mnoˇzice. Rezultat avtomatskega ˇstetja za vsako sliko nato primerjamo z roˇcnimi oznakami, ki so podane na zaˇcetku. V sodih iteracijah primerjamo ˇstevilo preˇstetih celic, v lihih pa razdalje med oznaˇcenimi toˇckami. Konˇcna ocena kromosoma je vsota razlik med ˇstevilom preˇstetih celic oziroma vsota razdalj med oznaˇcenimi toˇckami za vse slike iz uˇcne mnoˇzice.

Kriˇzamo pare kromosomov, ki jih izberemo glede na padajoˇce ocene. Naj-bolje ocenjena predstavnika izberemo kot prvi par, drugo- in tretje-najNaj-bolje ocenjenega kot drugi par in tako dalje. Izbrane pare kriˇzamo med seboj tako, da za vsak par najprej nakljuˇcno izberemo toˇcko kriˇzanja in glede na to razdelimo njune gene na dva dela. Prvega otroka sestavimo iz prvega dela genov prvega starˇsa in drugega dela genov drugega starˇsa, drugega otroka pa iz prvega dela genov drugega starˇsa in drugega dela genov prvega starˇsa.

Vsak otrok je z doloˇceno verjetnostjo podvrˇzen ˇse mutaciji, ki poteka tako, da nakljuˇcno izbranemu genu danega kromosoma zamenjamo vrednost.

Po selekciji, kriˇzanju in mutaciji vse tri skupine kromosomov (starˇse oz. predstavnike prejˇsnje generacije, otroke oz. podmladek in mutiran podmla-dek) ponovno ocenimo, razporedimo po padajoˇcih ocenah in izberemo prvih 30 najboljˇsih, ki preˇzivijo do naslednje generacije.

Ta postopek ponavljamo, dokler ne pridemo do 30. generacije. Na koncu kromosome ponovno razporedimo po padajoˇcih ocenah, tako da je prvi kro-mosom (makro) najboljˇsi rezultat uˇcenja. Postopek uˇcenja lahko po potrebi ponovimo veˇckrat. Glede na uˇcno mnoˇzico in uspeˇsnost uˇcenja lahko spreme-nimo tudi velikost populacije, ˇstevilo iteracij, ki jih opravimo v enem sklopu uˇcenja ali verjetnost mutacije podmladka, ki lahko moˇcno vpliva na uspeˇsnost algoritma.

(31)

Poglavje 4

Posodobitev programa

Learn123

Eden izmed ciljev diplomskega dela je posodobiti program Learn123 tako, da namesto ImageJ1 uporabimo ImageJ2. V prvotni implementaciji Learn123 pri uˇcenju ˇstetja kromosome ocenjujemo zaporedno, saj lahko zaradi imple-mentacije ImageJ1 API-ja naenkrat izvajamo samo en makro na eni sliki in z vsako izvedbo ˇstetja objektov prepiˇsemo rezultate prejˇsnje. Z uporabo ImageJ2 smo ˇzeleli uˇcenje pospeˇsiti, saj nova verzija omogoˇca, da naenkrat uporabljamo veˇc instanc programa. To smo ˇzeleli izkoristiti za paraleliza-cijo ocenjevanja tako, da bi makroje, ki jih predstavljajo kromosomi, izvajali hkrati, in sicer vsakega v svoji instanci programa.

V nadaljevanju opiˇsemo potek posodobitve programa, primerjamo razli-ˇcne naˇcine implementacije ocenjevanja kromosomov z ImageJ2 in na primeru programa Learn123 komentiramo, kako poteka prehod z ImageJ1 na ImageJ2 za obstojeˇce uporabnike vmesnika za programiranje ImageJ1.

Izvorna koda posodobljenega programa je na voljo na spletnem naslovu

https://bitbucket.org/chibo17/learn123/. 17

(32)

4.1

Ocenjevanje kromosomov z ImageJ2

Makroji so v ImageJ2 obravnavani kot skripte napisane v jeziku ImageJ Ma-cro. Z ImageJ2 API-jem vse skripte izvajamo s pomoˇcjo storitve za skripti-ranje knjiˇznice SciJava Commons (ScriptService), ki jo ima vsaka instanca programa ImageJ. Skripto izvedemo s klicem metoderun, implementirane v razreduScriptService.

Makro tako izvedemo z naslednjim klicem, kjer je ij instanca programa ImageJ, macro pa znakovni niz ukazov v jeziku ImageJ Macro:

ij . s c r i p t . run (" m a c r o . ijm " , macro , f a l s e )

V ImageJ2 je moˇzno skriptam podati vhodne in izhodne parametre [35], kar pomeni, da bi lahko naˇsi skripti (makroju) kot vhodni parameter podali sliko (objektImagePlus), kot izhodni parameter pa bi skripta vrnila rezultate analize v obliki objekta ResultsTable. Ker je jezik ImageJ Macro omejen samo na numeriˇcne tipe in znakovne nize in so tako omejeni tudi parametri, takˇsna uporaba makrojev ni mogoˇca.

4.2

Prehod z jezika ImageJ Macro na Python

Zaradi omejitev jezika ImageJ Macro smo se odloˇcili za menjavo skriptnega jezika. ImageJ2 za skriptiranje poleg makrojev podpira ˇse programske jezike Groovy, Python, JavaScript, Ruby, Lisp in R [36]. Zaradi preproste sintakse in razˇsirjenosti smo izbrali Python oziroma njegovo implementacijo Jython, ki jo podpira ImageJ2.

Jython je implementacija programskega jezika Python, ki je prilagojena za izvajanje na JVM. V programih, napisanih v Jythonu, lahko uporabljamo vse razrede napisane v Javi. Uporabljamo lahko tudi skoraj vse module, ki so na voljo v Pythonu, z izjemo nekaterih CPython modulov, ki so napisani v programskem jeziku C [19].

Osnovno predlogo (priloga 1), napisano v jeziku ImageJ Macro, smo pre-pisali v Jython. Ohranili smo enako sintakso za posploˇsitev parametrov, le

(33)

Diplomska naloga 19 da smo vejico nadomestili s podpiˇcjem:

• $i{n;m} - interval vrednosti celoˇstevilskega parametra,

• $d{x;y} - interval vrednosti realnega parametra,

• $o{a;b;c;d} - nabor moˇznih znakovnih vrednosti parametra.

Novi predlogi (priloga 2) smo dodali tudi vhodne in izhodne parametre. Pri skriptiranju v ImageJ2 morajo biti le-ti deklarirani na zaˇcetku skripte. V vsaki vrstici je lahko samo ena deklaracija parametra, ki se zaˇcne z oznako

#@.

Primer deklaracije vhodnega parametra, kjer je Type podatkovni tip pa-rametra, variableName pa ime spremenljivke, ki ga predstavlja:

# @ T y p e v a r i a b l e N a m e

Podobno deklariramo izhodne parametre, le da zaˇcetku deklaracije do-damo kljuˇcno besedo output:

# @ o u t p u t T y p e o u t p u t N a m e

Nabor podatkovnih tipov, ki jih lahko uporabimo kot parametre pri skrip-tiranju, je omejen pri vseh skriptnih jezikih, ki so podprti v ImageJ2. Poleg numeriˇcnih tipov, Boolovih vrednosti, znakov in znakovnih nizov, so pod-prti samo ˇse tipi Dataset, ImagePlus, ColorRGB, Date in File [35]. Ker med njimi ni podatkovnega tipa ResultsTable, ki smo ga ˇzeleli uporabiti za izhodni parameter, smo reˇsitev implementirali tako, da skripta namesto rezultatov analize vrne obdelano sliko, ki ima tabelo z rezultati shranjeno med svojimi lastnostmi (ang. properties).

V predlogi smo vhodni parameter poimenovaliimg, izhodnega paoutput: # @ I m a g e P l u s img

# @ o u t p u t I m a g e P l u s o u t p u t

Izhodni parameter izvedene skripte v programu Learn123 dobimo na na-slednji naˇcin:

(34)

val r e s u l t I m a g e : I m a g e P l u s = ij . s c r i p t . run (" s c r i p t . py " , script , false , " img " , img . d u p l i c a t e ) . get . g e t O u t p u t (" o u t p u t ") . a s I n s t a n c e O f [ I m a g e P l u s ]

Tabela rezultatov analize je med lastnostmi slike shranjena pod imenom (kljuˇcem) results:

val r e s u l t s T a b l e : R e s u l t s T a b l e = r e s u l t I m a g e . g e t P r o p e r t y (" r e s u l t s ") . a s I n s t a n c e O f [ R e s u l t s T a b l e ]

Kromosomi v posodobljeni verziji Learn123 ne predstavljajo veˇc makro-jev, temveˇc skripte v programskem jeziku Jython, zato v nadaljevanju na-mesto o izvajanju makrojev piˇsemo o izvajanju skript.

4.3

Primerjava razliˇ

cnih implementacij

oce-njevanja kromosomov

Z uporabo Pythona za skriptiranje in uvedbo vhodnih in izhodnih parame-trov skript lahko kromosome ocenjujemo z ImageJ2. Skripte izvajamo z instanco programa ImageJ oziroma s storitvijo za skriptiranje, ki ji pripada. Ocenjevanje lahko paraleliziramo tako, da kromosome ocenjujemo soˇcasno, vsakega s svojo instanco ImageJ, uporaba vhodnih in izhodnih parametrov pa nam omogoˇca tudi paralelno izvajanje skript v eni instanci ImageJ.

Odloˇcili smo se preizkusiti, kateri izmed omenjenih naˇcinov paralelizacije je bolj uˇcinkovit in kako se primerjajo z zaporednim ocenjevanjem kromoso-mov z ImageJ2. Implementirali smo zaporedno ocenjevanje kromosokromoso-mov in veˇc razliˇcic paralelnega ocenjevanja kromosomov ter implementacije testirali z izbrano uˇcno mnoˇzico.

4.3.1

Implementacije ocenjevanja kromosomov

Ocenjevanje kromosomov smo implementirali na ˇstiri razliˇcne naˇcine, od tega gre pri treh za paralelno ocenjevanje. Pri vseh treh paralelizacijah

(35)

ocenje-Diplomska naloga 21 vanja kromosomov smo uporabili paralelne zbirke (ang. parallel collections), ki so implementirane v programskem jeziku Scala. Iz seznama kromosomov (chs), smo s klicem metodepardobili njegovo pripadajoˇco paralelno zbirko. Na njej smo potem paralelno izvedli operacijomap, s katero smo zbirko kro-mosomov preslikali v zbirko ocen krokro-mosomov:

val c h r o m o s o m e s : P a r S e q [ C h r o m o s o m e ] = chs . par val r e s u l t s : L i s t [ E v a l u a t i o n ] = c h r o m o s o m e s . map (

e v a l O n e ) . t o L i s t

Velika prednost uporabe paralelnih zbirk v Scali je, da ima vsaka svojo zalogo niti (ang. thread pool), s katerimi lahko razpolaga in tako mednje uˇcinkovito razporeja opravila. Ni se nam torej potrebno ukvarjati z ustvar-janjem novih niti ali doloˇcanjem velikosti zaloge niti, saj je to uˇcinkovito implementirano v paralelnem ogrodju Scale [26, 28].

I Zaporedno ocenjevanje vseh kromosomov v eni instanci

pro-grama ImageJ

Zaporedno ocenjevanje vseh kromosomov v eni instanci programa ImageJ je enakovredno zaporednemu ocenjevanju makrojev z ImageJ1. Na zaˇcetku uˇcenja ustvarimo eno instanco ImageJ:

val ij : I m a g e J = new I m a g e J

To med uˇcenjem nato uporabljamo za zaporedno izvajanje skript.

II Paralelno ocenjevanje kromosomov v eni instanci programa

ImageJ

Kromosome lahko zaradi uporabe vhodnih in izhodnih parametrov paralelno ocenjujemo v eni instanci programa ImageJ. Na zaˇcetku uˇcenja ustvarimo eno instanco ImageJ, ki jo med uˇcenjem nato uporabljamo tako, da s pomoˇcjo paralelnih zbirk v Scali paralelno z njo izvajamo veˇc skript (ocenjujemo veˇc kromosomov).

(36)

III Paralelno ocenjevanje kromosomov v novih instancah pro-grama ImageJ

ImageJ2 API je implementiran tako, da lahko hkrati uporabljamo veˇc in-stanc programa. To je mogoˇce, ker ima vsaka aplikacija, napisana z uporabo knjiˇznice SciJava Commons, lasten kontekst (Context), ki inicializira in skrbi za seznam storitev SciJava te aplikacije [6].

Tako lahko implementiramo naˇso prvotno idejo paralelizacije uˇcenja ˇste-tja. Kromosome ocenimo tako, da na zaˇcetku ocenjevanja posameznega kro-mosoma ustvarimo novo instanco programa ImageJ in z njo izvedemo skripto na vseh slikah, ki pripadajo uˇcni mnoˇzici. Ocenjevanje izvajamo paralelno.

Pri takˇsnem naˇcinu ocenjevanja s konstantnim ustvarjanjem instanc Ima-geJ porabljamo veliko pomnilnika. Da nam slednjega ne bi zmanjkalo, po konˇcanem ocenjevanju kontekst instance zavrˇzemo in ga tako pripravimo za ˇciˇsˇcenje pomnilnika (ang. garbage collection). To storimo s klicem metode

dispose:

val ij : I m a g e J = new I m a g e J ...

ij . c o n t e x t . d i s p o s e

IV Paralelno ocenjevanje z novimi instancami storitve za

skripti-ranje SciJava

Za ocenjevanje kromosomov ne potrebujemo vseh funkcionalnosti programa ImageJ, temveˇc le dve storitvi SciJava: ScriptService, ki jo uporabljamo za izvajanje skript inWidgetService, ki omogoˇca uporabo vhodnih parametrov pri skriptiranju.

Ustvarjanje instanc ImageJ je ˇcasovno zahtevno. Ker se zavedamo, da vkljuˇcuje kreiranje objektov, ki jih za ocenjevanje kromosomov ne potre-bujemo, smo implementirali razliˇcico, v kateri za ocenjevanje posameznega kromosoma ustvarimo samo kontekst z nujno potrebnima storitvama:

(37)

Diplomska naloga 23 val c o n t e x t = new C o n t e x t ( c l a s s O f [ S c r i p t S e r v i c e ] , c l a s s O f [ W i d g e t S e r v i c e ]) val s c r i p t S e r v i c e = c o n t e x t . s e r v i c e ( c l a s s O f [ S c r i p t S e r v i c e ]) . a s I n s t a n c e O f [ S c r i p t S e r v i c e ] s c r i p t S e r v i c e . a d d A l i a s ( c l a s s O f [ I m a g e P l u s ])

Skripto potem izvedemo s storitvijo za skriptiranje, ki jo inicializira kon-tekst (scriptServicev odseku kode zgoraj). Enako kot pri prejˇsnjem naˇcinu paralelizacije tudi v tej implementaciji po konˇcanem ocenjevanju kontekst zavrˇzemo.

4.3.2

cna mnoˇ

zica, uporabljena za testiranje

imple-mentacij

Implementacije smo testirali z izvajanjem uˇcenja na razliˇcno velikih uˇcnih mnoˇzicah slik. Za testiranje smo uporabili mikroskopske slike celic CHO (ang. Chinese Hamster Ovary cells) [4] iz mnoˇzice slik BBBC030 [3], ki je prostodostopna v okviru zbirke Broad Bioimage Benchmark Collection (BBBC) [22].

Mnoˇzico BBBC030 sestavlja 60 mikroskopskih slik celic CHO. Na voljo so tudi referenˇcne slike z obrisi celic, s katerimi smo si pomagali pri oznaˇcevanju slik. Primer mikroskopske slike celic in pripadajoˇce referenˇcne slike prikazuje slika 4.1.

(38)

Slika 4.1: Primer slike celic CHO iz mnoˇzice BBBC030 in pripadajoˇce slike obrisov celic

Implementacije uˇcenja smo testirali z uˇcnimi mnoˇzicami velikosti 10, 20 in 30 slik.

4.3.3

Kriteriji primerjave implementacij

Implementacije uˇcenja smo primerjali glede na tri kriterije:

1. Cas izvajanjaˇ - zanimal nas je dejanski ˇcas izvajanja uˇcenja

posame-znih implementacij. ˇCas izvajanja je najpomembnejˇsi kriterij, saj je glavni cilj paralelizacije pohitritev uˇcenja.

2. Procesorski ˇcas (ang. CPU time) - zanimalo nas je, koliko

proce-sorskega ˇcasa za izvajanje potrebujejo razliˇcne implementacije. To je ˇcas, ki ga za procesiranje ukazov programa porabi centralno procesna enota. Ta kriterij je posebej zanimiv pri paralelnem procesiranju, saj nam pomaga oceniti, kako zahteven je program za procesiranje. Pri paralelnem procesiranju naenkrat izkoriˇsˇcamo veˇc jeder naˇsega proce-sorja (CPU), procesorski ˇcas pa nam pove, koliko ˇcasa so vse centralno procesne enote skupaj porabile za izvajanje naˇsega programa [7].

3. Poraba pomnilniˇskega prostora - opazovali smo, koliko

(39)

Diplomska naloga 25

4.3.4

Sistem, uporabljen za testiranje implementacij

Uˇcenje smo z razliˇcnimi implementacijami izvajali na prenosnem raˇcunalniku Apple MacBook Pro z naslednjimi specifikacijami:

• CPU: Intel Core i7 @ 2,5 GHz

• RAM: 16 GB

• GPU: AMD Radeon R9 M370X

• OS: MacOS Mojave 10.14.3

Programsko kodo, napisano v Scali, smo izvajali z orodjem sbt, ki smo mu za izvajanje dodelili 2 GB pomnilniˇskega prostora [30].

4.3.5

Rezultati testiranja implementacij

Pred testiranjem razliˇcnih implementacij ocenjevanja kromosomov moramo pomisliti tudi na implementacijo samega genetskega algoritma, s pomoˇcjo katerega poteka uˇcenje ˇstetja celic. Na koncu vsake iteracije algoritma novo generacijo kromosomov sestavimo iz najboljˇsih predstavnikov prejˇsnje gene-racije in njihovega podmladka. V izogib veˇckratnemu ocenjevanju kromoso-mov, ki preˇzivijo veˇc generacij, ocene kromosomov med uˇcenjem shranjujemo. Zato se moramo zavedati, da pri vsakem izvajanju uˇcenja ne ocenimo nujno istega ˇstevila kromosomov, saj je ˇstevilo ocenjevanj odvisno od sestava ge-neracij. Pri testiranju smo zato za vse velikosti uˇcnih mnoˇzic slik z vsako implementacijo uˇcenje izvedli trikrat in za primerjavo uporabili povpreˇcne vrednosti meritev posameznih kriterijev.

Za laˇzjo predstavitev in komentiranje rezultatov testiranja razliˇcne im-plementacije oznaˇcimo kot v razdelku 4.3.1. Rezultate meritev testiranja prikazuje tabela 4.1.

(40)

I II II IV

ˇ

Cas izvajanja 1037 s 470 s 548 s 466 s

10 slik Procesorski ˇcas 1170 s 1843 s 2573 s 1828 s

Pomnilnik 1,47 GB 2,52 GB 2,50 GB 2,50 GB ˇ

Cas izvajanja 2029 s 808 s 1012 s 846 s

20 slik Procesorski ˇcas 2183 s 2916 s 4084 s 3009 s

Pomnilnik 1,67 GB 2,49 GB 2,51 GB 2,51 GB ˇ

Cas izvajanja 3619 s 1655 s 2371 s 1915 s

30 slik Procesorski ˇcas 3809 s 5170 s 9108 s 6045 s

Pomnilnik 1,89 GB 2,5 GB 2,53 GB 2,52 GB Tabela 4.1: Rezultati testiranja uˇcenja z razliˇcnimi implementacijami oce-njevanja kromosomov pri razliˇcnih velikostih uˇcnih mnoˇzic

Primerjava implementacij glede na ˇcas izvajanja

0 s 500 s 1000 s 1500 s 2000 s 2500 s 3000 s 3500 s 4000 s

10 slik 20 slik 30 slik

I II III IV

(41)

Diplomska naloga 27 Slika 4.2 prikazuje rezultate testiranja ˇcasa uˇcenja z vsemi ˇstirih implemen-tacijami ocenjevanja kromosomov. Vidimo lahko, da je ˇcas uˇcenja pri vseh treh paralelnih implementacijah (II, III in IV) manjˇsi od ˇcasa uˇcenja pri implementaciji I, kjer kromosome ocenjujemo zaporedno.

ˇ

Cas izvajanja uˇcenja je, ˇce kromosome ocenjujemo paralelno, pribliˇzno 50 % manjˇsi kot pri zaporednem ocenjevanju kromosomov. Razlika med ˇcasi izvajanja paralelnih implementacij se z veˇcanjem uˇcne mnoˇzice poveˇcuje. Za najhitrejˇse se izkaˇze paralelno ocenjevanje kromosomov v eni instanci programa ImageJ (III). To pri uˇcni mnoˇzici s 30 slikami uˇcenje pohitri kar za 33 minut.

Primerjava implementacij glede na procesorski ˇcas

0 s 1000 s 2000 s 3000 s 4000 s 5000 s 6000 s 7000 s 8000 s 9000 s 10000 s

10 slik 20 slik 30 slik

I II III IV

Slika 4.3: Rezultati testiranja procesorskega ˇcasa

Pri rezultatih merjenja procesorskega ˇcasa, ki ga posamezne implementacije porabijo pri uˇcenju, opazimo ravno obraten vzorec kot pri ˇcasu izvajanja.

(42)

Na sliki 4.3 lahko vidimo, da je za uˇcenje s paralelnim ocenjevanjem kromo-somov (II, III in IV) potrebno veˇc procesorskega ˇcasa kot za uˇcenje, kjer je ocenjevanje implementirano zaporedno (I).

Za procesor je najbolj zahtevno paralelno ocenjevanje kromosomov v vih instancah programa ImageJ (III), kar je smiselno, saj je ustvarjanje no-vih instanc programa zahtevna operacija. Paralelno ocenjevanje kromoso-mov z novimi instancami storitve za skriptiranje SciJava (IV) je, kot smo priˇcakovali, hitrejˇse od ocenjevanja z novimi instancami ImageJ, vendar pa je razlika v procesorskem ˇcasu bolj opazna. Zagotovo lahko torej potrdimo predvidevanje, da je implementacija IV boljˇsa od implementacije III. Enako kot pri kriteriju ˇcasu izvajanja se je med paralelnimi implementacijami naj-boljˇse izkazalo paralelno ocenjevanje kromosomov v eni instanci programa ImageJ (II).

Primerjava implementacij glede na porabo pomnilniˇskega prostora

1,00 GB 1,20 GB 1,40 GB 1,60 GB 1,80 GB 2,00 GB 2,20 GB 2,40 GB 2,60 GB 2,80 GB

10 slik 20 slik 30 slik

I II III IV

(43)

Diplomska naloga 29 Na sliki 4.4, ki prikazuje koliˇcino porabe pomnilniˇskega prostora pri uˇcenju ˇstetja z razliˇcnimi implementacijami ocenjevanja kromosmov vidimo, da za zaporedno ocenjevanje potrebujemo manj pomnilniˇskega prostora. Poraba je pri paralelnih implementacijah (II, III in IV) skoraj enaka.

Povzetek rezultatov

Pri vseh velikostih uˇcnih mnoˇzic, uporabljenih za testiranje, lahko vidimo enak trend rezultatov meritev. Slika 4.5 prikazuje rezultate meritev pri uˇcenju z uˇcno mnoˇzico z 20 slikami.

Povzamemo lahko, da je uˇcenje s paralelnim ocenjevanjem kromosomov hitrejˇse od tistega z zaporednim, obenem pa zanj potrebujemo veˇc proce-sorskega ˇcasa in pomnilniˇskega prostora. Najboljˇsa implementacija, ki je obenem najhitrejˇsa in procesorsko najmanj zahtevna, pa je uˇcenje z ocenje-vanjem kromosomov v eni instanci programa ImageJ.

1,67 2,49 2,51 2,51 0 0,5 1 1,5 2 2,5 3 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 I II III IV

Čas izvajanja [s] Procesorski čas [s] Poraba pomnilnika [GB]

Slika 4.5: Rezultati testiranja implementacij uˇcenja z uˇcno mnoˇzico velikosti 20 slik

(44)

4.4

Teˇ

zave pri prehodu z ImageJ1 na

Ima-geJ2

Med posodabljanjem programa Learn123 smo dodobra spoznali razlike med ImageJ1 in ImageJ2, njuno arhitekturo in vmesnikoma za programiranje. ImageJ2 na prvi pogled prinaˇsa veliko izboljˇsav, vendar smo pri prehodu z ImageJ1 API-ja na ImageJ2 API naleteli na veˇc teˇzav. Opazili smo tudi marsikatere slabosti novega API-ja.

4.4.1

Dokumentacija

Prva teˇzava, s katero smo se sooˇcili pri prehodu z ImageJ1 na ImageJ2, je pomanjkanje, ponavljanje in nedoslednost dokumentacije. Na portalu Ima-geJWiki je objavljenih veliko strani o ImageJ2, vendar gre predvsem za opise arhitekture, informacije na njih se v veliki meri ponavljajo, besediˇsˇce pa ni vedno konsistentno.

Za razvijalce, ki se prviˇc lotevajo programiranja z ImageJ2 API-jem, ra-zumevanje arhitekture in delovanja API-ja traja veliko dalj ˇcasa, kot bi to priˇcakovali po branju o preprostosti integracije ImageJ2 z drugimi programi. Zaradi obseˇzne arhitekture in veliko nivojev abstrakcije, je tudi iskanje po dokumentaciji Java (ang. Javadocs) zelo zamudno. Pogosto je teˇzko najti v sklopu katere komponente ImageJ2 je implementirana ˇzeljena funkcija.

4.4.2

Pisanje skript v Pythonu

Pri pripravljanju nove predloge skripte v Pythonu (priloga 2) smo sledili do-kumentaciji o skriptiranju v Jythonu [20] in objavljenim vzorcem skript. Po vzoru dokumentacije smo pri pisanju skripte uporabili ImageJ1 API. Kljub popolnoma novi arhitekturi ImageJ2, zaradi katere naj bi bil API bolj intu-itiven in laˇzji za uporabo, je vsaj po dokumentaciji sodeˇc ImageJ1 API ˇse vedno kljuˇcen za skriptiranje.

(45)

Diplomska naloga 31 API-ja veliko bolj preprosta. Ukaze ImageJ tako recimo izvajamo s klicem metode IJ.run, ki ji podamo ime ukaza in njegove parametre:

IJ . run (" N o r m a l i s a t i o n " , "") ;

Implementirana je tudi metoda, s katero ukaz izvedemo na izbrani sliki (objektu ImagePlus):

IJ . run ( img , " N o r m a l i s a t i o n " , "") ;

Za izvedbo istega ukaza z ImageJ2 API-jem je potrebno veliko veˇc pro-gramerskega znanja in razumevanja arhitekture programa [15]:

ij . c o m m a n d () . run ( I m a g e N o r m a l i z e r I J 2 P l u g i n . class , true , " i n p u t " , img , " ij " , ij ) ;

V tem vidimo slabost novega API-ja in predvidevamo, da bo zaradi nje-gove kompleksnosti veˇcina uporabnikov ostala pri ImageJ1 API-ju, v kolikor ta zadoˇsˇca njihovim potrebam.

4.4.3

Izvajanje skript z ImageJ2 API-jem

Pri izvajanju skript z ImageJ2 smo pri testiranju vsakiˇc, ko smo ustvarili novo instanco programa ali storitve za skriptiranje, dobili naslednjo napako: [ E R R O R ] C a n n o t c r e a t e p l u g i n : c l a s s = ’ org . s c i j a v a . p l u g i n s . s c r i p t i n g . j a v a s c r i p t . J a v a S c r i p t S c r i p t L a n g u a g e ’ , n a m e = ’ J a v a S c r i p t ’ , p r i o r i t y =0.0 , e n a b l e d = true , p l u g i n T y p e = S c r i p t L a n g u a g e j a v a . l a n g . I l l e g a l A r g u m e n t E x c e p t i o n : No s u c h s c r i p t e n g i n e : j a v a s c r i p t

Napaka nas je presenetila predvsem zato, ker pri skriptiranju nismo upo-rabljali programskega jezika JavaScript. Izkaˇze se, da se napaka pri uporabi ImageJ z Javo 8 na operacijskem sistemu OS X pojavi ne glede na uporabljen jezik skriptiranja [14, 24]. Kljub napaki pa ImageJ potem deluje brez teˇzav.

(46)

ˇ

Ceprav ne vpliva na delovanje ImageJ2, je napaka pri uporabi ImageJ2 API-ja za skriptiranje lahko moteˇca, predvsem ˇce orodno vrstico sicer upo-rabljamo za izpisovanje podatkov. Zato jo tukaj izpostavljamo kot primer nedodelanosti ImageJ2 API-ja.

4.4.4

ImageJ Legacy

Pri uporabi ImageJ1 API-ja se je pri izvajanju makrojev ob vsaki izvedbi ukaza Analyze Particles odprlo ali posodobilo okno, ki je prikazovalo re-zultate detekcije objektov. V ImageJ2 je nadzor nad odprtimi okni in upo-rabniˇskim vmesnikom programa implementiran s storitvama SciJava za upra-vljanje z okni (WindowService) in za upravljanje z uporabniˇskim vmesnikom (UIService). Glede na dokumentacijo lahko z njuno pomoˇcjo ImageJ2 API uporabljamo brez uporabniˇskega vmesnika oz. nadziramo (in roˇcno zapi-ramo) vsa odprta okna.

Priˇcakovali smo, da bomo z uporabo ImageJ2 reˇsili to teˇzavo, ki se je pojavljala tudi, ko smo menjali jezik skriptiranja, saj smo pri pisanju skript po vzoru dokumentacije uporabili ImageJ1 API. Izkazalo se je, da je v Ima-geJ Legacy implementiran samo nadzor nad glavnim oknom uporabniˇskega vmesnika in okni, ki prikazujejo slike [1]. Na odpiranje vseh ostalih oken nimamo vpliva, tako da se tudi pri izvajanju skript z novim API-jem ne moremo izogniti odpiranju okna z rezultati.

Na primeru programa Learn123 vidimo, da ImageJ Legacy v resnici samo pokrpa razlike v arhitekturi med ImageJ1 in ImageJ2 tako, da lahko metode, implementirane v ImageJ1, uporabljamo tudi v ImageJ2. Uporaba kom-binacije API-jev ImageJ1 in ImageJ2 je sicer zaradi ImageJ Legacy precej preprosta, vendar pa z njeno uporabo ne moremo nujno izkoristiti novosti in storitev, ki jih ponuja ImageJ2.

Edina moˇznost, da popolnoma izkoristimo ImageJ2 je, da celoten program prepiˇsemo tako, da ImageJ1 in ImageJ Legacy popolnoma nadomestimo z novim API-jem. To je zelo zamudno delo, zato se moramo vpraˇsati, ali je smiselno.

(47)

Diplomska naloga 33

4.4.5

Premalo pomnilniˇ

skega prostora pri testiranju

implementacij

Pri testiranju razliˇcnih implementacij ocenjevanja kromosomov smo sprva imeli teˇzave zaradi premajhne koliˇcine pomnilniˇskega prostora, s katerim je razpolagalo orodje sbt. Med izvajanjem se je pojavilo okno uporabniˇskega vmesnika ImageJ1 z obvestilom o napaki, ki ga prikazuje slika 4.6, medtem ko v orodni vrstici, kjer smo izvajali implementacije, obvestila o napaki nismo dobili.

Sledili smo navodilom v obvestilu o napaki in v predlogi skripte posku-sili spremeniti koliˇcino pomnilniˇskega prostora, ki ga lahko uporablja pro-gram ImageJ. Pri tem smo dobili napako, da za spreminjanje koliˇcine po-mnilniˇskega prostora nimamo dovoljenja. Iskali smo naˇcin, kako bi to storili z ImageJ2 API-jem, vendar ga nismo naˇsli.

Slika 4.6: Obvestilo o napaki

Zaradi opisane teˇzave prvi rezultati testiranja niso bili pravilni in uˇcenje s paralelnim ocenjevanjem kromosomov ni bilo skorajda niˇc hitrejˇse od imple-mentacije, v kateri smo kromosome ocenjevali zaporedno. Teˇzavo smo reˇsili ˇsele kasneje, ko smo orodju sbt iz drugih razlogov za izvajanje namesto 1 GB dodelili 2 GB spomina.

(48)
(49)

Poglavje 5

Nov primer uporabe programa

Learn123

Poleg posodobitve programa Learn123 smo v sklopu diplomskega dela ˇzeleli najti novo domeno, na kateri bi lahko uporabili posodobljen program Le-arn123. Podroˇcje uporabe smo s ˇstetja celic relativno preproste okrogle oblike ˇzeleli razˇsiriti na ˇstetje zahtevnejˇsih objektov na slikah.

Z Learn123 smo z uporabo ImageJ poskusili avtomatsko ˇsteti objekte na treh razliˇcnih bioloˇskih domenah, ki jih predstavimo v nadaljevanju. Ob opisu posameznih poskusov izpostavimo tudi omejitve programa ImageJ, s katerimi smo se sreˇcali in utemeljimo sklep, da je ImageJ najbolj primeren predvsem za ˇstetje preprostih okroglih celic.

5.1

Stetje listnih reˇ

ˇ

z

Prva domena, na kateri smo poskusili uporabiti program Learn123, so mi-kroskopske slike listov rastline zebrasta tradeskancija (lat. Tradescantia ze-brina). Na slikah smo ˇzeleli ˇsteti oziroma detektirati listne reˇze, ki so za raziskovalce na podroˇcju biologije pomembne, ker lahko s spremljanjem od-piranja in zaod-piranja listnih reˇz doloˇcamo stanje rastline. Glede na velikost reˇz, ko so odprte, lahko na primer ugotovimo, koliko vlage potrebuje rastlina.

(50)

Za uˇcenje ˇstetja celic smo uporabili nabor mikroskopskih slik, ki je nastal pri umetniˇskem projektuNociceptor: Branje z ustnic intermedijske umetnice ˇ

Spele Petriˇc [27].

Slika 5.1: Primeri mikroskopskih slik listov rastline zebrasta tradeskancija Na sliki 5.1, ki prikazuje primere mikroskopskih slik listov, lahko vidimo, da se glede na osvetlitev in nastavitev fotoaparata, uporabljenega za zajem slik, le-te moˇcno razlikujejo. Celice, v katerih se nahajajo reˇze, se ˇcloveˇskemu oˇcesu na vseh slikah sicer zdijo izstopajoˇce, vendar z uporabo enega zporedja ukazov ImageJ za ˇstetje objektov z istimi parametri ne moremo pravilno preˇsteti in oznaˇciti celic na vseh. Spomnimo se, da pri ˇstetju objektov z ImageJ sliko z operacijami za procesiranje slik, ki so na voljo v programu, obdelamo tako, da iz nje dobimo binarno sliko, na kateri so samo objekti, ki nas zanimajo in te potem preˇstejemo. Zaradi razliˇcnih kontrastov, svetlosti

(51)

Diplomska naloga 37 in barv slik, z enakimi ukazi za procesiranje slik na vseh slikah celic, v katerih so listne reˇze, ne moremo loˇciti od ozadja.

Ob pregledu obstojeˇcih metod za avtomatsko detekcijo listnih reˇz rastlin ˇse dodatno potrdimo naˇso trditev, saj opazimo, da so za detekcijo reˇz v veˇcini primerov uporabljene metode, ki so kompleksnejˇse od metode ˇstetja objektov z ImageJ. Med bolj uveljavljene metode za detekcijo listnih reˇz sodijo na primer primerjanje predlog (ang. template matching) [21] ali pa kaskadna detekcija objektov (ang. cascade object detection) [18].

Omenjeni metodi lahko v programu ImageJ sicer uporabimo s pomoˇcjo obstojeˇcih uporabniˇskih vtiˇcnikov, vendar smo pri avtomatskem ˇstetju objek-tov s programom Learn123 ˇzeleli ostati pri uporabi osnovnih funkcionalnosti programa ImageJ. ˇCe bi uporabnikom Learn123 v skriptah dovoljevali upo-rabo pluginov, bi morali v Learn123 vkljuˇciti tudi orodje ImageJ Updater, s katerim bi vtiˇcnike prenaˇsali s spleta. Uporaba programa Learn123 bi v tem primeru zahtevala tudi internetno povezavo.

5.2

Stetje polipov meduz

ˇ

Druga domena, ki smo se ji posvetili, je ˇstetje polipov meduz na ostrigah. To na podroˇcju morske biologije pomembno za spremljanje spreminjanje ve-likosti populacij meduz v morju.

S ˇstetjem polipov meduz so se na Fakulteti za raˇcunalniˇstvo in informatiko ukvarjali v Laboratoriju za umetne vizualne spoznavne sisteme, kjer so v ta namen razvili aplikacijo PoCo [39]. Pregledali smo slike ostrig poraˇsˇcenih s polipi meduz, ki so jih uporabili za uˇcenje ˇstetja. Na sliki 5.2 lahko vidimo, da se polipi med seboj v veliki meri prekrivajo, in da niso okrogle oblike, kot celice, ki smo jih s programom Learn123 avtomatsko ˇsteli do sedaj. Za deljenje prekrivajoˇcih se objektov na slikah je v ImageJ implementiran ukaz

Watershed, ki pri deljenju objektov predvideva, da so le-ti okrogle oziroma elipsaste oblike. Ta je torej zadoˇsˇcal pri ˇstetju prekrivajoˇcih se celic okrogle oblike, v primeru polipov pa zaradi njihovih manj pravilnih oblik ne bi priˇsel

(52)

v poˇstev. Za slike polipov podobno kot za slike listnih reˇz velja tudi, da se razlikujejo v osvetljenosti, kontrastu in ostrini.

Slika 5.2: Primer slike ostrige poraˇsˇcene s polipi meduz in predstavitev poteka algoritma PoCov1

Slika 5.2 prikazuje tudi potek delovanja algoritma PoCov1, ki je enako kot algoritmi za detekcijo listnih reˇz oˇcitno zahtevnejˇsi od metode ˇstetja objektov z ImageJ. V drugi verziji programa PoCov2 so algoritem za ˇstetje polipov ˇse izboljˇsali in dosegli zelo visoko pravilnost detekcije polipov, ki je uporabo z Learn123 in metodo ˇstetja objektov z ImageJ ne moremo preseˇci.

5.3

Stetje ptic selivk v jatah

ˇ

Za tretjo domeno smo izbrali doloˇcanje ˇstevila ptic na slikah jat ptic selivk. Uˇcno mnoˇzico slik smo v tem primeru sestavili sami. Izbirali smo 10 slik, za katere smo vedeli, da bomo ˇstevilo ptic na sliki lahko doloˇcili z uporabo programa ImageJ. Enako kot velja pri ˇstetju polipov, z ukazi implementira-nimi v ImageJ ne moremo ˇsteti prekrivajoˇcih se ptic, saj so ptice med letom na slikah razliˇcnih oblik glede na kot slike in zamahe kril. Podobno ˇstetje objektov z ImageJ ni mogoˇce, ˇce se objekti, ki nas zanimajo, od ozadja ne

(53)

Diplomska naloga 39 loˇcujejo po barvi ali kontrastu. Izbirali smo torej slike z enostavnim (eno-barvnim) ozadjem, na katerih se ptice ne (ali pa vsaj ˇcimmanj) prekrivajo, kot na primer na sliki 5.3.

Slika 5.3: Primer slike jate ptic selivk [10]

Osnovna predloga za uˇcenje ˇstetja z genetskim algoritmom (priloga 2) za ˇstetje ptic na barvnih slikah ne zadoˇsˇca, zato smo jo prilagodili za izbrano mnoˇzico slik. Na zaˇcetku predloge smo dodali ukaz, s katerim smo barvne slike spremenili v 8 bitne sivinske slike. Dodali smo tudi veˇc opcijskih ukazov za obdelavo slike pred doloˇcanjem pragov slik in opcijskih ukazov za obdelavo binarnih slik.

Optimizirana skripta, ki je rezultat uˇcenja ˇstetja, dobro deluje za naˇso mnoˇzico slik, kot lahko vidimo v tabeli 5.1. Odstopanja se pojavljajo pred-vsem pri slikah, na katerih se nekaj parov ptic prekriva. Pri ˇstetju ptic na prvi sliki, predstavljeni med rezultati, pa vidimo primer, pri katerem je ˇstevilo ptic, ki ga je doloˇcil program Learn123 veˇcje od roˇcno doloˇcenega ˇstevila. To se je zgodilo zaradi ptice z raztegnjenimi krili, ki smo jo pri obdelavi slike pred ˇstetjem razdelili na veˇc delov (trup in krila) in jih ˇsteli kot loˇcene objekte. Optimizirano skripto kljub odstopanjem ocenjujemo kot dobro avtomatizacijo procesa ˇstetja, vendar pa je ne moremo uporabiti za ˇstetje ptic v jatah na poljubnih slikah. Teˇzave se pojavijo takoj, ko se ptice na slikah prekrivajo ali se med seboj preveˇc razlikujejo.

(54)

Slika ˇSt. ptic (Learn123) St. ptic (roˇˇ cno) 1 23 21 2 11 11 3 6 6 4 6 6 5 10 10 6 11 11 7 30 33 8 15 16 9 18 19 10 9 10

Tabela 5.1: Rezultati ˇstetja ptic v jatah s programom Learn123 v primerjavi s ˇstevilom roˇcno preˇstetih ptic na posameznih slikah

5.4

Uporaba programa ImageJ za ˇ

stetje

po-ljubnih objektov

Vsi trije poskusi uporabe Learn123 na novih domenah so nam pokazali, da ImageJ ni posebej prilagojen za ˇstetje objektov na slikah. To je navadno implementirano z metodami, ki upoˇstevajo specifiˇcne lastnosti objektov, kot na primer obliko. ImageJ je namenjen predvsem procesiranju slik, medtem ko je za ˇstetje objektov na voljo samo ena metoda, s katero lahko doloˇcimo ˇstevilo ˇcrnih objektov na binarnih slikah.

Povzamemo lahko, da uporaba programa Learn123 za ˇstetje objektov na poljubnih domenah ni mogoˇca, saj sama programska oprema ImageJ ne ponuja dovolj sploˇsnih metod, namenjenih ˇstetju objektov. Zato je primeren predvsem za ˇstetje celic preproste oblike na mikroskopskih slikah. Za te navadno velja, da vzorci, v katerih ˇzelimo ˇsteti celice, ne vsebujejo velikega ˇstevila razliˇcnih tipov celic, ozadje slik vzorcev pa je enostavno.

(55)

Poglavje 6

Zakljuˇ

cek

V okviru diplomskega dela smo spoznali programsko opremo ImageJ, name-njeno procesiranju mikroskopskih slik. Seznanili smo se z osnovnimi opera-cijami za procesiranje slik, implementiranimi v ImageJ, in postopkom pred-procesiranja in segmentiranja slik, ki je potrebno za ˇstetje objektov na slikah z izbranim programom. Spoznali smo tudi omejitve programa ImageJ, na-menjenega predvsem procesiranju slik, in teˇzave, s katerimi se sooˇcimo, ˇce ga ˇzelimo uporabiti za ˇstetje objektov na poljubnih vrstah slik.

Ker je bila prva verzija programa ImageJ1 razvita kot namizna aplika-cija, je njena arhitektura moˇcno vezana na uporabniˇski vmesnik, API pa pomanjkljiv. Pripravili smo pregled nove verzije programa ImageJ2 z novo modularno arhitekturo, ki naj bi omogoˇcala tudi laˇzjo integracijo ImageJ z drugimi programi, torej vkljuˇcevala boljˇsi API.

Posodobili smo program Learn123, namenjen avtomatskemu ˇstetju ce-lic na mikroskopskih slikah z uporabo ImageJ. V novi verziji Learn123 za ˇstetje celic uporabljamo ImageJ2, zamenjali pa smo tudi skriptni jezik in z jezika ImageJ Macro preˇsli na Python. Med procesom posodobitve smo identificirali pomanjkljivosti API-ja nove verzije ImageJ. Ugotovili smo, da je glavni vir teˇzav pri programiranju z ImageJ2 API-jem komponenta Ima-geJ Legacy, ki skrbi za vzratno kompatibilnost med staro in novo verzijo programa. Ta je nujna zaradi obstojeˇce uporabniˇske skupnosti programa

(56)

ImageJ1, vendar pa poskrbi le za nujno premostitev razlik med verzijama programa za to, da lahko ukaze in programski vmesnik ImageJ1 uporabljamo tudi v ImageJ2. V primeru uporabe kombinacije ImageJ1 in ImageJ2 tako ne moremo izkoristiti vseh novosti ImageJ2, saj te niso nujno implementi-rane za komponente iz ImageJ1. Zaradi kompleksne arhitekture ImageJ2 in posledniˇcno obseˇznejˇsega API-ja ter dokumentacije polne primerov upo-rabe ImageJ1 API-ja, pa predvidevamo, da novi API ˇse dolgo ˇcasa ne bo popolnoma nadomestil starega.

V programu Learn123 je uˇcenje ˇstetja celic implementirano z genetskim algoritmom. Z uporabo ImageJ2 API-ja smo pripravili ˇstiri razliˇcne im-plementacije ocenjevanja kromosomov v genetskem algoritmu, od tega tri paralelne. Implementacije uˇcenja z razliˇcnimi naˇcini ocenjevanja kromoso-mov smo testirali na treh razliˇcno velikih uˇcnih mnoˇzicah in izbrali najboljˇso. Pri testiranju se je najbolje izkazala implementacija, pri kateri kromosome paralelno ocenjujemo v eni instanci programa ImageJ. Z njo smo uˇcenje v primerjavi z uˇcenjem z zaporednim ocenjevanjem kromosomov pohitrili za pribliˇzno 50 %.

Predstavili smo tudi nov primer uporabe programa Learn123, in sicer doloˇcanje ˇstevila ptic selivk v jatah. Learn123 oziroma ImageJ smo preizku-sili tudi za ˇstetje listnih reˇz rastline zebrasta tradeskancija in ˇstetje polipov meduz na ostrigah ter opisali teˇzave pri teh domenah. Sklenili smo, da je ImageJ glede na nabor implementiranih funkcionalnosti najbolj primeren za procesiranje mikroskopskih slik.

Ob pisanju o omejitvah programske opreme ImageJ je potrebno pouda-riti, da je genetski algoritem, implementiran v programu Learn123, zelo dober pri izbiri oziroma optimizaciji parametrov operacij, implementiranih v Ima-geJ. Learn123 bi zato v prihodnosti lahko razˇsirili z uporabo katere druge knjiˇznice za procesiranje slik, ki vkljuˇcuje veˇc metod za ˇstetje objektov. Do-bra izbira bi bila knjiˇznica OpenCV (Open Source Computer Vision) [25]. OpenCV bi lahko z uporabo knjiˇznice IJ-OpenCV [13], namenjene komuni-kaciji med programsko opremo ImageJ in knjiˇznico OpenCV, integrirali v

(57)

Diplomska naloga 43 program Learn123 in tako za predprocesiranje slik ohranili uporabo ImageJ, za ˇstetje objektov pa uporabili metode implementirane v knjiˇznici OpenCV.

(58)
(59)

Literatura

[1] A problem running ImageJ in headless mode - Image.sc Forum. Dose-gljivo: https://forum.image.sc/t/a-problem-running-imagej-in-headless-mode/3909/14. [Dostopano 20. 2. 2019].

[2] Amr Abd-Elrahman, Leonard Pearlstine, and F Percival. Develop-ment of pattern recognition algorithm for automatic bird detection from unmanned aerial vehicle imagery. Surveying and Land Information Sci-ence, 65:37–45, 03 2005.

[3] BBBC030: Chinese Hamster Ovary Cells. Dosegljivo: https://data. broadinstitute.org/bbbc/BBBC030/. [Dostopano 21. 2. 2019].

[4] Celice CHO. Dosegljivo: https://sl.wikipedia.org/wiki/Celice_ CHO. [Dostopano 21. 2. 2019].

[5] Compatibility - ImageJ. Dosegljivo: https://imagej.net/ Compatibility. [Dostopano 18. 2. 2019].

[6] Context (SciJava Javadocs 1.0.0-SNAPSHOT API). Dosegljivo: https: //javadoc.scijava.org/SciJava/org/scijava/Context.html. [Do-stopano 19. 2. 2019].

[7] CPU time - Wikipedia. Dosegljivo: https://en.wikipedia.org/wiki/ CPU_time. [Dostopano 28. 2. 2019].

[8] Sebastian De Boodt, Ahmad Poursaberi, Jan Schrooten, Daniel Berck-mans, and Jean-Marie Aerts. A semi-automatic cell counting tool for

(60)

quantitative imaging of tissue engineering scaffolds. Tissue engineering. Part C, Methods, 19, 01 2013.

[9] Developing Plugins for ImageJ 1.x - ImageJ. Dosegljivo: https:// imagej.net/Developing_Plugins_for_ImageJ_1.x. [Dostopano 18. 2. 2019].

[10] Eurasian Cranes migrating to Meyghan Salt Lake, Markazi Province of Iran. Dosegljivo: https://en.wikipedia.org/wiki/V_formation# /media/File:Eurasian_Cranes_migrating_to_Meyghan_Salt_Lake. jpg. [Dostopano 22. 2. 2019].

[11] Tiago Ferreria and Wayne Rasband. ImageJ User Guide IJ1.46r. Do-segljivo: https://imagej.nih.gov/ij/docs/guide/user-guide.pdf. [Dostopano 16. 2. 2019].

[12] Genetski algoritem. Dosegljivo: http://wiki.fmf.uni-lj.si/wiki/ Genetski_algoritem. [Dostopano 28. 1. 2019].

[13] IJ-OpenCV. Dosegljivo: https://github.com/joheras/IJ-OpenCV. [Dostopano 23. 2. 2019].

[14] ImageJ cannot load the scripts Issue #12 imagej/imagej. Dosegljivo:

https://github.com/imagej/imagej/issues/116. [Dostopano 20. 2. 2019].

[15] ImageJ1-ImageJ2 cheat sheet - ImageJ. Dosegljivo: https://imagej. net/ImageJ1-ImageJ2_cheat_sheet. [Dostopano 18. 2. 2019].

[16] ImgLib2. Dosegljivo: https://imagej.net/ImgLib2. [Dostopano 7. 2. 2019].

[17] Introduction to Macro Programming - ImageJ. Dosegljivo: https: //imagej.net/Introduction_into_Macro_Programming. [Dostopano 16. 2. 2019].

(61)

Diplomska naloga 47 [18] Hiranya Jayakody, Scarlett Liu, Mark Whitty, and Paul Petrie. Micro-scope image based fully automated stomata detection and pore measu-rement method for grapevines. Plant Methods, 13(1):94, Nov 2017. [19] Jython. Dosegljivo: https://wiki.python.org/jython/JythonFaq/

GeneralInfo. [Dostopano 7. 2. 2019].

[20] Jython Scripting - ImageJ. Dosegljivo: https://imagej.net/Jython_ Scripting. [Dostopano 7. 2. 2019].

[21] H. Laga, F. Shahinnia, and D. Fleury. Image-based plant stornata phe-notyping. In2014 13th International Conference on Control Automation Robotics Vision (ICARCV), pages 217–222, Dec 2014.

[22] Vebjorn Ljosa, Katherine Sokolnicki, and Anne Carpenter. Annotated high-throughput microscopy image sets for validation. Nature methods, 9:637, 06 2012.

[23] Jasna Lojk, Uroˇs ˇCibej, David Karlaˇs, Luka ˇSajn, and Mojca Pavlin. Comparison of two automatic cell-counting solutions for fluorescent mi-croscopic images. Journal of microscopy, 260(1):107–116, 2015.

[24] Make JavaScript work in Java 8 Issue #116 imagej/imagej. Dosegljivo:

https://github.com/imagej/imagej/issues/116. [Dostopano 20. 2. 2019].

[25] OpenCV. Dosegljivo: https://opencv.org/. [Dostopano 23. 2. 2019]. [26] Parallel Collections Overview — Scala Documentation.

Dose-gljivo: https://docs.scala-lang.org/overviews/parallel-collections/overview.html. [Dostopano 19. 2. 2019].

[27] Pogovor z rastlino — Dnevnik. Dosegljivo: https://www.dnevnik.si/ 1042861401. [Dostopano 28. 2. 2019].

[28] Aleksandar Prokopec, Tiark Rompf, Phil Bagwell, and Martin Odersky. On a generic parallel collection framework. page 26, 2011.

References

Related documents

This optional 12 credit program is designed for students interested in future careers or graduate study in the areas of social work, criminal psychology, or sociology. Students

ALTERNATORS LSA 50.1 - 4 Pole. Electrical and

(Czech, Hungarian and Polish) vis-à-vis the Western European stock market (as a bench- mark the French CAC40, German DAX and STOXX Europe 600 were used) based

The main objectives of this paper include : (a) materializing the internationalization of our industry alliance on aircraft maintenance, (b) integrating our internal resources

people. Cape Town: Tafelberg. The history of Cape Town Opera. Die Afrikaanse taal, ’n liefdesgeskiedenis. <http:// www.litnet.co.za/cgi-bin/giga. Forty little years. Durban

years and is also required to serve the Government, if he/she continues to be in Government service after return to India, as one was before going abroad with award

Computational results indicate that test set correctness for the reduced support vector machine (RSVM), with a nonlinear separating surface that depends on a small randomly

V.4 of our text says, “Now the city was large and spacious, but the people in it were few, and the houses were not rebuilt.” So Nehemiah 7 begins the process of getting the people