Nagy András
Kutatások a digitális képfeldolgozás témakörében
Tutor: Dr. Fazekas Attila egyetemi docens
Elıszó
A digitális képfeldolgozás területein belül kiemelkedı jelentıséggel bír az alakfelismerés. Ennek speciális ága a karakterfelismerés (röviden OCR az angol Optical Character Recognition elnevezésbıl), amely során nyomtatott, gépelt vagy kézzel írt papíron szereplı dokumentumból digitális képet állítunk elı, a kép szövegtartalmát felismerjük. Ez lehetıvé teszi, hogy a már felismert szöveget számítógépen szövegszerkesztıvel módosíthassuk. A szoftverpiacon több termék is jelen van, amely karakterfelismerésre használható. Ezek közül mindenképpen ki kell emelnünk a magyar fejlesztéső Recognita (újabban OmniPage Recognita) nevő programrendszert. Kutatásom célja nem ezen termékek funkcionalitásának megközelítése, hanem olyan szoftver elkészítése volt, amely rögzített, elıre betanított betőtípussal rendelkezı nyomtatott magyar szöveges oldalak felismerésére alkalmas.
-2-
1. Bevezetés
A karakterfelismerés során arra törekszünk, hogy felismerjük egy kép szövegtartalmát. Értékelhetı eredményt kapni nem csak a karakterek alaktani információi alapján tudunk, hanem a felismerendı szöveg nyelvéhez tartozó nyelvi támogatást is felhasználhatunk a pontosabb eredmény érdekében. Ebben az esetben is elı kell állítanunk a képbıl egy szöveget, amit utána szótárak, nyelvtani és helyesírási szabályok alapján korrigálhatunk. A kulcslépés ilyenkor is az a felismerés, amikor egy karaktert tartalmazó képhez a kép által reprezentált karaktert rendeljük. Karakterfelismerés során a felismerés többféle módszerrel is történhet. Minden esetben szükségünk lesz etalonelemekre, amelyek tárolják az egyes betanított karakterek jellemzı információit. Ezen etalonelemekhez történı hasonlítás során tudjuk eldönteni egy vizsgált karakterrıl, hogy melyik karakterhez hasonlít a legjobban. Kontúrkijelöléssel történı vizsgálat során a karakter kontúrjának jellemzı tulajdonságait hasonlítjuk az etalonelemekhez. Vázkijelölés esetén meghatározzuk a karakter vázát, majd a vázon található elágazási pontok számából és azok elhelyezkedésébıl kapott információk segítségével állapítjuk meg egy karakterrıl, hogy melyik etalonhoz áll a legközelebb. Walsh-transzformációval történı felismerés során egy karakter tulajdonságait Walsh-transzformációval képzett mátrixok segítségével egy vektorban tároljuk le, majd a felismerés során ennek a vektornak az etalonelemekhez rendelt vektoroktól való távolságának a minimumát keressük. Amelyik etalonelemnél ez a távolság minimális, az az etalonelem hasonlít legjobban a felismerendıre. Felismerésnél már pontosan szegmentált képekkel dolgozunk, de elıbb ezeket a szegmenseket elı kell állítani. Feltesszük, hogy ideális esetben fehér lapon fekete szöveget szeretnénk feldolgozni. A digitalizálás során szürkeskálás képet kapunk. Ezen kép pontjaihoz fekete vagy fehér színeket rendelve egy kétszínő fekete-fehér képet kapunk. A kapott képen szőréssel eltávolíthatjuk a digitalizálás során keletkezett apró zajokat. A szőrt képet különbözı technikákkal szegmensekre bonthatjuk, majd ezen kis képekre már tudunk jellemzıket vizsgálni. A szegmensek segítségével tudunk etalonelemeket készíteni a tanítás során illetve rögzített etalonelemek mellett a szegmenseket fel is ismerhetjük.
A fejlesztés során 8 bites szürkeskálás képeket használtam, amelyek 256 szürkeségi szintet tartalmaztak. A képeket a hisztogramjuk alapján vágtam két szintre. A bináris képen megjelenı sóbors zajok eltávolítására lokális zajszőrést alkalmaztam. A szőrt képbıl vízszintes és függıleges
-3-
egyenes szakasszal történı szegmentálással nyertem ki a felismerendı alakzatokat tartalmazó szegmenseket.
A tanítás és a felismerés folyamatában a kép elıkészítése, szegmentálása és a szegmensekhez tartozó vektorok kiszámítása azonos lépésekbıl áll. Az eltérés ezután következik. Tanítás esetén a képhez készített vektorhoz bekérjük a felhasználótól az ábrázolt karaktert. Ha nem szerepelt még az etalonvektorok közt, akkor betesszük az etalonok közé, különben az eddigi elıfordulásaiból számított koordinátánkénti átlagvektorát helyezzük el az etalonok közt a régi etalonvektor helyett. Felismerés esetén megnézzük, hogy a képhez számított vektornak melyik etalonvektortól való távolsága a legkisebb. Ezen etalonvektorhoz rendelt karakter lesz a felismert karakterünk.
A tanítás és a felismerés lépéseit a következı ábrák illusztrálják.
-4-
Analóg kép Digitalizálás
Szürkeskálás kép Két szintre vágás
Fekete-fehér kép Szőrés
Szőrt kép Szegmentálás
Szegmentált képek Vektorok meghatározása
Szegmensekhez tartozó vektorok
Tanított karakterek
1441 -223 -281 -122 37 -46 303 -97 45 300 200 106 34 237 -214 83 439 -204 -147 49 -79 -80 -219 -42 272 19 -199 -212 -125 -147 -1 -198 -117 -30 -112 -56 -49 66 21 -6 -363 54 -180 14 -6 63 54 -132 -90 -83 175 -54 79 194 -18 272 -297 46 -32 73 -22 223 58 -170
fe
1489 -384 -204 0 -134 76 79 3 468 6 426 -80 30 53 -13 0 423 55 -90 96 66 -129 0 145 49 299 -54 193 0 134 122 186 -157 0 20 37 0 24 0 0 225 107 -136 155 -34 66 104 -42 -536 -71 271 -55 79 0 44 36 -355 0 -132 57 -30 27 107 0
k
1848 28 -310 273 155 202 231 -2 161 -267 0 -279 -4 106 3 153 130 -4 64 -233 26 -56 120 0 202 107 167 513 -33 -339 -396 -43 0 0 0 -4 0 0 60 0 0 0 34 -203 0 0 -31 0 -205 -23 0 -226 0 0 71 0 0 84 0 0 0 0 80 -60
e
1787 0 -61 115 -220 -34 152 -330 601 83 109 -273 102 -194 -166 135 -314 48 0 22 0 0 -30 -34 -913 68 23 13 0 0 -13 -33 0 0 0 0 0 0 -3 0 -455 0 0 0 -2 0 0 -8 68 0 6 13 36 5 17 35 -299 0 0 104 -15 71 58 -31
t
1848 28 -310 273 155 202 231 -2 161 -267 0 -279 -4 106 3 153 130 -4 64 -233 26 -56 120 0 202 107 167 513 -33 -339 -396 -43 0 0 0 -4 0 0 60 0 0 0 34 -203 0 0 -31 0 -205 -23 0 -226 0 0 71 0 0 84 0 0 0 0 80 -60
e Tanítás
Etalonvektorok
1. ábra A tanítás lépései -5-
Analóg kép Digitalizálás
Szürkeskálás kép Két szintre vágás
Fekete-fehér kép Szőrés
Szőrt kép Szegmentálás
Szegmentált képek
Szegmensekhez tartozó vektorok
1441 -223 -281 -122 37 -46 303 -97 45 300 200 106 34 237 -214 83 439 -204 -147 49 -79 -80 -219 -42 272 19 199 -212 -125 -147 -1 -198 117 -30 -112 -56 -49 66 21 6 -363 54 -180 14 -6 63 54 132 -90 -83 175 -54 79 -194 -18 272 -297 46 -32 73 -22 223 58 -170
1489 -384 -204 0 -134 76 79 3 468 6 426 -80 30 53 -13 0 423 55 -90 96 66 -129 0 145 49 299 -54 193 0 134 122 186 -157 0 20 37 0 24 0 0 225 107 -136 155 -34 66 104 -42 -536 -71 271 -55 79 0 44 36 -355 0 -132 57 -30 27 107 0
Vektorok meghatározása
1848 28 -310 273 155 202 231 -2 161 -267 0 -279 -4 106 3 153 130 -4 64 -233 -26 -56 120 0 202 107 167 -513 33 -339 -396 -43 0 0 0 -4 0 0 60 0 0 0 34 -203 0 0 -31 0 -205 -23 0 -226 0 0 71 0 0 84 0 0 0 0 80 -60
1787 0 -61 115 -220 -34 152 -330 601 83 109 -273 102 -194 -166 135 -314 48 0 22 0 0 -30 -34 -913 68 23 13 0 0 -13 -33 0 0 0 0 0 0 -3 0 -455 0 0 0 -2 0 0 -8 68 0 6 13 36 5 17 35 -299 0 0 104 -15 71 58 -31
Felismerés
Etalonvektorok
Felismert karakterek
fe
k
Felismert szöveg
e fekete
2. ábra A felismerés lépései
-6-
1848 28 -310 273 155 202 231 -2 161 -267 0 -279 -4 106 3 153 130 -4 64 -233 -26 -56 120 0 202 107 167 -513 33 -339 -396 -43 0 0 0 -4 0 0 60 0 0 0 34 -203 0 0 -31 0 -205 -23 0 -226 0 0 71 0 0 84 0 0 0 0 80 -60
t
e
2. Feldolgozás
A feldolgozás alapja egy fehér lapon szereplı fekete szöveg. Ezt valamilyen digitalizáló eszközzel, célszerően szkennerrel bedigitalizáljuk, amelynek eredménye egy szürkeskálás kép lesz. A beolvasás során keletkezı zaj következtében a képünk már nem lesz fekete-fehér. Nekünk csak elıtér és háttérpontokra van szükségünk, így az egyes szürkeségi szintekhez fehér vagy fekete színt rendelünk két szintre vágással, így kétszínő képet kapunk. A beolvasás során keletkezett zaj továbbra is hatással van a képünkre, az alakzatok környezetében pontmérető vagy annál nagyobb mérető fekete komponensek jelenhetnek meg. Ezek jelentıs részét szőréssel távolíthatjuk el. Ennek érdekében azt vizsgáljuk, hogy egy adott pont körül túl sok eltérı színő pont van-e. Ha igen, akkor ellenkezıjére változtatjuk. A szőrés eredményéként kapott képet többlépéses vízszintes és függıleges szegmentálással kisebb részképekre bonthatjuk fel. Ezen szegmensek lesznek a tanítás és a felismerés alapegységei. A túl kicsi és túl nagy szegmenseket eldobhatjuk, mert ezek nem hordoznak értékes információt. Ilyen például egy fejlécvonal vagy egy néhány pontból álló zaj. A Walsh-transzformáció segítségével minden megmaradt szegmenshez egy sajátságvektort rendelünk. Tanítás folyamán ilyen sajátságvektorokat tárolunk le a hozzájuk rendelt karakterrel, illetve karakterekkel együtt. Felismerés során a felismerendı szegmens sajátságvektorától legkisebb távolságra lévı etalonvektort keressük. Ehhez az etalonvektorhoz tartozó karakter lesz a felismert karakter.
2.1.
Két szintre vágás
Adott egy szürkeskálás képünk, amelybıl bináris képet kívánunk készíteni. Jelen esetben 8 bites szürkeskálás képpel dolgoztam, amely 256 különbözı szürkeségi szintet tartalmazhat a fekete színtıl a fehér színig. A fekete színhez a 0-ás, a fehér színhez a 255-ös értéket rendeljük, így a köztes szürkeségi szintek a (0,255) intervallumból vesznek fel egész értéket. A két szintre vágás érdekében meg kell határozni egy szürkeségi szintet, amelynél sötétebb színeket feketévé, a világosabbakat fehérré minısíthetjük át. Ebben lesz segítségünkre a kép hisztogramja. A hisztogram egy olyan függvény, amelyik minden világosságkódhoz egy pozitív egész számot rendel hozzá, amely megadja, hogy az adott világosságkódú képpontból hány darab található a képen. Esetünkben a fent említett küszöböt empirikus úton kell beállítani, ugyanis a kísérletek azt mutatják, hogy a dokumentum 10-15%-a tartalmaz fekete pontot. Küszöbnek azt az értéket választjuk, ahol a két -7-
részbe esı képpontok darabszáma a legjobban megközelíti a 10-15% / 90-85% arányt. A küszöbnél kisebb szürkeségi szintő színeket feketévé, a többi pontot fehérré változtatjuk. Így egy fekete-fehér képet állítottunk elı.
2.2.
Szőrés
A bináris képünk pontszerő zajokat tartalmazhat, ezek a további feldolgozást nehezítik, így ezeket szőréssel eltávolítjuk. Minden képpontról a 8-szomszédai alapján döntjük el, hogy zajnak tekintjük-e. Választunk egy egész számot küszöbnek 5 és 8 között Amennyiben egy képpont szomszédai közül legalább küszöbnyi tıle eltérı színő, akkor a pont színét ellenkezıjére változtatjuk, különben változatlanul hagyjuk. Probléma adódik az olyan pontok esetén, amelyeknek nincs 8 darab szomszédja, ilyen tulajdonságúak a kép szélsı és sarokpontjai. Ezeknek 5 illetve 3 szomszédjuk van. Ilyen esetben a küszöböt
5 3 -ad illetve -ad részére csökkentve és ezt egészre 8 8
kerekítve kapunk egy új küszöböt, ami alapján a szélsı és sarok pontokról is eldönthetjük az elızı módszerrel, hogy meg kell-e változtatnunk a színüket. 8-as küszöbbel az olyan pontokat javítjuk ki, amelyeknek az összes szomszédja azonos színő, ilyenek az 1 képpontból álló zajok. 5-ös küszöbbel erıteljesebb alakítást végzünk, mivel itt már egymással szomszédos zajpontokat is eltávolíthatunk és a betők is jobban elkülönülnek egymástól, mivel a szögletes sarkokat lekerekítjük 6-os és 7-es küszöbértékek esetén a hatás a két szélsı eset között átmeneti lesz. Amennyiben a két szintre vágás során túl vékony betőket kaptunk, a szőrés során elszakadhatnak, így több komponensre esnek szét, ami problémát okoz a karakterek felismerése során.
2.3.
Szegmentálás
A szőrt képet vízszintes és függıleges szegmentálással bontjuk szegmensekre. A komponensekre bontás nem tökéletes, mert a ligatúrákat ilyen módon nem tudjuk szétválasztani, de ezeket majd ligatúra formájában tanítjuk be. Ilyen ligatúrák például: fi, ff. A szegmentálás eredményének tárolásához egy speciális listaelemet fogunk használni, amely 4 részbıl áll: egy kép, a kép bal felsı sarkának az eredeti nagy képen való koordinátái, a következı listaelemre, illetve az allistájára mutató mutató. Ebbıl a listaelembıl építünk fel egy listát a feldolgozás során. Vízszintes
-8-
és függıleges szegmentálás esetén is egy ilyen listaelemet kapunk meg, mint feldolgozandó elemet, ennek allistáját módosítjuk a következı módon. Vízszintes szegmentálás esetén vesszük a listaelemben tárolt képet. Minden egyes soron scan-line-t indítunk végig, és figyeljük hogy történik-e két szomszédos képpont között változás. Azon sorokra lesz továbbra is szükségünk, amelyekben történt változás vagy csak csupa fekete pontokon haladtunk végig, a többit el is dobhatjuk. A meghagyott sorokból az egymással szomszédosakból blokkokat készítünk, így annyi blokkot kapunk, ahány összefüggı részünk volt. Az ilyen blokkokból képet készítünk. A feldolgozandó listaelem allistájába olyan új listaelemeket teszünk, amelyek kép része az egyes blokkokból készített kép. Függıleges szegmentálás teljesen analóg módon történik, csak nem sorokra, hanem oszlopokra bontjuk fel a képet és az allistában szereplı listaelemekbe az összefüggı oszlopokból álló képet tesszük. Függıleges és vízszintes szegmentálás esetén az allista listaelemeibe tárolt kép mellé letároljuk a szegmentált kis kép bal felsı sarkának az eredeti nagy képen való koordinátáit, majd az allista elemeire meghívjuk az ellentétes szegmentálást. Nem esett szó még arról, hogy végül is melyik szegmentálást hányszor kell használni. A vízszintest háromszor, a függılegest kétszer kell felváltva egymás után alkalmazni. Ez a következı eredménnyel jár. Az elsı vízszintes szegmentálás hatására a szöveg sorokra esik szét. Ezután az allista elemeire függıleges szegmentálást kell végrehajtani, így a sorok betőkre és betőkapcsolatokra esnek szét. Az új allistaelemekre újra vízszintes szegmentálást hajtunk végre, amelynek hatására leválasztjuk az ékezetet a betőkrıl. A következı függıleges szegmentálás során a kettıs ékezeteket elválasztjuk egymástól. Itt akár meg is állhatnánk, mivel a képet a módszer határain belül a lehetı legjobban komponensekre szedtük szét. Viszont elıfordulhatnak olyan esetek is, amikor a két ékezet alja vagy teteje nem pontosan egy magasságban van. Ilyen esetben a 4 lépés után olyan képet kapnánk, amiben a fekete alakzat nem érinti a keret széleit alul vagy felül, ezért szükség van még egy vízszintes szegmentálásra. Így a nagy képet olyan kis képekre „robbantottuk szét”, amelyekben lévı alakzatot érintik a kép mind a négy szélét.
-9-
0. szint
1. szint
2. szint
3. szint
4. szint
3. ábra Az eredeti kép felbontása a szegmentálás során
2.4.
Walsh-táblázatok elkészítése
Mind a felismeréshez, mind a tanításhoz szükségesek a Walsh-táblázatok. Ezek jelentik a felismerés kulcsmozzanatát. A következıkben részletezem, hogyan állnak ezek elı. n A kétdimenziós diszkrét Walsh-transzformáció N = 2 esetén a következı formában
határozható meg.
1 W (u , v) = N
N −1 N −1
∑∑ x =0 y =0
n −1
f ( x, y )∏ (− 1) i i =0
ahol bk (z ) a z bináris reprezentációjának k –adik bitje.
- 10 -
b ( x ) bn −1−i ( u ) + bi ( y ) bn −1−i ( v ))
,
Algoritmusunk esetén n = 6 volt, ennek következtében készítettünk 8×8 azaz 64 darab 64×64-es mátrixot a következı módon. Minden egyes (u , v) értékpárhoz egy 64×64-es mátrix
tartozik, amelynek elemei vagy − 1 -et vagy + 1 -et tartalmaznak, így letárolásához egy bit is elég.
4. ábra A mátrix u = 6, v = 4 esetén, ahol a + jelöli a + 1 -et és – jelöli a − 1 -et
Ezen mátrixok kiszámítása idıigényes, viszont egyszeri kiszámítás után a memóriában tárolásra kerül, így elkerüljük azt, hogy újra meg kelljen határozni ıket. Többször is hivatkozom, hogy a képekhez a Walsh-táblázatok segítségével vektort rendelek, ezek elıállítása a következı. A szegmentálás során létrehozott képeket 64×64-es méretővé méretezzük át, majd egy 64 számból álló vektort rendelünk az egyes képekhez a következı módon. Adott (u , v) párhoz rendelt Walsh-mátrixot pontonként összeszorozzuk az átméretezett kép mátrixos alakjával úgy, hogy a kép elıtérpontjait 1-nek, a háttérpontjait 0-nak tekintjük. Így egy olyan mátrixot kapunk, ahol az egyes elemek -1-et, 0-át vagy 1-et vehetnek fel értékül. Ezen mátrix elemeit összeadva egy egész számot kapunk -4096 és +4096 között. Ezen (u , v) párokhoz tartozó mátrixokhoz tartozó összegeket minden lehetséges u-ra és v-re oszlopfolytonos felsorolással egy 64 számból álló vektorba tároljuk. Ez lesz a kép sajátságvektora.
- 11 -
2.5.
Tanítás
A tanítás során létrehozott etalonelemek egy etalonvektort és egy karaktert vagy karaktersorozatot tartalmaznak. Ezen etalonelemek vektoraihoz történı hasonlítással döntjük majd el az egyes felismerendı képekrıl, hogy milyen karaktert illetve karaktereket tartalmaznak. A tanítómodul a szegmentálás után kapott szegmenseken dolgozik. A szegmenseket egy listában tárolja, majd egységesen 64×64-es méretre méretezi át azokat. Meghatározza minden egyes listaelem által reprezentált képhez tartozó sajátságvektort, majd meghatározzuk ennek az etalonelemekben szereplı vektorok távolságától való minimumát, és ha ez a minimum kisebb egy küszöbnél, akkor felajánlja a minimális távolsághoz tartozó etalonvektorhoz társított karaktert, illetve karaktereket, amit már csak el kell fogadnia a felhasználónak. Természetesen hibás felismerés esetén lehetıség van a felajánlott karakter módosítására is. Ha a minimum nagyobb a küszöbnél, akkor a felhasználónak kell a karaktert megadnia. Ha a felismert karakter még nem szerepelt az etalonelemek közt, akkor a karakterbıl és a képhez rendelt sajátságvektorból etalonelemet képezünk, ezt elhelyezzük a többi etalonelem mellé. Amennyiben a sajátságvektor egy betanított karakter új képe alapján került kiszámolásra, akkor az ehhez a karakterhez eddig tartozó meghatározott sajátságvektorok koordinátánkénti számtani közepe lesz az új etalonvektor. Ezen számtani közép meghatározásához viszont nem kell az összes eddigi vektort letárolni, elég az eddigi átlagot, illetve az átlagképzésben résztvevı vektorok darabszámát letárolni. Az új átlag megkapható a következı összefüggés alapján. Legyen
fn (x) =
x1 +K+ xn , n ≥ 1 az elsı n elem számtani közepe. n
Ekkor könnyen látható, hogy teljesül a következı összefüggés:
n n
x1 + K + xn + xn +1 = x1 + K + x n + xn +1 n x1 + K + x n + xn +1 x + K + x n + x n+1 n = 1 n +1 n +1
f n +1 ( x ) =
n ⋅ f n ( x ) + x n +1 n +1
A tanítás eredményeképpen etalonelemek egy sorozata áll elı, amit egy fájlban is tárolhatunk.
- 12 -
2.6.
Felismerés
A felismerés kezdetén a szegmentálás során elıálló szegmenseket tartalmazó listaelemek listája és a tanítás alkalmával elkészített etalonelemek állnak rendelkezésünkre. Célunk ezekbıl az eredeti szöveg felismerése. A felismerés a listaelemek struktúrája miatt különbözı szinteken történik, mivel az egyes szinteken a szöveg különbözı elemei szerepelnek, ezt rekurzióval oldottam meg. A továbbiakban használni fogom a „legjobban hasonlít” szókapcsolatot, ami alatt azt értem, hogy egy képhez tartozó sajátságvektor és az aktuális etalonvektor távolsága a legkisebb. A fıprogram a szegmentálás során elıálló legfelsı szintő listaelemre a felismerést a 0. szinten hívja meg. •
A nulladik szinten az elsı szinttıl kapott sorokat illesztjük össze szöveggé úgy, hogy a sorok közé sortöréseket teszünk.
•
Az elsı szinten a második szinttıl kapott betőket és betőkapcsolatokat illesztjük össze egy sorrá. Ez általában csak egyszerő összefőzés, viszont ha túl távol vannak az egyes szomszédok egymástól, akkor szóközöket iktatunk be. Ezen „túl távol” fogalom eldöntésére használhatjuk a korábban már az egyes képekhez letárolt eredeti pozíciót. Amennyiben egy kép jobb széle és az ıt követı kép bal széle távolabb van egy bizonyos értéknél, akkor szóközre van szükség. Ezt a szóközhöz tartozó távolságot a leggyakrabban tesztelt szöveghez állítottam be, sajnos emiatt más képek feldolgozása esetén ebben a vonatkozásban kisebb hibák léphetnek fel.
•
A második szinten már betők ill. betőkapcsolatok találhatók. Megvizsgáljuk, hogy az allistának hány eleme van.
•
Ha 0 eleme van, akkor már nem lehetett tovább osztani, akkor felismerjük a képet. •
Ha túl kicsi a kép mérete, akkor valószínőleg pont, vesszı vagy kötıjel lesz. •
Ha a szélesség többszöröse a magasságának, akkor kötıjel.
•
Különben pedig pont vagy vesszı aszerint, hogy melyikhez hasonlít jobban.
•
Ha nem írásjel mérető, akkor felismerjük. Néhány bető esetén további vizsgálat is szükséges. Amennyiben a felismert bető s, S, c, C, o, O, u, U, v, V, w, W, z és Z valamelyike, akkor a bető magassága alapján beállíthatjuk a bető állását. További problémát okoz az i, l és I hasonlósága (kis i, kis l és nagy i). •
Ha alacsonyabb egy küszöbnél, akkor i lesz.
•
Különben a magasság és szélesség hányadosa alapján döntünk. - 13 -
•
Ha keskeny, akkor l.
•
Ha széles, akkor I.
•
Sajnos a keskeny és széles relatív fogalmak, ezért ezt a leggyakrabban használt betőtípushoz állapítottam meg, akár csak az i-hez tartozó magasságküszöböt is.
•
Ha 1 gyermeke van az allistának, akkor abban az elızıhöz hasonlóan egy bető lesz, így az elızı módszerrel felismerhetı.
•
Ha 2 gyermeke van, akkor lehet ékezetes bető, pontosvesszı, kettıspont, kérdıjel, vagy felkiáltójel. •
Amennyiben az alsó rész elég kicsi, akkor az ékezetes betőt kizártuk ezek közül. •
Ha a felsı rész elég nagy, akkor kérdıjel vagy felkiáltó jel lesz aszerint, hogy a felsı rész alakja melyikhez van közelebb.
•
Különben pontosvesszı vagy kettıspont lesz attól függıen, hogy az alsó rész pontra vagy vesszıre hasonlít jobban.
•
Ezen speciális eseteket kivéve ékezetes betővel vagy ékezetes betőkapcsolattal van dolgunk. •
Felismerjük az ékezetet a 3. szinten, ezt késıbb részletezem.
•
Amennyiben az ékezet alatti bető keskeny, akkor egy bető van az ékezet alatt. Azon ismeretek tudtában, hogy az egyes ékezetek alatt milyen betők szerepelnek (szándékosan nem magánhangzókat írtam, mivel a j-t is ékezetesnek tekintem), kiválasztjuk az ékezet alá választható betőkbıl a legjobban hasonlítót. Beépített ismeretek alapján állapítunk meg az ékezet és a bető ismeretében ékezetes betőt. Például, ha ’’ az ékezet és o a bető, akkor
ı-t adunk vissza. •
Amennyiben az ékezet alatti rész széles, akkor valószínőleg több bető is szerepel az ékezet alatt. Ekkor felismerjük az ékezetet az elızı esettel megegyezı módon, majd felismerjük a betőkapcsolatot. Ismét beépített ismeretek alapján határozunk meg visszaadandó elemet. Például, ha az ékezet
’. és az alatta lévı betőkapcsolat az ij, akkor az íj-t adjuk vissza. •
Ha több mint 2 elem van az allistájában, akkor valószínőleg zaj vagy következı sorból származó ékezet van feleslegben, így ez(eke)t eldobjuk és a maradék 2 listaelemmel, mint a 2-gyermekes esettel dolgozunk tovább.
•
A harmadik szinten ékezetek vagy betők találhatóak. •
Ha az allistája két elembıl áll, akkor kettıs ékezettel van dolgunk. Ezeket külön felismerjük a 4. szinten, majd ıket konkatenálva, visszaadjuk. - 14 -
•
Ha az allista 1 elemő, akkor egy darabból álló ékezettel vagy egy betővel van dolgunk. •
Ha alacsony, akkor ékezet és ennek megfelelıen felismerjük a korábban már ismertetett módon.
•
Ha magas, akkor megvizsgáljuk melyik betőhöz hasonlít legjobban és ezt adjuk vissza.
•
•
A negyedik szinten egy darabból álló ékezetek vannak. •
Ha az allistája üres, akkor felismerjük ékezetként, majd visszaadjuk.
•
Ha az allistája 1 elemő, akkor felismerjük az 5. szinten.
Az ötödik szinten is egy darabból álló ékezetek vannak. Ezeket egyszerően felismerjük, majd visszaadjuk. Azért van szükség még ötödik szintre is, amiért a szegmentáláskor plusz 1 vízszintes szegmentálást beiktattunk. Így a listaelemek hierarchiájában mindent a megfelelı szinten ismerünk fel.
- 15 -
3. Felhasználói leírás
A program futtatásához Java 1.5-ös környezet szükséges, a megjelenítéshez 1024×768-as felbontás ajánlott. Az indítás a java
–cp
KF.jar
Foprogram paranccsal
vagy a
start.bat elindításával történik. Indítás után az 5. ábrán látható képernyı fogad.
5. ábra A program fıablaka
Valamilyen képre mindenképpen szükségünk lesz, ezt betölteni a Fájl menü Kép
megnyitása… menüpontjával lehet. Ennek hatására a kép a bal felsı képterületen, a képfájl neve az ablak jobb felsı részét a Kép: felirat mellett jelenik meg. Ha nagyobb a kép mint a képterület, akkor a csúszkák segítségével az egészet is megtekinthetjük. A különbözı képmőveletek paraméterezhetık, ezek megadása a jobb alsó sarokban lévı csúszkákkal történik. A Fekete képpontok aránya a szegmentáláshoz szükséges. A szőréshez szükséges szomszédok számát a Szomszédok szőréshez csúszkával állíthatjuk be. A szegmentálás után eldobandó objektumok méretét is csúszkával állíthatjuk be a Túl kicsi objektum és a Túl nagy
objektum pontok alatt. A megfelelı paraméterezés után mőveleteket hajthatunk végre a képen az ablak jobb szélén található gombok segítségével. Az Eredeti gomb hatására megjelenik a betöltött kép. Fekete-fehérré - 16 -
alakítást a Két szintre vágás gomb megnyomásával végezhetünk, végül az eredmény kép megjelenik. A Szőrés gomb hatására végbemegy a két szintre vágás és szőrés a megadott paraméterek szerint, majd a szőrt kép megjelenik. Ha megnyomjuk a Szegmentálás gombot, akkor a két szintre vágás és szőrés után végrehajtódik a három vízszintes és két függıleges szegmentálás, majd a szőrt kép olyan kiegészítése jelenik meg, ahol a szegmentált objektumok pirossal vannak bekeretezve. Nem csak a képmőveleteket tudjuk elvégezni hanem a felismerést és a tanítást is. Felismeréshez etalon fájlt megnyitni a Fájl menü Etalon megnyitása… menüpontjában lehet. Így betöltıdik az etalonfájl és a jobb felsı sarokban az Etalon: felirat mellett megjelenik az etalonfájl neve. A betöltött képen szereplı szöveg felismerése a Felismerés gomb megnyomásával történik, de ehhez szükség van egy betöltött képre és egy betöltött etalonfájlra. Ha ezek rendelkezésre állnak, akkor a két szintre vágás és szőrés után a három vízszintes és a két függıleges szegmentálás következik, majd a már említett jelölt szegmensekkel rendelkezı kép jelenik meg. Végül a felismerés következik a korábban már említett technikával. Az eredmény a bal alsó szövegdobozban jelenik meg. Ezt a Fájl menü Szöveg mentése… pontjával szövegfájlba is menthetjük. Etalonfájlt készíteni tanítás során tudunk. Ezt a Tanítás gomb megnyomásával érhetjük el, de eközben rendelkeznünk kell egy betöltött képpel is. A kép elıkészítése a felismerésnél már említett módon történik. Itt azonban a szegmensekbıl a feldolgozás során egy lista készül, ezen lista elemeit kell a felhasználónak jóváhagyni.
6. ábra A tanító ablak
A tanító ablakban megjelenik a feldolgozandó kép átméretezve 64×64-es méretre ill. az eredeti méretben is. Mellettük egy mezı, ahova a karaktert írhatjuk, de amennyiben a program meg meri tippelni, mivel eléggé hasonlít egy már betanítottra, akkor már elıre kitölti ezt. Az Elfogad gomb a megadott karakter hatására bekerül az etalonok közé, majd új képet kapunk, amíg ez lehetséges. Ha elfogynak a feldolgozandó képeink vagy a Mentés gombbal leállítjuk a bevitelt, akkor kiválaszthatjuk, hogy melyik fájlba mentsük az etalonkészletünket. A fájl megadása utána a fıablakban találjuk magunkat.
- 17 -
4. Tesztelés
A tesztelést három különbözı típusú képen végeztem. Beszkenneltem egy nyomtatott szöveget és egy kézzel írt számjegyekbıl álló képet, majd programmal generáltam egy zajmentes szövegbıl álló képet. A képfeldolgozás lépéseit a nyomtatott szöveget tartalmazó képen teszteltem legtöbbet. Várhatóan a generált képnél kapjuk majd a legjobb eredményt, mivel itt nem kell majd zajjal és a lap elforgatásából származó hibákkal dolgoznunk. Ennél kevésbé jó eredményt ad majd a nyomtatott szöveg képe, mivel itt már zaj és forgatásból származó hiba is felléphet. Az elıbb említett esetekben a karakterek képe egységes, ha újból leírjuk, akkor zajtól eltekintve ugyanazt a képet kapnánk. Ez megváltozik a kézzel írt számok esetén, mivel minden ember másként írja a számjegyeket, még ugyanattól az embertıl származó két elvileg azonos számjegy sem egyezik meg tökéletesen. Így itt várható a legkevésbé pontos eredmény.
4.1.
Szkennelt szöveg
A szkennelést HP ScanJet 2400C szkennerrel végeztem 300 dpi felbontással és 8 bites szürke színmélységgel. A magassági korlátokat a szoftverben a szkennelt képekhez állítottam be, ebbıl következıen itt lesz a legkevesebb probléma a méreten alapuló felismeréssel. Lássuk a tesztképeket és az eredményeket.
7. ábra Az elsı szkennelt szöveg
méteres fekete férfiak és acélosra edzett, inas fehér atléták húztak edzıcipıt, oldalukonpedig formás fenekő, hajszálvékony derekú lányok kocogtak. A kövér amerikaiak nem merészkedtek e tökéletes lények közé, ık Miami parkjait vették célba, hogy néhány lépés után fennakadt szemmel kapkodjanak levegı után.
- 18 -
8. ábra A második szkennelt szöveg dom-e, mi az a mikrofon. Felment bennem a panpa, visszavágtrm. - És te tudod, mi az a Pulitzer-díj? Fölényesen bólintott, sárgás szemfogain vitustáncotjárt az olvasólám-
9. ábra A harmadik szkennelt szöveg
lánynak saját szurkolótábora volt, amely negyvcn percen keresztül csakis
- 19 -
a saját líblingjét éltette. Cyöngyi hamar a pécsiek kedvence lctt, a ruhakeruskedık szerint az ı nevével nyomtatott pólóból fogyott a legtöbb. ,,Zsolnay 5,, - nekem is volt egy belıle. Vili küldte, abban aludtam. Azt hiszem, ez volt szerclme utolsó szikraja. Nem sokkal késıbb szinte fellélegegye közölte, hogy a copfos elszerzıdött Pécsrıl. Mit mondjak, nem izgatott fol tulságosan az információval. Báraz Intcmeten követvc az cseményeket különösnek találtam a dolgot, hiszen a pécsi sGrkolók a tenyenkön hordozták a kis copfost, és Rátgéber egy országverı csapatot tréningezett össze. Késıbb megtudtam, hogy amikor Oyöngyi átvette a bajnoki aranyat, még nem tudta, hogy hova fog szerzıdni. Csak azt, hogy el kellene mozdulnia Pécsrıl. Nem soakal a bajnokság vége után behívták a PVSK vczetıi, csakúgy, mint a csejattársait, és ajövı évaddal kapcsolatos teGeirıl kétuezgették. Oszintén elmondta, hogy elvágyódik. Szeretné magát kipróbálni egy olyan csapatban is, ahol nem olyan kötött a játék, mint Rátgéber PVSKjában. Ahol több szabadsághoz, improvizációs lehetıséghezjuthat. A vezetık megértették Oyöngyit, a sanrkolók azonban akjdalommal nézték, ahogy kenkencük április óta Magyarország élcsapa. taival táGyal. Aláírúsgyujtést szeGeztck a városban, hogy ne menjen, maradjon. IIáromszázan kanyarították oda a nevnket a papírra. Cyöngyi ült a bérlakásában, és sírt. Elıtte a konyhaasztalon ott hevert a levél, és a lány szeretett volna kifetni az utcára, hogy torkaszakadtából kiabálhassa. nagyon szeretlek benncteket, de el kell mennem, mert különben megkeseredek? Mit lehetett volna még elémie a Péccsel, hisz bajnok lett. Az európai kupaküzdelmekben pedig. . . Nos, ott egyelıre esélGk sem volt. A jVSK anyagi hátterét nem lehetett egy napon említeni a külfoldi sztárcsapatok financiális lehetıségeivel. - Mi van? -- lépett a konyhába Oyöngyi egyetemi csoporttársa. -- Miért sírsz? . - Rossz elmcnni. - Majd visszajössz. - Utálni fognak a pécsi srurkolók. - Dehogy fognak. Haragszanak egy kicsit, aztán felengednek. Szeretnek. Tudod már, hová mész? - TzombathelFe. Ott folrtMhatom az egyctemet is. - Es gondolom, amostani havi húszezredhez képest, pénzben isjobb. - Tudod, hogy az érdekel a legkevésbé. Ha érdekelne, akkor Diósgyırbe mennék.
Látható, hogy sok probléma akad az ékezetes nagybetőkkel illetve a ligatúrákkal. Nehézséget jelent az, hogy a tanításkor használt fekete aránytól függnek az etalonvektorok. A - 20 -
felismeréskor már nem tudjuk ugyanazt a fekete arányt használni, mivel a képtıl függ, hogy milyen eredményt kapunk. Túl kicsi fekete arány esetén a betők elvékonyodnak, és a hasonló betők, mint például a c és az e is könnyen összetéveszthetıvé válnak az e-ben elvékonyodó, esetleg el is tőnı vízszintes vonal miatt.
4.2.
Mesterségesen elıállított szöveg
A mesterségesen elkészített angol és magyar szöveget OpenOffice 2.0–val hoztam létre. Courier New betőtípust használtam, mivel ennek meg van az a jó tulajdonsága, hogy az egyes betők egyforma szélesek, nincsenek ligatúrák, bár egyes betők a talpuknál fogva összeérnek. Készítettem egy speciálisan a tanításra készített az angol ábécé minden betőjét tartalmazó fájlt, majd egy másik szövegfájlt, amin a felismerés hatékonyságát vizsgálhattam. Mindkét fájlt PDF formátumba exportáltam, amibıl képet készítettem. Az így létrehozott képeket vizsgáltam.
10. ábra Az angol ábécé betőinek tanítására szolgáló tanító kép
- 21 -
11. ábra Az angol szöveget tartalmazó elıállított kép
A korábban már említett beépített magasságkorlátok miatt, átméreteztem a szöveget 75%ára, hogy a beépített konstansok közel essenek a vizsgált szöveg betőtípusának tulajdonságaihoz.
Chuck Norris uses Tabasco Sauce for eye drops . Chuck Norris can get BIackj ack with j ust one card . ..One time I was with Norris in the back of a pickup truck, aIong with a Iive deer . Norris goes up to the deer and says , . I . m Chuck Norris ? SAY I T ? . Then he manipuIates the deer . s Iips in such a way as to make it say, . ChuckNorris . . . . I t wasn . t exactIy Ii ke it , but it was pretty good for a deer ? . .. PeopIe created the automobiIe to escape from Chuck Norris . . . Not to be outdone, Chuck Norris created the automobiIe accident . Chuck Norris roundhouse kicks peopIe in the face
- 22 -
A magassági problémákat igyekeztem minimalizálni, de az i, l és I problémája azért felmerül, mivel ezek megkülönböztetése a magasságokon és szélességeken is alapul, ami a szkennelt szöveg betőtípusához van beépítve. Ezután egy magyar tesztképet készítettem, amihez az etalonfájlt kiegészítettem néhány ékezettel.
12. ábra A magyar szöveget tartalmazó elıállított kép
- Tágu1ó viIágegyetemben éIünk . Mindenki Chuck Norris eIıI meneküI . - Egy kép többet ér ezer szónáI . Chuck Norris többet ér egpiIIiárd s zónáI . - Ha Iátod Chuck Norris-t, ı is Iát téged . Ha nem Iátod Chuck Norris-t, taIán csak másodpercekre vagy a haIáItóI . - Chuck Norris teIe tárraI is j átszott már orosz ruIettet . . . és nyert .
Látható, hogy az ékezeteket jól kezeli, az összenıtt betőkkel (ym az egymilliárdban), a szóköztávolsággal és az i, l, I és 1 megkülönböztetésével vannak problémái, de ez utóbbi a betőmérettıl is függ. Ideális képeken nem merül fel olyan probléma, mint a zaj vagy a ferdén szkennelés, ennek meg is van a pozitív eredménye. - 23 -
4.3.
Szkennelt számok
A tesztadatok 20 különbözı személytıl származnak. Megkértem ıket, hogy írják le a számjegyeket 0-tól 9-ig természetes írásukkal egy négyzetrácsos lap egy sorába. A szkennelést a korábban már említett HP ScanJet 2004C szkennerrel végeztem 8 bites szürkemélységgel. Ennek eredményeképpen egy négyzetrácsos lap állt elı számokkal a négyzetrácsokban. A négyzetrácsok eltávolítását és a számjegyek egymáshoz közelebb hozatalát Paint Shop Pro-val végeztem. A mellékelt képen történı szegmentálás során néhány szám „elszakadt”, de a legtöbb esetben jól mőködött. A zajokat ill. az elszakadt számdarabokat .-nak (pontnak) tanítottam be, így a következı eredményt kaptam:
0 1 2 9 4 5 6 2 8 9 0 1 2 3 4 5 6 7 8 9 0 . 1 2 3 4 5 6 7 8 9 . 0 1 2 3 4 .5 6 7 8 9 0 1 2 3 4 5 9 7 9 9 0 1 2. 3 4 5 6 7 8 9 .. 1 2 3 7 5 6 7 8 9 0 . 1 .2 3 4 5 6 7 8 9 0 1 2 . 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 . 1 2. 3 .. 4 .. 5 6 7 8 8 .0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 . 9 . . . 5 7. 2 . 3.........5.5 ..... 1 8 . 0 1 2 . 3 4 5 6 7 9 . 9 0 1 2 3 4 3 6 7 8 . . 0 1 . 2 3 4 5 3 7 8 9 0 1 2 3 4 5 6 7 8 9 0 . 1 5 . 9 . 4 5 6 7 8 9
13. ábra A felismert és a kézzel írt számok Megfigyelhetı, hogy több sorban is teljesen megegyeznek a számok a várt eredménnyel, emellett néhányban is csak kevés hiba van. Azonban volt egy sor, ahol nem sikerült a számokat jól szegmentálni, itt elég sok zaj keletkezett. - 24 -
4.4.
Beállítások
Úgy gondoltam, hogy ejtek néhány szót a paraméterek beállításairól, mert egy tapasztalatlan felhasználó nem tudja, hogy milyen paraméterértékek mellett kapja a legpontosabb eredményt. Érdemes az elsı alkalommal a tanítás és felismerés helyett csak a szegmentálást választani, hogy az optimális beállítást megtaláljuk. A szegmentálásig pedig lépésenként jussunk el a két szintre vágáson és a szőrésen keresztül. A két szintre vágáshoz használt ideális fekete arány 10-15% között van tapasztalataim szerint. Úgy célszerő az értéket megválasztani, hogy betők ne vékonyodjanak el, de ne is legyenek túl vastagok, mert ilyenkor a szomszédos betők összeérhetnek, ez pedig problémát okoz a szegmentálás során. Szőrésnél általában 6 szomszéd választásával járunk legjobban. 8 szomszéd választásával csak az 1 képpontból álló zajokat tudjuk javítani. A legerıteljesebb módosítást 5 szomszéd esetén kapjuk. Ilyenkor a szögletes sarkok lekerekednek, de az alakzatok kontúrján is érzıdik a hatása. A szélek egyenesebbek lesznek, de a túl vékony vonalak el is tőnhetnek. Szegmentálásnál a túl kicsi és túl nagy objektumok méretének állításával kerülhetünk közelebb a legpontosabb eredményhez. A túl kicsi objektumok méretét 2-nek választva egész hatásos eredményt kaphatunk. Ezt egészen addig növelhetjük, amíg az ékezetek és az írásjelek el nem tőnnek. A túl nagy objektumok méretének megállítása képfüggı, de a 100 képpontnál szélesebb vagy magasabb objektumok általában már nem szöveget tartalmaznak, ilyen lehet egy fejlécvonal. Pontos szegmentálás esetén szépen elkülönülnek a szomszédos betők és az ékezetek sem nınek a betőkhöz, hanem külön objektumként jelennek meg. Amennyiben a szegmentálásnál pontos eredményt kapunk, akkor már végrehajthatjuk a tanítást vagy a felismerést is. Adott képen adott beállítások mellett elkészített etalonfájllal lehetıleg hasonló beállítású képeket ismerjünk fel, mert ha ez nem teljesül, akkor ez is egy újabb problémaforrás lehet.
- 25 -
4.5.
Teljesítmény
Egy teljes oldalas képet választottam ki tesztelésre. Az 1263×1967 pixeles képre ugyanazon beállítások mellett lefuttattam a felismerést kétszer egymás után több számítógépen is azért, hogy a második alkalommal már ne kelljen a Walsh-táblázatokat elıállítani. Így a két idıeredmény különbségébıl a Walsh-táblázatok elıállítási idejét is meg tudom becsülni.
Processzor
Memória
Felismerés ideje
Walsh-táblázatok elıállítási ideje
F+W
AMD Athlon XP 3200+ AMD Athlon64 3200+ Intel P4 Celeron, 1833 Mhz Intel Celeron-A, 466 MHz
1024 Mb 1024 Mb 768 Mb 192 Mb
115,4 s 121,6 s 257,6 s 666,4 s
6,6 s 2,3 s 18,2 s 42,3 s
122,0 s 123,9 s 239,4 s 708,7 s
1. táblázat A felismerési idık különbözı számítógépeken
Nem találunk meglepetést a felismerési idıkben. Gyorsabb processzoron hamarabb fut le a felismerés. Az Athlon64-es processzoron a Walsh-táblázatok gyors elıállítási ideje a gyorsabb memóriakezelésnek köszönhetı. A memóriahasználat 50-51 megabájt körül ingadozott a Windows XP Feladatkezelıje szerint minden tesztesetben.
- 26 -
5. Összefoglalás
A magyar ékezetes kisbetők felismerésére az algoritmus pontos szegmentálás esetén jól mőködik. Az ékezetes betők kezelése problémát okoz azon esetekben, amikor nem sikerül az ékezetet betőhöz társítani, ez elég gyakran elıfordul ékezetes nagybetők esetén. Elvesznek az ékezetek azon esetekben, amikor az elsı vízszintes szegmentáláskor leveszi a sorról. Problémát okoznak a ligatúrák is. İket nem tudjuk ilyen technikával külön szegmentálni, ezért egyben kell betenni az etalonkészletbe. Vannak a kódba ékezetes betőkapcsolatok esetén megfelelı cserék beépítve, például '.ij helyett íj. Ezek listája koránt sem teljes, a leggyakrabban tesztelt képek alapján készítettem el. Kényes a program a ferdén szkennelt képekre, mivel nem tudja a sorokat vízszintes vonallal elválasztani. Automatizálható lehetne a két szintre vágás, ebben az esetben a program magától megállapíthatná a vágási küszöböt. A betőtípus sajátosságai is kiküszöbölhetık lennének, ha a program magától fel tudná ismerni az alacsony és a magas betőket, illetve képes lenne megállapítani, hogy két szó között szóköz van. Kézzel írt számok felismerésénél, amennyiben sikerül a szegmentálás, jó eredményt érhetünk el. Megállapíthatom, hogy az elkészült program a kitőzött feladatot jól oldja meg.
Köszönettel tartozom a Debreceni Egyetem Tehetséggondozó Programjának, amelynek keretében e dolgozatom készült és munkámat anyagi támogatással segítette. Köszönettel tartozom továbbá témavezetımnek, Fazekas Attila Tanár Úrnak.
- 27 -
6. Irodalomjegyzék
1. Fazekas Attila, Kormos János: Digitális képfeldolgozás matematikai alapjai, Egyetemi jegyzet, 2004. 2. A. Fazekas and A.Hajdu, An algorithm using Walsh transformation for compressing typeset documents, Acta Mathematica Academiae Paedagogicae Nyiregyháziensis 15 (1999), 61-68
- 28 -
Tartalomjegyzék Elıszó
……………….…….………………………………………………………………
1. Bevezetés
2
…………………………………..……………………………………………..
3
………………………………..……………………………………………...
7
2. Feldolgozás
2.1. Két szintre vágás 2.2. Szőrés
…….……………..………………………………………………
7
……………….………………..…………………………………………….
8
2.3. Szegmentálás
……….…………………………..…………………………………..
2.4. Walsh-táblázatok elkészítése 2.5. Tanítás
..…………..…………………………………………. 10
………………………………..……………………………………………. 12
2.6. Felismerés
……………..…………………………………………………………… 13
3. Felhasználói leírás 4. Tesztelés
8
……………..……………………………………………………….. 16
………………..………………………………………………………………. 18
4.1. Szkennelt szöveg
……..………………………………………………………........ 18
4.2. Mesterségesen elıállított szöveg 4.3. Szkennelt számok 4.4. Beállítások 4.5. Teljesítmény 5. Összefoglalás 6. Irodalomjegyzék
…………..……………………………………… 21
………………………..………………………………………… 24
………………………………..……………………………………….. 25 ………………………..……………………………………………… 26 …………………………..……………………………………………….. 27 ……………………..…………………………………………………. 28
- 29 -