Skip navigation

Spórák detektálása él- és gradiens alapú szegmentálással

Általános gradiens alapú szegmentálás

A különbőző fajú gombák spóráinak detektálása azonos általános szegmentáláson alapszik, de az egyes esetekben utófeldolgozással pontosítottuk e szegmentálás eredményét, amelyet a spróra alakjához igazítottunk.

Az általános szegmentáló eljárás gradiens alapon történik. A képre kiszámoljuk a gradiens magnitudó értékét, majd átlag és szórás értékeket számolunk a magnitúdó értékekre, hogy meghatározzunk egy küszöbértéket, amellyel küszöböljük a képet. A küszöbölt képet ezután erodáljuk annak érdekében hogy a kisméretű objektumokat eltüntessük a képről és a szegmentált régiók már ténylegesen sprórákhoz tartozzanak. Az egyes üregeket a szegmentált régiókon belül feltöltjük.

Él alapú szegmentálás

Az él alapú szegmentálás is a képen számolható gradienseken alapszik, viszont ennél a szegmentálásnál a képet kontrasztosabbá kell tenni, valamint 1-pixel vékony határvonalat nyerünk ki Canny éldetektor segítségével.

Agaricus gombaspórák detektálása

Mivel az Agaricus gombaspórák körszerűek, ezért a detektálás első lépése egy Hough-féle kördetektálással történik. A sprórák mérete nem ismert, ezért algoritmikus módszerrel kell meghatározni az illesztendő körök sugarát. A szegmentált régióra távolságtérképet számolok, valamint kivonom a középvonalát minden objektumnak (lehetséges, hogy több spóra van a képen, és azok külön szegmentált objektumok). A vázpontokra eső távolságértékek lesznek a sugarak, amelyekkel köröket kell rajzolni. Ezen távolságértékeknek kiszámolom minimumát, maximumát, átlagát és szórását, mert ezek alapján fogom a sugarat meghatározni. Morfológiai nyitást alkalmazok a képre a kiszámolt maximális sugár felével azért, hogy elkülönítsem az esetlegesen összetapadt sprórákat. A vázpontok által lefedett lokális maximum értékekből régiónövelést indítok a szegmentum határáig. Minden egyes régió külön címkével rendelkezik, így elkülölnek az összetapadt spórák is.

Cladobotryum gombaspórák detektálása

A Cladobotryum spórák esetében él alapú szegmentálást használunk, az élt dilatáljuk és kitöltjük az általuk körbezárt részeket, ezzel meghatározunk egy olyan maszkot, amely meghatározza a spórák helyét. A spróra-régiókat izolált „magokra” zsugorítjuk, majd régiónöveléssel „hízlaljuk”  őket a maszkon belül. 

Lecanicilium gombaspórák detektálása

A Lecaniciolum spórák esetében él alapú szegmentálást használunk, az élt dilatáljuk és kitöltjük az általuk körbezárt részeket, ezzel meghatározunk egy olyan maszkot, amely meghatározza a spórák helyét. A spróra-régiókat izolált „magokra” zsugorítjuk, majd régiónöveléssel „hízlaljuk”  őket a maszkon belül. 

Mycogone gombaspórák detektálása

A Mycogone gombasprórákat képeit szegmentáljuk, majd a szegmentált régiókra távolságtérképet számolunk és kinyerjük a középvonalukat is. A középvonalra eső távolságértékből kiszámoljuk az átlagos, minimális és maximális sugár értéket. Kiszűrjük a kisméretű objektumokat (azok biztosan nem Mycogone spórák). Meghatározott maximális sugár érték felével erodálom a szegmentumot, majd ezen „magot” visszanövelem az eredeti szegmentált régió határain belül. A visszanövelés során a „magok” címkét is kapnak.

Trychoderma gombaspórák detektálása

A Trychoderma gombasprórákat képeit szegmentáljuk, majd a szegmentált régiókra távolságtérképet számolunk és kinyerjük a középvonalukat is. A középvonalra eső távolságértékből kiszámoljuk a minimális és maximális sugár értéket. Ezek az értékek segítségünkre lesznek a Hough-transzformációval történő kördetektálás során, ugyanis ezekkel a sugárértékekkel keresünk köröket a képeken. A detektált köröket címkézzük. Ezek lesznek a detektált spórák.

