Skip navigation

Légypapíros képelemzés

Az algoritmus leírása

A légyszámláló algoritmus az alábbi lépésekből áll:

  1. Szín-alapú küszöböléssel szegmentáljuk a légypapír által befoglalt régiót. A légypapírra utaló sárga színű pixelek vörös és zöld komponenseinek intenzitása lényegesen nagyobb, mint a kék komponensé, így a vörös-kék és zöld-kék különbségek szerint küszöbölünk. Tapasztalati úton azokat a pixeleket tekintjük előtérbelinek, amelyekre az említett mindkét különbség 60-nál nagyobb.

  2. Meghatározzuk a szegmentált bináris kép konvex burkát.

  3. Detektáljuk a konvex burok sarokpontjait. A légypapír valójában nagyjából téglalap alakú objektum, amelynek négy sarokpontja van, viszont a feldolgozandó képen a perspektívikus torzítás és a raszteres ábrázolásból adódó pontatlanságok miatt a légypapírnak megfelelő alakzat akár négynél több csúcsú sokszög is lehet. Ezért a művelethez olyan sarokdetektort használunk, amelyre megszorítható a két sarokpont közötti minimális euklideszi távolság: az elvártnál közelebb eső detektált pontokat nem tekintjük valódi sarkoknak, így azok nem szerepelnek az eredményül kapott pont listában. Tapasztalati úton 1500-as értéket állítottunk be az említett minimális távolságnak. Előfordul azonban egy-két kép esetén, hogy ezen érték mellett négynél kevesebb pontot talál a detektor, ez esetben megismételjük a sarokdetektálást, de ezúttal egy kevésbé szigorú minimális távolság értéket szabunk meg (600).

  4. A négy sarokpont ismeretében rektifikáljuk az eredeti kép szürkeárnyalatos változatán a légypapír által meghatározott régiót: perspektív transzformációt hajtunk végre úgy, hogy a négy detektált sarokpont képe egy 750 x 1000 pixel méretű téglalapnak egy-egy sarka legyen, ezáltal a perspektivikus torzításból adódó eltéréseket nagyjából ki tudjuk küszöbölni a légyszámlálásnál.

  5. Küszöböljük a legyeket a rektifikált képen: megfigyelések alapján a 90-nél kisebb intenzitású pixelek felelnek meg a legyeknek. A küszöbölt képen eltávolítjuk a 10-nél kisebb vagy 6000-nél nagyobb területű (pixelszámú) objektumokat, mivel azok feltehetően nem legyeket határoznak meg.

  6. Becslést adunk a papíron levő legyek számára. A küszöbölt képeken az objektumok darabszáma általában téves eredményt adhat, mert az egy-egy légynek megfelelő régiók gyakran „összetapadhatnak”, összeérhetnek, ezáltal több legyet is egynek számolnánk. Ehelyett egy közelítő érték próbálunk meghatározni a papír legyek által lefedett összterülete alapján úgy, hogy egy légy-objetumnak megbecsültük az átlagos terület értékét (40 pixel) a rendelkezésre álló felvételek alapján, így az összterületet az utóbbi területtel osztva megkapjuk a becsült darabszámot.


Az eljárás hajlamos a sötét színű filccel vékonyan felírt számokat, szöveget is „légy-szerűnek” tekinteni, ilyen esetben ezeket a hamis objektumokat is beleszámítja a becsült darabszámba. Ezért célszerűbb, ha a légypapíron és annak környezetében egyáltalán nem szerepel felirat a felvétel során.

Programkód és futtatás

A program forráskódja az alábbi linken érhető el: Légyszámlálás, Google Drive link

A program forrása két python fájlból áll: legyszamlalo_start.py, legyszamlalo.py. Az előbbi futtatásával jön létre a grafikus felület, az utóbbi pedig magát a légyszámláló eljárást tartalmazza, amely az „Algoritmus futtatása” gomb lenyomására hívódik meg. A programnak fejlesztőkörnyezet nélkül is futtatható változata a legyszamlalo.exe.