Skip to content
koosk edited this page Dec 31, 2010 · 4 revisions

Az algoritmus működése

Az algoritmus négy fő részből áll:

  1. A digitális kép előkészítése

  2. Hough transzformáció segítségével körök keresése

  3. Színinformáció alapján csoportosítás és az érmék beazonosítása

  4. Az eredmények megjelenítése

1. A kép előkészítése

Ebben a szekcióban a feladat az, hogy adott színes képet olyan bináris képpé alakítsunk amelyen csak az érmék körvonalai vannak. Ez a következő lépés számára fontos, mivel így az gyorsan, sokkal pontosabb eredményt tud nyújtani. Ezt a következő lépésekkel érjük el:

  1. Az adott képet 8 bites szürkeárnyalatos képpé alakítjuk.
  2. Az átlagos színérték alapján egy küszöbölést végzünk. Ez az átlagos érték alatti pixeleket feketévé, a többit pedig fehérré alakítja.
  3. Az előző pontban kapott képet binárissá alakítjuk.
  4. Ebben a pontban egy bináris képünk van, amin az érmék fekete, a háttér pedig fehér színnel van ábrázolva. Az érmék körvonalai ilyenkor még szaggatottak, egyenetlenek, ezért szükség van azok kisimítására. Ezt a képen végrehajtott dilatálással majd ezt követően egy erodálással érjük el.

    binary.jpg

  5. A következő lépés a lyukak kitöltése következne, azonban ha több érme (legalább három darab) körben érinti egymás, akkor egy nagy zárt alakzatot hoznak létre, melyet a lyuk kitöltő algoritmus egy alakzatként tölteni ki. Így nagyon sok körvonal elveszne ami lehetetlenné tenné a későbbiekben a pontos detektálást. Ezért először meg kell keresni azon régiókat melyeket több érintkező érme zár be. Ezt a kép invertálása után (tehát most a háttér a fekete, az érmék fehérek) egybefüggő területek keresésével lehet megtalálni.
  6. A 4. pontban előállított képen lyukkitöltés alkalmazása, így az egyes érmék teljesen egybefüggőek lesznek.

    filled.jpg

  7. Ezután el kell távolítani a képről a feleslegesen kitöltött régiókat, amiket az 5. pontban detektáltunk.
  8. Körvonalazást végrehajtásával az előkészítés végéhez értünk.

    outline.jpg

2. Körök keresése

Ebben a részben az előző szekcióban előkészített képen megadott méretű kör alakzatokat keresünk. Ezt a Hough transzformáció algoritmus körök keresésére módosított változatával tesszük. Az algoritmust annyiban módosítottuk, hogy ha a transzformált képen talált lokális maximum (kör középpontja) értéke nem ér el egy megadott küszöbértéket akkor nem fogja körként azonosítani az adott régiót. Ez a keresés pontosítását teszi lehetővé. A küszöbértéket az eredeti színes képen számított átlag pixelérték alapján határozzuk meg.

A Hough transzformációról bővebb információ itt található.

A körkeresést minden érmetípus méretére külön futtatjuk (méret alapján növekvő sorrendben). Az egyes futtatások alkalmával detektált körök mindegyikének meghatározzuk a színét, és ha az megegyezik a keresett érme típusának színével akkor ezt a kört kivonjuk a képből (a területét fehérre festjük), mivel ilyenkor nagy valószínűséggel jó volt a detektálás. Ellenkező esetben nem történik meg a kivonás, így más érmének is detektálhatjuk a későbbiek folyamán. Ez azonban azt eredményezi hogy egy érmét többször is detektálhatja az algoritmus. Ezek közül a 3. lépésben választjuk ki a megfelelőt.

Szín meghatározása a körön belül mért átlagos telítettség (saturation) alapján történik. Ha egy bizonyos érték felett van akkor "sárga", ha egy másik érték alatt van akkor "fehér", különben "kettő színű" beazonosítást kap. A kör belsejébe eső pontokat a következő képlettel kapjuk (ahol x,y a kör középpontja, a,b a vizsgált pont, r pedig a sugár): ( (x-a)^2 + (y-b)^2 \le r^2 )

hough.jpg
Világos pontok a kör középpontok

3. Csoportosítás és kiválasztás

Az előző rész futtatása során meg van annak a veszélye, hogy egy érmét többször is detektál az algoritmus. Ilyen esetekben a megfelelő köröket egy csoportba kell rendezni, majd minden csoportból pontosan egy darab kört kell kiválasztani.

A csoportosítást egy hierarchikus klaszterezéssel végezzük el. Egymáshoz viszonyítva megvizsgáljuk a köröket, ha két érme középpontjának távolsága kisebb mint egy megadott érték, akkor azokat egy csoportba tesszük.

Ezután minden csoportból kiválasztjuk az első olyan kört, melynek a mért színe megegyezik a hozzá tartozó érmetípus színével (ha nincs ilyen akkor is kiválasztunk egyet).

4. Eredmény megjelenítése

Az utolsó lépés a talált körök megjelenítése az eredeti színes képen, illetve az érmék összértékének megjelenítése.

Elért eredmények