A detektált sprórák számlálása és a detekció kiértékelése

A detektáláshoz az egyes mikroszkóp-felvételeket kézzel annotáltuk. Elsősorban azokat a képeket használtuk a szegmentálás és detektálás, amelyeken egyféle gombaspóra volt látható. Az annotált képek bináris maszkok voltak, ezzel vetettük össze a detekció eredményét.  

Programkódok fordítása és futtatása

A spóradetektáló algoritmusok programjai az alábbi könyvtárszerkezetben vannak elrendezve:

  • modules
    • bin: futtatható állományok könyvtára
    • classes: lefordított Java fájlok helye
    • images: képek mappája
    • resources: külső függvénykönyvtárak mappája
    • results: eredmények mappája (ahol kell)
    • src: forráskódok mappája
    • videos: videófájlok mappája (a spórákhoz nem kell)

A futtatható állományok a bin könyvtárban vannak. A Java programok fordításához futtassuk le (Linux rendszer alatt) a compile_java_sources.sh szkriptet. Megjegyzés: Windows rendszer alatt ez a szkript MinGW alatt futtatható közvetlenül, de az utasításokat kimásolva Windows parancssorban is futtatható a fordító parancs.

A detektáló algoritmusok futtatása sablonszerűen történik. Mindegyik spórafajtához külön program van, valamint léteznek tesztprogramok is, amellyel egyes képhalmazok felhasználói interakció nélküli, kötegelt feldolgozása lehetséges. 

A feldolgozandó képeket az images mappába, illetv azon belül almappában célszerű előkészíteni.

Spóraképek szegmentálása

A kötegelt feldolgozáshoz Linux rendszeren az alábbi parancsokat kell kiadni:

./test_find_agaricus.sh
./test_find_cladobotryum.sh
./test_find_lecanicilium.sh
./test_find_mycogone.sh
./test_find_trichoderma.sh

A címkézett eredményképek a bin könyvtáron belüli könyvtárakba jönnek létre. Meglehetősen sötétek lesznek, mert a címkék 1-től kezdődnek, amely közel fekete intenzitású színként látszik a képeken. Ahol több spóra van, a nagyobb címke értékek világos szürke színnel jelennek meg. A címkézett képek nem a látványt, hanem a további feldolgozást szolgálják.

A képek egyéni feldolgozásához az a programokat (itt a Lecanicilium detektorra mutatom a példát) az alábbi utasítással kell futtatni (a környezeti változók beállítása után, amely a szkript fájlokból kimásolható):
java -Djava.library.path=$OPENCV_JAVA_LIB -cp $OPENCV_JAVA_LIB/opencv-3415.jar:../classes:tests/:segmentation:/evaluation:/skeleton/:utils/:. tests.java.FindLecaniciliumTest kepfajl.tif

A fenti utasításban nincs sortörés, folyamatosan kell beírni.

Szegmentálás kiértékelése

A szegmentálás kiértékeléséhez az alábbi szkript programokat kell futtatni:
./eval_segmentation_evaluation.sh (a trichodermára van beállítva, de átállítható másik könyvtárra)
./eval_detection_evaluation.sh (a trichodermára van beállítva, de átállítható másik könyvtárra)
./eval_agaricus_detection_evaluation.sh
./eval_mycogone_detection_evaluation.sh
./eval_trichoderma_dectection_evaluation.sh

Ezek a programok is kötegelten, felhasználói interakció nélkül dolgozzák fel a fájlokat és értékelik ki az szegmentálás pontosságát.

Ügyelni kell arra, hogy meg legyen adva a spóraképek annotált változatának könyvtára is! Máskülönben nincs mihez viszonyítani a szegmentálás/detekció pontosságát!

Demonstráció

Az alábbi videóban bemutatjuk a programok futását:

  • detekció
  • osztályozás
  • kiértékelés

Demó videó