Top Banner
T.C. B ˙ ILEC ˙ IK ¸ SEYH EDEBAL ˙ I ÜN ˙ IVERS ˙ ITES ˙ I MÜHEND ˙ ISL ˙ IK FAKÜLTES ˙ I B ˙ ILG ˙ ISAYAR MÜHEND ˙ ISL ˙ I ˘ G ˙ I Özellik Çıkartımı ˙ Ile Karakter Tanıma Ö ˘ GRENC ˙ IN ˙ IN ADI SOYADI:Mustafa KÖSTEK PROJE 2 ÇALI ¸ SMASI 15 Ocak 2015 B ˙ ILEC ˙ IK
67

optical character recognition(matlab)with feature extraction

Jul 27, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: optical character recognition(matlab)with feature extraction

T.C.

BILECIK SEYH EDEBALI ÜNIVERSITESI

MÜHENDISLIK FAKÜLTESI

BILGISAYAR MÜHENDISLIGI

Özellik Çıkartımı Ile Karakter Tanıma

ÖGRENCININ ADI SOYADI:Mustafa KÖSTEK

PROJE 2 ÇALISMASI

15 Ocak 2015

BILECIK

Page 2: optical character recognition(matlab)with feature extraction

T.C.

BILECIK SEYH EDEBALI ÜNIVERSITESI

MÜHENDISLIK FAKÜLTESI

BILGISAYAR MÜHENDISLIGI

Özellik Çıkartımı Ile Karakter Tanıma

ÖGRENCININ ADI SOYADI:Mustafa KÖSTEK

PROJE 2 ÇALISMASI

15 Ocak 2015

BILECIK

Page 3: optical character recognition(matlab)with feature extraction

ÖZET

Projenin Amacı

Görüntü isleme,makine ögrenmesi algoritmalarıyla ne derece basarılı oldugunun yanı sıra

özellik çıkartma algoritmamızında geçerliliginin ölçümünü yorumlayacagız.Karakter ta-

nıma için segmentli geometrik tabanlı özellik çıkartma algoritması kullanılmıstır. [1]

Projenin Kapsamı

Öncelikle matlab ile görüntülerin özellik vektörleri çıkartılacak sonra ise excel ile özel-

lik vektörüne bir alan daha ekleyerek hangi sınıfa ait oldugu bilgisi eklenecektir.Her ka-

rakterin özellik vektörleri matris haline getirilip alan bilgisi eklendikten sonra weka ile

islenerek hangi yöntemin daha yüksek basarı gösterdigi tespit edilecektir.

Sonuçlar

Sonuç olarak hangi sınıflandırma yönteminin karakter tanımada daha yüksek basarı sag-

ladıgı tespit edildi.

2

Page 4: optical character recognition(matlab)with feature extraction

ABSTRACT

Project Objective

Image processing, machine learning algorithms, as well as how successful that will de-

termine the validity of feature extraction algorithm.The segment is used for character

recognition algorithm based on geometric feature extraction.

Scope of Project

First, if the feature vectors images with MATLAB will be removed after the information

that belongs to which class feature vectors by adding a field to excel will be added.After

you add the feature vectors brought into the information matrix for each character which

method of treatment will be determined by weka showed higher achievement.In this re-

gard, using the chain algorithm performed exactly as in other studies carried out over the

mapping studies are available.

Results

Finally, in recognition of character classification method which has been found to provide

higher performance.

3

Page 5: optical character recognition(matlab)with feature extraction

TESEKKÜR

Bu projenin basından sonuna kadar hazırlanmasında emegi bulunan ve beni bu konuya

yönlendiren saygıdeger hocam ve danısmanım Sayın Emre Dandıl’a tüm katkılarından ve

hiç eksiltmedigi desteginden dolayı tesekkür ederim.

Mustafa KÖSTEK

15 Ocak 2015

4

Page 6: optical character recognition(matlab)with feature extraction

Içindekiler

ÖZET 2

ABSTRACT 3

TESEKKÜR 4

SIMGE LISTESI 7

SEKIL LISTESI 8

TABLO LISTESI 9

1 Giris 10

1.1 OCR nedir? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.1.1 Optik Karakter Tanıma (OCR) Neleri Kapsar? . . . . . . . . . . . 10

1.1.2 Optik Karakter Tanıma (OCR) Nasıl Çalısır? . . . . . . . . . . . 10

1.1.3 Optik Karakter Tanıma (OCR) Sistemlerini Kimler Kullanır? . . 11

1.2 Projenin Amacı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2 Karakter tanıma 13

2.1 Ikili görüntüye dönüstürme isleme . . . . . . . . . . . . . . . . . . . . . 13

2.2 Görüntü esikleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.3 Görüntü kesitleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.4 Iskeletleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.5 Alt bölgeleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.6 Baslangıçlar,kesisimler ve minör baslangıç bölgeleri . . . . . . . . . . . . 14

2.6.1 Baslangıçları . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.6.2 Kesisimler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.6.3 Minör baslangıçları . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.6.4 Karakter çapraz geçisleri . . . . . . . . . . . . . . . . . . . . . . 16

2.7 Digerlerinden ayıran çizgi sekmanları . . . . . . . . . . . . . . . . . . . 17

2.8 Özellik çıkartımı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

5

Page 7: optical character recognition(matlab)with feature extraction

2.9 Fonksiyon ve altfonksiyonlar . . . . . . . . . . . . . . . . . . . . . . . . 21

2.10 Örnekler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2.11 Sınıflandırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.11.1 Görüntüler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.11.2 Weka’da ne yapılacak? . . . . . . . . . . . . . . . . . . . . . . . 28

2.11.3 Verilerin arff formatına uydurulması . . . . . . . . . . . . . . . . 28

3 Deneysel Çalısmalar 29

3.1 Verilerin analizinin gerçeklenmesi . . . . . . . . . . . . . . . . . . . . . 29

3.2 Alanların minimizasyonu . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.3 Bayes Agları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.4 j48 agaç . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.5 Çok katmanlı algılayıcılar . . . . . . . . . . . . . . . . . . . . . . . . . . 34

SONUÇLAR 36

4 DENEYSEL SONUÇLAR 36

KAYNAKLAR 37

EKLER 38

4.1 feature extractor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.2 Line Classifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.3 Line segmenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

4.4 find neighbours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

4.5 find direction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

4.6 ismymember . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4.7 starter intersection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4.8 Isnotintersection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

4.9 isnotempty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

ÖZGEÇMIS 66

6

Page 8: optical character recognition(matlab)with feature extraction

Simge Listesi

vs. Vesaire

vb. Ve benzeri

7

Page 9: optical character recognition(matlab)with feature extraction

Sekil Listesi

1 8 bitlik derinlige sahip görüntünün esikleme sonra görüntü fonksiyonu . . 13

2 Orjinal görüntü ve iskeletleme (2) nolu ifade uygulandıktan sonra . . . . . 14

3 Sırasıyla görüntüde soldan saga baslangıç,kesisim ve minör baslangıçları . 16

4 Yön kurallarını uygulamadan önce. . . . . . . . . . . . . . . . . . . . . . 18

5 Özellik çıkartımı algoritmasındaki altfonksiyonlar . . . . . . . . . . . . . 21

6 50x50 lik görüntüler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

7 Sekildeki kalibrasyonlar olusturuldu . . . . . . . . . . . . . . . . . . . . 27

8 Dörrt degerlerinden olusan kalibrasyonlar . . . . . . . . . . . . . . . . . 27

9 Matlabtaki görüntü özelikleri . . . . . . . . . . . . . . . . . . . . . . . . 28

10 Hesap tablosunda csv verisine uyarlama . . . . . . . . . . . . . . . . . . 28

11 Arff dosya formatı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

12 Arff uzantılı dosya seçme . . . . . . . . . . . . . . . . . . . . . . . . . . 29

13 Sınıflandırma yöntemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

14 Bayes aglarıyla cross edilmis 1650x85 verinin karmasıklık matrisi . . . . 30

15 Alan seçme algoritması arayüzü . . . . . . . . . . . . . . . . . . . . . . 30

16 Hangi alan sınıflandırmayı ne kadar etkiliyor? . . . . . . . . . . . . . . . 31

17 Filtreleme tipi seçme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

18 Görüldügü gibi gözle görülür bir azalma söz konusu . . . . . . . . . . . . 32

19 Bayes sınıflandırıcısı . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

20 Dikey olarak belirli alan kısıtları . . . . . . . . . . . . . . . . . . . . . . 32

21 Bayes Karmasıklıgı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

22 Agaçın veri kümemize ait genellemesi . . . . . . . . . . . . . . . . . . . 33

23 Agaç algoritmasının karmasıklık matrisi . . . . . . . . . . . . . . . . . . 34

24 Katmanlar ve döngü sayıları gösterilmis . . . . . . . . . . . . . . . . . . 34

25 ÇKA’nın karmasıklık matrisi . . . . . . . . . . . . . . . . . . . . . . . . 34

26 Radyal tabanlı sinir agıyla . . . . . . . . . . . . . . . . . . . . . . . . . . 35

8

Page 10: optical character recognition(matlab)with feature extraction

Tablo Listesi

1 Temsili bir örnek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2 Çaprazlık iliskileri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3 Binari olarak gösterilmis basit bir a . . . . . . . . . . . . . . . . . . . . . 22

4 Görüntünün öznitelik olarak bit dogrultularının kodlanması . . . . . . . . 23

5 Soldan saga lokalde çizgi tipi tayini . . . . . . . . . . . . . . . . . . . . 23

6 Öznitelik vektörleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

7 Binari gösterimli bir k . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

8 Yön tayini yapılmıs bir k . . . . . . . . . . . . . . . . . . . . . . . . . . 24

9 Öznitelik vektörleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

10 ikili gösterilmis bir g . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

11 Homojen bölünmüs bir g harfi ve piksel dogrultuları belirtilmis . . . . . . 25

12 Öznitelik vektörleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

13 Veri kümemizin çapraz geçerleme neticesinde sınıflandırma oranları . . . 36

9

Page 11: optical character recognition(matlab)with feature extraction

1 Giris

1.1 OCR nedir?

Optik Karakter Tanıma (OCR), elektronik görüntüler üzerindeki karakterlerin ya da metin

bilgilerinin okunarak ASCII koda dönüstürülmesi islemidir. OCR metodolojileri kullanı-

larak makineler tarafından yazılmıs karakterler, elyazısı karakterler ve isaretler kolaylıkla

okunup ASCII koda dönüstürülebilirler. OCR, makineler tarafından yazılmıs karakterle-

rin okunup tanınmasında kullanılan teknolojidir. ICR (Intelligent Character Recognition)

ise elyazısı karakterlerin okunup tanınmasında kullanılan teknolojidir.

1.1.1 Optik Karakter Tanıma (OCR) Neleri Kapsar?

OCR iki sınıfa ayrılır:

Otomatik Karakter Tanıma (ADC-Automatic Character Recognition ) ve metin tanıma

(TR-Text Recognition). ADC ile her karakter dogru olarak tanınır ve karsılıgında bir AS-

CII kod atanır. Örnegin; OCR ile bir çek üzerindeki resmi olmayan miktar alanı tanınıp,

MICR teknolojisi ile kodlanarak bir bankacılık sisteminde islenebilir. Para alanı ise ge-

nelde elyazısı ile doldurulur ve bu karakterler sınırlı bir dogrulukla tanınabilirler. Bir ADC

uygulamasında, basarılı bir tanımanın göstergesi %99.98 tanıma dogruluk derecesine ula-

sılmasıdır. ADC sürecinin baslangıcında bu deger genellikle daha düsüktür ve ardından

yapılan görüntü isleme algoritmalarıyla yükseltilir.

Bazı durumlarda, full text search islemi gerçeklestirmek için, verilen bir sayfa üzerindeki

metnin TR OCR ile tanınması gereklidir. Burada OCR makine yazısı olan alfanümerik

karakterlerin tanınmasında kullanılır. TR ile ise sözlükler de kullanılarak cümlelerin içe-

rikleri de karakter tanımaya etkide bulunur.

1.1.2 Optik Karakter Tanıma (OCR) Nasıl Çalısır?

Karakterlerin tanınmasında birkaç OCR metodolojisi kullanılır. Bunlar arasında topolojik

tabanlı olan, yapay sinir aglarına dayanan, matris esleme ile gerçeklesen, öznitelik ana-

lizi ile çalısan ve egrileri izleyerek karakter tanıma islemini gerçeklestiren metodolojiler

yer almaktadır. Karakterlerin daha büyük dogrulukla tanınması için, okunan verilere ön

10

Page 12: optical character recognition(matlab)with feature extraction

isleme ve son isleme algoritmaları uygulanmaktadır. Bu algoritmalar, formların belirlen-

mesinde, formlar üzerindeki belirli alanların silinmesinde, form ve karakterlerin düzeltil-

mesinde (deskew) ve görüntünün iyilestirilmesinde kullanılırlar. Karakterlerin büyük dog-

rulukla okunmasında, sisteme sunulan elektronik görüntünün mümkün oldugunca keskin

(sharp), temiz ve düzgün olması oldukça büyük önem tasımaktadır. Buna ragmen, günlük

yasamda kullanılan dokümanlar ve formlar genellikle kirli, yıpranmıs ve katlanmıstırlar.

Tanıma isleminden önce uygulanacak ön isleme algoritmaları ile formun elektronik gö-

rüntüsü temizlenir ve karakterler mümkün oldugunca iyilestirilir.

Karakterlerin tanınması sırasında, kullanıcı tarafından kabul edilmeyen ya da dogruluk

kriterini yakalayamayan karakterler reddedilmelidir (tanınmıyor olarak degerlendirilme-

lidir). Örnegin dogruluk kriteri olarak % 99.98 kabul edilirse, dogru olmadıgı kabul edilen

birçok karakter reddedilecektir. Eger dogruluk kriteri daha asagı sınırlara çekilirse, tanı-

nan karakter sayısı artacaktır. Buna ragmen % 99 oranındaki dogruluk kriterleri sıklıkla

kullanılmaktadır.

Içinde OCR tarafından okunamayan karakterler de bulunan reddedilen karakterler dogru-

lukla belirlenebilmelidir. Bu islem genelde karakterin ekrana getirilerek el ile girisi yapıl-

ması süreci ile gerçeklestirilir.

Dogrulugu iyilestirmenin en son basamagı ise OCR ya da el ile girisi yapılmıs tüm karak-

terlerin islenmesi, dogrulugunun istenilen kriteri yakaladıgının sınanması ya da kullanıcı

gereksinimini karsılayıp karsılamadıgının belirlenmesidir. Son isleme islemleri ile sözü

edilen son basamak gerçeklestirilebilir. Ticari olarak var olan algoritmalar ile bu adım

kolaylıkla uygulanabilir. Verinin arıtılması adı da verilen bu islemler, karakter tanımadaki

dogrulugu büyük oranda arttırmaktadır.

1.1.3 Optik Karakter Tanıma (OCR) Sistemlerini Kimler Kullanır?

Günümüzde, doküman isleme islemleri ile ilgilenen kisiler, operasyon maliyetlerini dü-

sürmek ve verimlilik oranlarını arttırmak isteyen her kullanıcı OCR ya da ICR teknoloji-

lerini göz önüne alırlar.

OCR teknolojisi sıklıkla su alanlarda kullanılır :

Masaüstü Yayıncılık

Mahkemelerle Ilgili Alanlar

11

Page 13: optical character recognition(matlab)with feature extraction

Vergilendirme ve Tahsilat

Personel Kayıt Yönetimi

Nüfus Sayımı Formlarının Islenmesi

Çek Isleme

Ödeme Isleme

Emekli Fonu Isleme

Siparis Isleme

Tıbbi Istekler

Günümüz ekonomisinde, elektronik doküman yönetimi sistemlerinin, hem is dünyasında

hem de devletin yönetim mekanizmalarında, görüntüleme ve OCR teknolojilerini birlikte

kullandıklarını görebiliriz. Içinde yasadıgımız çalkantılı, dinamik ve maliyetlerin önem

tasıdıgı günümüz çalısma ortamlarında, OCR ile tanıma islemleri görüntüleme teknolojisi

ile birlestirilerek 21. yüzyıla geçiste kullanılan önemli bir basamaktır.

1.2 Projenin Amacı

Özellik çıkartım yöntemleri görüntü islemenin temelini olusturan bir alandır.Bu sayede

biz uzun uzadıya bit eslemesi yapmaya gerek kalmadan belirli büyüklükteki parçalara

ayırıp parçalardaki bitlerin ne sekilde dagıldıgını o bölgeyi karakterize eden deger kü-

melerinde tutarak vektörel degerler elde edip bilgisayarın islem yapması kolaylastıracak-

tır.Bizde görüntü isleme yöntemi olarak bu yöntemden yararlanıp vektörleri makineye

ögretip test ederek yöntem basarılarını ölçecegiz[1].

12

Page 14: optical character recognition(matlab)with feature extraction

2 Karakter tanıma

2.1 Ikili görüntüye dönüstürme isleme

Görüntü isleme yöntemleri kullanılarak çesitli islemler neticesinde [2] belirli katsayılar

elde edecegiz.Ama öncelikle 8 bit derinligine sahip görüntümüzü gri sonra ise ikili for-

mata (1)’nolu fonksiyonla gerçeklestiriyoruz.

im2bw (1)

2.2 Görüntü esikleme

Görüntü esikleme yaparak görüntüdeki gürültü(noise) etkilerinden çikartmamizi saglar

esikleme yapilan bir görüntünün fonksiyonu asagıdaki gibi olmalıdır[3].Uygulama alan-

ları biyomedikal,cografi vb.Örnek olarak Sekil 1 gösterilmistir.

Sekil 1: 8 bitlik derinlige sahip görüntünün esikleme sonra görüntü fonksiyonu

2.3 Görüntü kesitleme

Girilen karakterlerin sagdan soldan asagıdan ve yukarıdan çerçeveleyerek görüntünün is-

lem yapılmayacak bitlerini bir nevi süzgeçliyoruz.Bu sayede islemlerimize dahil olmaya-

cak verilerden kurtulup görüntü indirgenmesini gerçeklestirdik.

2.4 Iskeletleme

• Biyolojinin canlıların sekil ve yapıları ile ilgilenen dalına morfoloji (biçim bilim)

adı verilmektedir.

13

Page 15: optical character recognition(matlab)with feature extraction

• Matematiksel morfoloji ise temel küme islemlerine dayanan, imgedeki sinirlar (bor-

ders), iskelet (skeleton) gibi yapıların tanımlanması ve çıkartılması, gürültü gide-

rimi, bölütleme gibi uygulamalar için gerekli bir araçtır[4].

• imge islemede genellikle, morfolojik süzgeçleme, inceltme (thinning), budama (pru-

ning) gibi ön/son islem olarak da sıkça kullanılırlar.

• Gri tonlu imgeler üzerinde de yapılabilecegi gibi, genellikle ikili imgeler üzerinde

yapılan islemlerdir örnek olarak sekil 2 ’de gösterilmistir.

image = bwmorph(image,′ skel′, inf); (2)

Sekil 2: Orjinal görüntü ve iskeletleme (2) nolu ifade uygulandıktan sonra

2.5 Alt bölgeleme

Bu asamada ise artık ilgili resim çerçevelerini belirli büyüklükler halinde parçalara ayı-

rarak her resim için esit alana bölerek o alana ait öznitelik çıkartımı yapılacaktır.Bizim

algoritmamızda 3x3 sekilde yani 9’a bölünmüstür.

2.6 Baslangıçlar,kesisimler ve minör baslangıç bölgeleri

Belli bir bölgede farklı çizgi parçaları ayıklamak için, bu bölgede tüm iskeletten elde

edilir.Bu amaçla,karakter iskeletinde bazı baslangıç pikselleri,kavsaklar ve minör baslan-

gıçları olarak tanımlanır.

14

Page 16: optical character recognition(matlab)with feature extraction

2.6.1 Baslangıçları

Karakter iskeletinde bir komsusu olan piksel bulunur.Karaktere girmeden önce, belirli bir

bölgedeki tüm baslangıçlarda bulunan ve bir liste halinde tutulur.

2.6.2 Kesisimler

Kesisimlerin tanımlaması bazan daha da karmasıktır.Bir kesisim olması için bir piksel

için gereklidir fakat bir kriterde birden fazla komsuya sahip olması istenilen durum de-

gildir.Dogru komsular denilen yeni bir özellik, her piksel için tanımlanır.Belirli piksel

için de komsu sayısına dayanarak, bir kesisme ya da kesisme olmayan olarak sınıflandı-

rılır.Bunun için dogrudan piksel ve çapraz piksel olmak üzere komsu pikseller iki kate-

goriye ayrılır.Dogrudan pikselin yatay ve dikey yönde kesisim pikselinin bölgede tüm bu

piksellerle baglantısı vardır.Çapraz piksel ilgili piksele bir çapraz yönde oldugu bölgede

olan pikseldir.Simdi göz önünde bulunan pikselde dogru komsularının sayısını bulmak

için, o karakter iskeletindeki sahip komsularının sayısına baglı olarak sınıflandırılacaktır.

Ele alınan piksellerde su sekilde sınıflandırılır

• 3 komsu: Direkt piksellerin hepsi bir çapraz piksele herhangi birisine bitisik degilse,

o zaman, söz konusu pikselin komsu piksellerinin eger hiçbirinin kesistigi ardından

birbirine komsu olan baska piksel varsa, bir kesisme olamaz.

• 4 komsular: Her direk pikselin bir komsu çapraz piksel veya tersi varsa, ardından

söz konusu pikselin bir kesistigi olarak kabul edilemez.

• 5 veya komsular: Göz önüne alındıgında pikselin bes veya daha fazla komsuları

varsa, o daima bir kesisme olarak kabul edilir.

Tüm kesismeler görüntüde tanımlandıktan sonra, daha sonra bir liste halinde doldurulur.

2.6.3 Minör baslangıçları

Minör baslangıçlar karakter iskelet birlikte çapraz geçisi süresince birlikte bulunur.Göz

önüne alındıgında pikselin ikiden fazla komsuları ne zaman olusturulur.Olusabilir iki ko-

sul vardır

15

Page 17: optical character recognition(matlab)with feature extraction

• Kesisme:Geçerli bir kesisme oldugunu ne zaman anlarız.Mevcut hat segment sona

erecek ve tüm ziyaret edilmemis komsuları minör baslangıçlar listesinde dolduru-

lacaktır.

• Göz önüne alındıgında pikselin ikiden fazla komsuları ama yine de onun olmayan

bir kesisme ile gereken durumlar olusabilir.Bu gibi durumlarda, çapraz geçisi mev-

cut yönü önceki pikselin konumu kullanarak bulunur.Bölgesinde yer gezilmemis

piksellerinin hiçbir bu yönde ise, o zaman bir sonraki piksel olarak düsünülmüs ve

bütün diger pikselleri, minör baslangıçlar listesinde doldurulur.Piksellerin hiçbiri

çapraz geçisi geçerli yönünde degilse, o zaman geçerli segment bitirilir ve bölge-

sinde yer alan bütün pikselleri minör baslangıçlar listesinde doldurulur.Genel olarak

gösterimi sekil 3’daki gibidir.

Sekil 3: Sırasıyla görüntüde soldan saga baslangıç,kesisim ve minör baslangıçları

2.6.4 Karakter çapraz geçisleri

Bölgeleme resmin üzerine yapıldıktan sonra karakter çapraz geçisi baslar.Her bir bölge

ayrı ayrı hat kesimleri çıkarma islemine tabi tutulmaktadır.Bu amaçla, ilk olarak bölgede

baslangıçlar ve kesismeler bir listede doldurulur sonra bölgeye dahil edilir.Minor bas-

langıçlar çapraz geçisi süresince birlikte bulunur.Algoritma baslangıçlar listesini dikkate

alarak baslar.Tüm baslangıçlar islenir sonra, bu sekilde elde edilen minör baslangıçlar is-

lenir.Bu islem sırasında elde edilen tüm hattı segmentlerinin her biri çizgi parçası piksel

pozisyonları ile saklanır.Görüntüdeki bütün pikselleri dolasıldıktan sonra, algoritma du-

rur. Bir örnek Asagıdaki Tablo 1 algoritma daha önce açıklananları örneklemektir. Tek

tek hat kesimleri belirledik hangi bir karakteri iskeleti olacak sekilde düsünün.Sol üst kö-

sedeki piksel (1,1) olarak numaralandırılmıs ve numaralandırma matrisler için standart

16

Page 18: optical character recognition(matlab)with feature extraction

1 0 0 0 10 1 0 1 00 0 1 0 00 1 0 1 01 0 0 0 1

Tablo 1: Temsili bir örnek

kuralı vs. varsayılır.Bu görüntüdeki Baslangıçlar listesi [(1,1), (1,5), (5,1), (5,5)] olacak-

tır.Kesisme sadece piksel (3,3) ihtiva edecektir.Simdi algoritma ilk baslangıç örnegin (1,1)

isleyerek baslar.Bir sonraki piksel (2,2) ve, bundan sonra da, (3,3) ’dir.Piksel (3,3) bir ke-

sisim oldugunu, bu nedenle algoritma o andaki bölümünü durur ve minör baslatıcı tüm

komsularını tanımlar.Yani minör baslatıcı listesi [, (2,4) (4,2) (4,4)] ihtiva edecektir.simdi

olusan çizgi segmenti [, (2,2) (1,1) (3,3)] içerecektir.Simdi bir sonraki baslangıç örne-

gin (1,5) olarak kabul edilir.Sonraki piksel (2,4) ’dir. Algoritma akımı durdurur, böylece

piksel (2,4) küçük bir baslangıç oldugunu herhangi olup olmadıgını burada bölümlü ve

minör baslatıcı gibi, (2,4), tüm gezilmemis komsularını tanımlar. O ziyaret edilen andan

baslayarak aynı zamanda (2,4), minör baslatıcı listeden kaldırılır.Simdi bir sonraki bas-

langıç (5,1) olarak kabul edilir ve bu sekilde olusturulan bir sonraki çizgi parçası [(5,1),

(4,2)] olacaktır.Pixel (4,2) baslayanlar listeden kaldırılacaktır.Benzer bir sekilde, bir son-

raki çizgi parçası [(5,5), (4,4)] olabilir.Yani sonuçta, toplam 4 hat bölümü olacak.

2.7 Digerlerinden ayıran çizgi sekmanları

Çizgi parçası görüntüden ekstre edildikten sonra, bunlar su dogru tiplerinin herhangi bi-

rine sınıflandırılabilmesi gerekir.

• Yatay çizgi

• Dikey çizgi

• Sag çapraz çizgi

• Sol çapraz çizgi

Bunun için, bir yön vektörü her hat türünü belirlemede yardımcı olacak her satır segmen-

tinde elde edilir.Bunun için, alısılmıs bir söz konusu 3x3’lük bir matris merkezi piksel

17

Page 19: optical character recognition(matlab)with feature extraction

4 5 63 C 72 1 8

Tablo 2: Çaprazlık iliskileri

göre Tablo 2’daki gibi isimlendirme kuralı olursa bir komsu piksel konumunu tanımlana-

bilir.

Verilen, matris içinde "C" merkez pikseli temsil eder.Komsu pikseller merkez pikselin al-

tındaki pikselden baslayarak saat yönünde numaralandırılır.Bir çizgi diliminden yön vek-

törü ayıklamak için, algoritma onlar çizgi segmentini olusturan sırayla çizgi segmentlerde

tüm pikselleri dolasır.Örnegin, çizgi parçası [(1,1), (2,2), (3,3), (4,4)] düsünün.Birinci

piksel (1,1) geçerli orta piksel olarak kabul edilir.Bu merkezi bir piksel ile ilgili olarak,

(2,2),83 bir konumda bulunmaktadır.Yön vektörünün ilk giris 8 olacak.Daha sonra, piksel

(2,2), merkezi bir piksel olarak kabul edilir. Artık (3,3), bu piksel göre 8 konumunda aynı

zamanda.Yani yön vektörünün ikinci girisi de 8 olacaktır.Bu sekilde gidis, verilen çizgi

segmenti için yön vektörü (8,8,8) olacaktır.Kurallar yukarıda set tüm çizgi parçaları ta-

nımlamasına ragmen, bir sakıncası ’V’ ye de döndürülmüs varyasyon seklinde kesimleri

tek bir satır segmenti olarak algılanabilir olmasıdır.Iki tamamen farklı çizgi parçaları olu-

suyor olsa da örnegin, ’A’ verilen karakteri sekil 4 gibi belirgin bölüm tek satır segmenti

olarak algılanır.

Sekil 4: Yön kurallarını uygulamadan önce.

Bu tür hataları önlemek için, kurallar yeni bir dizi yön vektörü çıkarımı yapıldıktan sonra,

kurallar yeni bir dizi içine yeni çizgi parçalarını bulmak için her yön vektörü uygulanıp

tespit edilerek semada verilen segmenti uygulanır.Yönü vektör yeni hat kesimlerini bul-

mak için asagıdaki kurallara tabi tutulur.

• Önceki yön 6 veya 2 oldu VE sonraki yönü 8 veya 4 ya da.

18

Page 20: optical character recognition(matlab)with feature extraction

• Önceki yön 8 veya 4 VE sonraki yönü 6 veya 2 ya da.

• Bir çizgi parçası dogrultusu yönü ya da en fazla üç tip degistirildi.

Resimde isaretlenmis çizgi segmenti yön kuralları son açıklanan uygulamadan önce elde

edilmistir.Bu çizgi parçası aslında iki farklı çizgi parçası olusturmasına ragmen, biri al-

gılanacaktır.Ama kurallar uygulandıktan sonra burada açıklanan yönünü,iki hat türü ayırt

edecektir.Yeni bir çizgi parçası tespit edilirse, o zaman vektörü bu noktada, iki farklı vek-

törlere, ayrılır.Simdi asagıdaki kurallar her yön vektörü sınıflandırmak için tanımlanmıs-

tır.

• Olusan maksimum yönü tip 2 veya 6 ise, çizgi tipi dogru sag çaprazdır

• Olusan maksimum yön tipi 4 ya da 8 ise, çizgi tipi sol çapraz bırakılır

• Olusan maksimum yönü tip 1 veya 5 ise, ince çizgi tipi dikey

• olusumlu yön tipi 3 veya 7 ise, çizgi tipi yatay oldugu kansına varılır

Iki çizgi türü aynı sayıda olusursa bu iki segmentin çizgi tipi olarak kabul edilir ve arasın-

dan,o yön türü birinci olarak saptanır.

2.8 Özellik çıkartımı

Her segmentin çizgi tipi belirlendikten sonra, özellik vektörü bu bilgilere dayanarak olus-

turulmustur. Her bölge kendisine karsılık gelen bir özellik vektörü tutar.Kullanılan algo-

ritma 9 tane deger üretmektedir her bir bölge için..

Bunlar

• Yatay çizgilerin sayısı

• Tüm yatay çizgilerin normalize uzunlugu

• Dikey çizgilerin sayısı

• Tüm dikey çizgilerin normalize uzunlugu

• Sag çapraz çizgiler sayısı

19

Page 21: optical character recognition(matlab)with feature extraction

• Tüm sag çapraz çizgiler normalize uzunlugu

• Sol çapraz çizgiler sayısı

• Tüm sol çapraz çizgiler normalize uzunlukları

• iskelet normalize Alanı.

• Herhangi bir özel hat türü sayısı

asagıdaki yöntemi degeriyle standardize edilir.

deger = 1− ((cizgiSayisi/10) ∗ 2)

Herhangi bir özel hat türü normallestirilmis uzunlugu asagıdaki yöntem kullanılarak bu-

lunur.

uzunluk = (tumPikseldekiCizgiler)/(bolgedekiP ikseller)

Özellik vektörü burada açıklanan her bölge için özel çıkartımla elde edilir.N bölgeleri

varsa yani, her bölge için özellik vektörü olarak 9N unsurlar olacaktır.Önerilen sistem,

orijinal görüntü ilk olarak görüntü matrisi bölünmesi ile 9 bölgeye zonlanır.Özellikleri,

daha sonra her bir bölge için çıkartım eldelenmistir.Yine orijinal görüntü yatay dogrultuda

bölünmesi ile 3 bölgeye ayrılmıstır.Sonra özellikleri gibi her bölge için çıkarıldı.Bölgeli

özelligi çıkarımı yapıldıktan sonra, bazı özellikler yani bölgesel özelliklerine göre, tüm

görüntü için ekstre edilmistir.9 bölgeden 9 özellikten 81 özellik yapar ek olarakta 3 tane

özelik çıkartılır bu üç özelik sırasıyla:

• Euler Sayısı: Bu resimde deliklerin nesneleri sayısı farkı ve sayı olarak tanımla-

nır.Örnegin B’de iki delik bir nesne var nesneSayisi−deliksayisi’dan -1 aynı sey

A için ise 1− 1 = 0 olarak elde edilecektir.

• Bölgesel Alanı: görüntüdeki piksellerin toplam sayısına iskelette piksel sayısına

oranı olarak tanımlanmaktadır.

• Eksantriklik: Bu resmin iskeletini uygun en küçük dıs merkezli elips olarak tanım-

lanır.

20

Page 22: optical character recognition(matlab)with feature extraction

2.9 Fonksiyon ve altfonksiyonlar

Programın anlasılabilirligi ve kod kısımlarının tekrar tekrar yazılmasınında önüne ge-

çilebilmesi için islevler seklinde olusturulmustur. sekil 5’de fonksiyonlar hiyerarsik bir

sekilde gösterilmistir.

Sekil 5: Özellik çıkartımı algoritmasındaki altfonksiyonlar

Bu fonksiyonlar özetle yazacak olursak:

feature extractor Ana fonksiyonumuz parametre olarak görüntü çıktı olarak 85 uzunluklu vektör çıktı

verir.

discourser Görüntüde gereksiz pikselleri karaktere çerçevelemeye yarayan fonksiyon

line classifier Çizgi sınıflandırıcı parametre olarak 9 parçaya ayrılmıs görüntüyü parça parça alır

geriye 9 deger döndürür

prep image görüntüdeki gürültüleri gidermeye yöneliktir

line segmenter Çizgilerin komsuluklarına,kesisimlerine ve minör durumları silme ekleme islemleri

yapılır

finddirection Aldıgı iki degere göre yönünü belirleyen fonksiyondur

isnotempty Parametre olarak aldıgı matris bossa sıfır degilse bir degeri cevaplar

del pixel Piksel silme metodu

21

Page 23: optical character recognition(matlab)with feature extraction

isnotmember Üyesi degil mi?

findneighbours Piksellerin komsuluklarını arayan fonksiyondur

ismymember üyesi mi?

starter intersection Kesisim bölgesi baslangıcı mı?

2.10 Örnekler

Buraya kadar sürekli olarak teoriden bahsedildi,simdi birkaç örnekle kavrayalım[5].Öncelikle

görüntü gray seviye,esiklenir ve lojik 1 ve 0’a dönüstürülür.Tablo 3 görüldügü gibi.

11 1

1 11 1

1 1 1 1 1 1 1 11 1 1

1 11

Tablo 3: Binari olarak gösterilmis basit bir a

Iste en önemli kısım geliyor burada:

1. Satırlar homojen olarak 3*3’lük matris gibi 9 parçaya homojen olarak ayrılıyor.

2. Pikseller sol asagıdan baslanarak önündeki yada ziyaret edecegi piksele göre dog-

rultu alıyor. Bunlar;

Yatayı,

Dikeyi,

Sag çapraz,

Sol çapraz

kesisim olarak ifade edilir.Bu asama sonucunda esit bölünmüs parsellerde nite-

liklerin sayısına bakılır en çok olan bölgenin mümessili seçilir.Ya da bölge görün-

tüden bagımsız düsünülerek bölgesel piksel dagılına göre yorumlanır.Tablo 5 örnek

olarak gösterilebilir.Ikili a’nın niteliksel gösterimi Tablo 4 gibidir.

22

Page 24: optical character recognition(matlab)with feature extraction

43 4

3 42 25 1 1 1 1 5

3 43 4

4

Tablo 4: Görüntünün öznitelik olarak bit dogrultularının kodlanması

1 . . . . . .1 4 3

1 3 31 2 3

1 4 31 3 3

1 3 31 2 3

Tablo 5: Soldan saga lokalde çizgi tipi tayini

Bu asamadan sonra ise artık 9’luk vektörlere sıra geldi niceliklere adet 1−(2∗cizgiT ipiAdet)/10

,ile uzunluk ise cizgiT ipUzunluk/BolgedekiToplamCizgiAlani ile dokuzuncu degerse

bolgedekiToplamCizgiAlani/bolgedekiToplamAlan olarak ifade edilmistir.

y.adet y.uzun d.adet d.uzun sa.adet sa.yatıkuzun soyatadet soyatuzun alanoranı1 0 1 0 0.8 0.5 1 0 0.1671 0 1 0 1 0 0.8 0.67 0.25-1 -1 -1 -1 -1 -1 -1 -1 -11 0 1 0 0.8 0.25 1 0 0.33

0.8 0.8 1 0 1 0 1 0 0.416-1 -1 -1 -1 -1 -1 -1 -1 -1-1 -1 -1 -1 -1 -1 -1 -1 -1-1 -1 -1 -1 -1 -1 -1 -1 -11 0 1 0 1 0 0.8 0.5 0.167

Tablo 6: Öznitelik vektörleri

Yukarıda görüldügü gibi Tablo 6’da katsayılar gösterilmektedir bölgeler sol yukarıdan sag

asagı dogru takip edilerek degerler yazılmıstır.Yani herbir satır bir bölgeye denk gelmek-

tedir.Ayrıca -1 degerleri o bölgede hiç olmayan[6],bir piksel yada birbirinden bagımsız

iki pikseli ifade eden bölgelerde özelik olarak 9 tane -1 basılır.

23

Page 25: optical character recognition(matlab)with feature extraction

1 0 0 0 0 11 0 0 0 1 01 0 0 1 0 01 0 1 0 0 01 1 0 0 0 01 0 1 0 0 01 0 0 1 0 01 0 0 0 1 01 0 0 0 0 11 0 0 0 0 01 0 0 0 0 0

Tablo 7: Binari gösterimli bir k

Tablo 7’de gösterilen K harfini ifade eden binary matrisle Tablo 8 de farkedilmesede bir

önceki Tablo 3 ve 4 kolaylık farkedilecek bir operasyon var bunlar;

• satır ve sütunun 3’e bölünmesi amacıyla yanlardan yada alttan üstten sıfır ekleme

islemi,

• morfolojik islem yardımıyla görüntüyü erozyona ugratarak iskeleti [7] çıkartılıyor

böylelikle pikseller arası yön tayini karısıklıktan kurtulmus olunuyor.

2 32 32 32 35 52 42 42 42 42 22

Tablo 8: Yön tayini yapılmıs bir k

K harfini sembolize eden lojik matrisin Tablo 8’niteliksel Tablo 9 ise bölgesel nicelikleri-

dir.

24

Page 26: optical character recognition(matlab)with feature extraction

y.adet y.uzun d.adet d.uzun sa.adet sa.yatıkuzun soyatadet soyatuzun alanoranı1 0 0.8 0.75 1 0 1 0 0.331 0 1 0 0.8 0.67 1 0 0.25-1 -1 -1 -1 -1 -1 -1 -1 -11 0 0.8 0.8 1 0 1 0 0.4161 0 1 0 1 0 0.8 0.67 0.25-1 -1 -1 -1 -1 -1 -1 -1 -11 0 0.8 0.67 1 0 1 0 0.25-1 -1 -1 -1 -1 -1 -1 -1 -11 0 0.8 0.5 1 0 1 0 0.167

Tablo 9: Öznitelik vektörleri

0 0 1 1 1 1 00 1 0 0 0 0 01 1 0 0 0 0 01 0 0 1 1 1 11 0 0 0 0 0 11 0 0 0 0 0 10 1 1 0 0 1 00 0 1 1 1 0 0

Tablo 10: ikili gösterilmis bir g

Yukarıda verilen Tablo 10 niteliksel gösterimi Tablo 11 ve öznitelikleri Tablo 12 görül-

mektedir.

3 1 1 13

22 1 1 12 44 2

1 4 31 3

Tablo 11: Homojen bölünmüs bir g harfi ve piksel dogrultuları belirtilmis

25

Page 27: optical character recognition(matlab)with feature extraction

y.adet y.uzun d.adet d.uzun sa.adet sa.yatıkuzun soyatadet soyatuzun alanoranı1 0 1 0 0.8 0.5 1 0 0.22

0.8 0.67 1 0 1 0 1 0 0.333-1 -1 -1 -1 -1 -1 -1 -1 -11 0 0.8 0.67 1 0 1 0 0.333

0.8 0.5 1 0 1 0 1 0 0.221 0 1 0 1 0 0.8 0.67 0.33-1 -1 -1 -1 -1 -1 -1 -1 -11 0 1 0 1 0 0.8 0.67 0.33-1 -1 -1 -1 -1 -1 -1 -1 -1

Tablo 12: Öznitelik vektörleri

26

Page 28: optical character recognition(matlab)with feature extraction

2.11 Sınıflandırma

[11] Sınıflandırma ögrenmeli ögrenme ve ögrenmesiz ögrenme olmak üzere genel olarak

ikiye ayrılır.Bizim uygulama olarak gerçeklestirecegimiz sınıflandırma alan bilgisi girip

egitme islemi gerçeklestirdigimizden destekli kapsamına girer.Çapraz geçerleme yapa-

rak yani 10 parçaya ayırıp 1’ini hariç tutup 9’uyla egitip hariç tutugumuzla egitilme du-

rumu,bunu on defa tekrarlar basarı ölçümü yapılacaktır.

2.11.1 Görüntüler

Paint aracılıgıyla Sekil 6,Sekil 8 ve Sekil 7 gibi klasörlere eklendi.

Sekil 6: 50x50 lik görüntüler

Sekil 7: Sekildeki kalibrasyonlar olusturuldu

Sekil 8: Dörrt degerlerinden olusan kalibrasyonlar

Sonra ise (3) parametre olarak görüntüyü veriyoruz ve bize 85 alandan olusan vektör

çıktılayacak.

vektor = feature_extractor(goruntu); (3)

27

Page 29: optical character recognition(matlab)with feature extraction

2.11.2 Weka’da ne yapılacak?

Weka[8],Yeni Zelanda’nın Waikato üniversitesi tarafından java’da yazılmıs açık kamu li-

sanslı bir yazılımdır.Gelecekte açık kamu lisanslı yazılımların ülke ekonomilerine yazı-

lım lisanslarından kurtararak belirli ölçüde tasarruf ettirecegi öngörülmektedir.Weka kul-

lanımı basit ve pratiktir.Piyasada emsali programlara göre hatırı sayılır bir popülerlige

sahiptir.

2.11.3 Verilerin arff formatına uydurulması

[9] Elliser tane a,b,c,d,....,y,z ve 0 dan 9’a kadar olan karakter elle paint aracılıgla üre-

tilecektir.Sonra ise feature extractor’a parametre olarak verdigimiz görüntüden 85 alanlı

özellik vektörü elde edecegiz Sekil 9 görüldügü gibi.

Sekil 9: Matlabtaki görüntü özelikleri

Sonra ise excel aracılıgıyla sınıf bilgisini Sekil 10 gibi dahil ettik.

Sekil 10: Hesap tablosunda csv verisine uyarlama

Bundan sonra ilgili programımızın giris olarak aldıgı formata veriyi uyarlamak olacaktır.

Bu format Sekil 11’teki gibi olacaktır.Bu arff dosya uzatısının text olarak açılıp görüntü-

lenebilmektedir.

Sekil 11: Arff dosya formatı

28

Page 30: optical character recognition(matlab)with feature extraction

3 Deneysel Çalısmalar

3.1 Verilerin analizinin gerçeklenmesi

Artık veri setimizin olusturuldugunu varsayarak programda egitim [10] islemine basla-

yabiliriz.Programa genel bir bakıs yapacak olursak Sekil 12’te oldugu gibi bir menümüz

olacaktır.

Sekil 12: Arff uzantılı dosya seçme

Bu menü aracılıgıyla biz open file butonu yardımıyla dizinden arff uzantılı dosyamızı

seçiyoruz.Bu asamadan sonra artık hangi sınıflandırma yöntemini belirleyecegimizi Sekil

13 oldugu gibi seçiyoruz.Deneme amaçlı olarak sonucunu inceleyecegiz.

Sekil 13: Sınıflandırma yöntemi

Sonra ise bu butonun altında olan egitim ve test kriterlerine dokunmadan start butonuna

basarak sınıflandırma islemini baslatıyoruz.Sonuçta confusion matrisimiz asagıdaki Sekil

14 çıktı verdi.

29

Page 31: optical character recognition(matlab)with feature extraction

Sekil 14: Bayes aglarıyla cross edilmis 1650x85 verinin karmasıklık matrisi

3.2 Alanların minimizasyonu

Özelik çıkartımı yapılırken çogu algortima çok sayıda alan üretmektedir ancak söz konusu

kıyas edilecek veriler sınıflandırılırken bir sınıra göre sınıflandırılır bu sınır sınıflandırı-

lacak sınıf sayısının çokluguna göre degisebilir[11] örnegin biz iki adet sınıfı sınıflandı-

racagız algoritmamızın olusturacagı sınır yalnızca bu iki veri için geçerlidir üçüncü bir

veri için degildir.Kısacası duragan alanları filtreleme yaparak program aracılıgıyla alan

sayısını üçte birine indirecegiz.Öncelikle alanların sınıflandırmayı yüzde kaç etkiledigine

bakalım.

Sekil 15: Alan seçme algoritması arayüzü

Sekil 15 arayüzünden ilgili sekme tıklanarak Sekil 16 elde edilir.Buradan anlıyoruz ki

bütün alanlar mevcut veri kümesine göre sınıflandırma üzerinde etkili degil.

30

Page 32: optical character recognition(matlab)with feature extraction

Sekil 16: Hangi alan sınıflandırmayı ne kadar etkiliyor?

Bu bilgiyi göz önüne alarak ön isleme ekranına giderek gereksiz alanları filtrelemek ama-

cıyla ilgili algoritmayı seçip Sekil 17 oldugu gibi onaylıyoruz.

Sekil 17: Filtreleme tipi seçme

Sekil 18 de scroll bardan anlasılacagı üzere 85’tane olan alan 27 ye kadar düsmüstür.Böylelikle

sınıflandırma isleminde gereksiz islemler devre dısı bırakılmıstır.

31

Page 33: optical character recognition(matlab)with feature extraction

Sekil 18: Görüldügü gibi gözle görülür bir azalma söz konusu

3.3 Bayes Agları

Sekil 19: Bayes sınıflandırıcısı

Sekil 20: Dikey olarak belirli alan kısıtları

32

Page 34: optical character recognition(matlab)with feature extraction

Gayet basarılı bir sınıflandırma yöntemi bu basarısını matematikteki olasılık tabanlı he-

saplamalarından alır.Gelismis bayes olarakta nitelendirilir.Sekil 19 oldugu gibi konfigü-

rasyon yapıp çapraz geçerleme yaptıgımızda Sekil 20’de sonuçları üzerine sag tıklayarak

vizualize graph diyerek yapıyı yorumlayabiliriz.Sonuçlar Sekil 21 oldugu gibidir.

Sekil 21: Bayes Karmasıklıgı

3.4 j48 agaç

Sekil 22: Agaçın veri kümemize ait genellemesi

Gayet anlasılabilir net ve keskin hatlar ile sınırlarını belirleyen agaç algoritması bize es-

nek bir sekilde veriyi yorumlama imkanı sunuyor.Veri kümesine ait agaç sonuçların üze-

rine gelip sag tıklayıp visualize tree seçenegiyle Sekil 22 deki gibi görüntülenebilir sonuç

matrisi 23 olarak çıkacaktır.

33

Page 35: optical character recognition(matlab)with feature extraction

Sekil 23: Agaç algoritmasının karmasıklık matrisi

3.5 Çok katmanlı algılayıcılar

Sekil 24: Katmanlar ve döngü sayıları gösterilmis

Sekil 25: ÇKA’nın karmasıklık matrisi

Çok katmanlı algılayıcılar yapay sinir agları kapsamındadır.Gayet basarılı olmasına kar-

sın yüksek degerde döngüler hatanın çok küçük olmasından dolayı varyansa(ezber) gi-

34

Page 36: optical character recognition(matlab)with feature extraction

rer.Çogu mühendislik ve bilim dallarında oldukça kullanılan bir yöntemdir.Sekil 24’de ha-

tayı kontrol edebiliriz istedigimiz zaman egitimi sonlandırabilme gibi yetkimiz var.Sonuçları

Sekil 25 gösterilmektedir.Gayet basarılı bir sınıflandırma yapmıstır.Yine bir yapay sinir

agları kapsamında esikleme radial fonksiyonu kulanan model bu model yogun egitim ve-

risinde çok iyi sınırlar çıkarmaktadır.Çıktılar Sekil 26 gibidir.

Sekil 26: Radyal tabanlı sinir agıyla

35

Page 37: optical character recognition(matlab)with feature extraction

4 DENEYSEL SONUÇLAR

Neticede 85 alandan 27 alana indirgenen özelik vektörü ile çapraz geçerlenen veride 12

sınıfa ait 108 kayıtta ise basarı oranları Tablo 13 oldugu gibidir.

RBF MLA BayesNet j48 BP SVM95.372 92.506 98.141 97.222 93.518 95.307

Tablo 13: Veri kümemizin çapraz geçerleme neticesinde sınıflandırma oranları

Sonuc olarak sınıflandırmayı yorumlarsak Bayes en yüksek sınıflandırma basarısına sa-

hiptir.

36

Page 38: optical character recognition(matlab)with feature extraction

Kaynaklar

[1] http://www.mathworks.com/matlabcentral/fileexchange/

24624-feature-extraction-for-character-recognition

[2] http://rasimavci.com/matlab/kodlar/GorIsl/islemler/

gorisl_esikleme1.html

[3] http://rasimavci.com/matlab/kodlar/GorIsl/islemler/

gorisl_esikleme1.html#3

[4] http://ceng.gazi.edu.tr/~mahmut/image_processing/Image_

processing/12_tr/aciklama.aspx

[5] A Novel Feature Extraction Technique for the Recognition of Segmented Handw-

ritten Characters M. Blumenstein, B. Verma and H. Basli School of Information

Technology, Griffith University-Gold Coast Campus, Australia

[6] http://www.mathworks.com/matlabcentral/fileexchange/

24624-feature-extraction-for-character-recognition

[7] http://www.yildiz.edu.tr/~bayram/sgi/Morfoloji2.ppt

[8] http://sourceforge.net/projects/weka/

[9] http://www.cs.waikato.ac.nz/~ml/weka/documentation.html

[10] http://www.slideshare.net/mustafakostek/

makine-renmesi-snflandrmarenmeli-renme-yntemlerinin-weka-ortamnda-uygulanmas

[11] http://en.wikipedia.org/wiki/Category:Classification_

algorithms

[12] http://bilgisayarkavramlari.sadievrenseker.com/2009/06/

01/weka/

37

Page 39: optical character recognition(matlab)with feature extraction

EKLER

4.1 feature extractor

%Bu fonksiyon giris görüntüsünün özniteliklerini çıkarır

function [features]=feature_extractor(image);

% Bu fonksiyon bölgeleri giris görüntüsünü ve her bölge için özelliklerini belirler.

%% görüntü ön isleme

if length(size(image))>2 % rgb görüntü ise;

image=rgb2gray(image);

image=im2bw(image,graythresh(image));

end

% Simdi görüntü ikili iskeletize görüntü olmalı

image=bwmorph(image,’skel’,inf);%%morfolojik islem olarak iskelet çıkarma seçiliyor...

%selecting the universe of discourse

image=discourser(image);

original_image=image;% orjinal görüntü yedekleme

row=size(image,1);

column=size(image,2);

% 3x3 pencere kullanıldıgı bu yana 3 yakın katına bu no.s Hücresi zorunda

% Önce biz bu görüntü en az 9 satır ve minimum 9 sütun olusur saglamak zorunda

add_rows=0; %ek sıra herhangi bir 9x9 matris dakika için

add_columns=0; % sütunları içindeki

if row<9

add_rows=9-row;

end

if column<9

add_columns=9-column;

end

if mod(add_rows,2)==0

image=[zeros(add_rows/2,column);image;zeros(add_rows/2,column)];

else

38

Page 40: optical character recognition(matlab)with feature extraction

image=[zeros((add_rows-1)/2,column);image;zeros((add_rows+1)/2,column)];

end

%bu satırların hepsi üst ve alt esit olarak güncellestirilmesi gerekir

%esit olması amacıyla esit olmayanlara 0 alanları ekleniyor

row=size(image,1);

if mod(add_columns,2)==0

image=[zeros(row,(add_columns)/2),image,zeros(row,(add_columns)/2)];

else

image=[zeros(row,(add_columns-1)/2),image,zeros(row,(add_columns+1)/2)];

end

column=size(image,2); %güncellenmis colon sayısıı

n_rows=ceil(row/3)*3-row; % sıfırlardan olusan satır yok edilmeyecek

n_columns=ceil(column/3)*3-column; % sıfırlardan olusan sütun yok edilecek

% Satır = 4, yani sıfırlardan olusan 2 satır eklenmesi gerektigini varsayalım. Hücresi (4/3) * 3 dönecektir.

% Olan 6 3 yandaki ila 4 arası yakın katıdır. Satırlar görüntüye eklenmesi Dosya Adedi Böylece n_rows içerir.

if mod(n_rows,2)==0

image=[zeros(n_rows/2,column);image;zeros(n_rows/2,column)];

else

image=[zeros((n_rows-1)/2,column);image;zeros((n_rows+1)/2,column)];

end

%satırın esit bölünmesi amacıyla asagıdaki operasyonlar uygulanmaya devam

%ediyor

row=size(image,1);

if mod(n_columns,2)==0

image=[zeros(row,(n_columns)/2),image,zeros(row,(n_columns)/2)];

else

image=[zeros(row,(n_columns-1)/2),image,zeros(row,(n_columns+1)/2)];

end

column=size(image,2); %Satırlar üçe bölünüyor simdi sıra sütunlara geldi

zone_height=row/3;

zone_width=column/3;

39

Page 41: optical character recognition(matlab)with feature extraction

%Her bölgedeki satır sayısı 12 ise partlamada 3’erli gidecektir

%Ancak sütunları 9,3 esit parça 3 olmalıdır oysa matris 12x3 ?.

%Bu degiskenler bölge yüksekligi ve genisligi depolanır.

zone11=image(1:zone_height,1:zone_width);

zone12=image(1:zone_height,(zone_width+1):2*zone_width);

zone13=image(1:zone_height,(2*zone_width+1):end);

zone21=image((zone_height+1):2*zone_height,1:zone_width);

zone22=image((zone_height+1):2*zone_height,(zone_width+1):2*zone_width);

zone23=image((zone_height+1):2*zone_height,(2*zone_width+1):end);

zone31=image((2*zone_height+1):end,1:zone_width);

zone32=image((2*zone_height+1):end,(zone_width+1):2*zone_width);

zone33=image((2*zone_height+1):end,(2*zone_width+1):end);

% feature_vectors

zone11_features=lineclassifier(zone11);

zone12_features=lineclassifier(zone12);

zone13_features=lineclassifier(zone13);

zone21_features=lineclassifier(zone21);

zone22_features=lineclassifier(zone22);

zone23_features=lineclassifier(zone23);

zone31_features=lineclassifier(zone31);

zone32_features=lineclassifier(zone32);

zone33_features=lineclassifier(zone33);

%Bu hayır Euler ... bir özellik olarak adlandırılan Eulerdir. O görüntüdeki nesnelerin ve deliklerin arası farkıdır.

euler=bweuler(image);

features=[zone11_features;zone12_features;zone13_features;zone21_features;zone22_features;zone23_features;zone31_features;zone32_features;zone33_features];

features=[reshape(features’,numel(features),1);euler];

% Burada görüntünün bölge özellikleri dikkate alınacaktır.

stats=regionprops(bwlabel(image),’all’);

40

Page 42: optical character recognition(matlab)with feature extraction

skel_size=numel(image);

%convexarea=(stats.ConvexArea)/skel_size;

eccentricity=stats.Eccentricity;

extent=stats.Extent;

%filledarea=(stats.FilledArea)/skel_size;

%majoraxislength=(stats.MajorAxisLength)/skel_size;

%minoraxislength=(stats.MinorAxisLength)/skel_size;

orientation =stats.Orientation;

% Bu bölgesel özellikleri vardır.

regional_features=[eccentricity;extent;orientation];

features=[features;regional_features]; % I CHANGED HERE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

% Simdi bir önceki geometrik ve bu local özellikleri birlestirilmis gerekir.

%features=[features;regional_features];

4.2 Line Classifier

% Bu islev, belirli bir girise göre bana olumsuz veya çizgi segmentleri türünü vermelidir.

function [featurevector]=lineclassifier(image)

% görüntü al

% Çıkıs olan unsurları 9 eleman özelligi vektörü içerecektir.

% 1.Yatay çizgilerin sayısı, 2.Yatay çizgilerin toplam uzunlugu,

%3. Sag çapraz çizgiler sayısı,

41

Page 43: optical character recognition(matlab)with feature extraction

% 4. Sag çapraz çizgiler toplam uzunlugu,

% 5. Dikey çizgilerin sayısı, 6. Dikey çizgilerin toplam uzunlugu,

%Sol çapraz çizgilerin sayısı, sol çapraz çizgiler toplam uzunlugu ve kesisme noktalarının sayısı.

%% Eger yön türleri yineleyebilirsiniz durumu olarak kabul bulunmamıssın.

down=1; %okunabilirligi artırmak için çalısıyor, bu # seyleri tanımlar hatırlıyor musun? :)))

downleft=2;

left=3;

upleft=4;

up=5;

upright=6;

right=7;

downright=8;

previousdirection=0;

currentpixel=[0,0];

nextdirection=0; %hufff!!!!

image=prep_image(image);

skel_size=length(find(image==1));

if skel_size<=1

featurevector=-1*ones(1,9);

return;

end

coordinates=find(image==1);

segments=linesegmenter(image);

N_segments=numel(segments);

segmentdirection={}; %Her segmente karsılık gelen yön vektörü içerir.

%% Her segmente karsılık gelen yön vektörü bulmak için gidiyor.

for i=1:N_segments

currentsegment=segments{i};

currentdirectionvector=[];

if size(currentsegment,1)==1

42

Page 44: optical character recognition(matlab)with feature extraction

error(’Lineclassifier.m içinde sadece bir piksel ile bir segmenti var dostum.’);

else

for j=1:(size(currentsegment,1)-1)

currentpixel=currentsegment(j,:);

nextpixel=currentsegment(j+1,:);

nextdirection=finddirection(currentpixel,nextpixel);

currentdirectionvector=[currentdirectionvector;nextdirection];

end

end

segmentdirection{i}=currentdirectionvector;

end

%%

% ok lets go with this!!!!!!!!!

% Asagıdaki durumlardan herhangi BIRI memnun IF, yeni bir çizgi baslaması tespit edilecektir.

% 1. Bir önceki yön sonraki yön asagı-saga veya yukarı-sol OR saga-yukarı veya asagı-sola VE

% 2. Bir önceki yön asagı dogru veya yukarı-sol VE sonraki yönü saga-yukarı veya asagı-sola VEYA

% 3. Bir çizgi parçasıyla yönünü yönü ya da üçten fazla tip degistirildi.

% 4. bir önceki yön Çesidi uzunlugu üç piksel daha büyüktür.

%Yukarıdaki kurallar, her segmente karsılık gelen tüm yön vektörü uygulanır.

Truelines={};

N=1;

for i=1:N_segments

currentdir_segment=segmentdirection{i};

currentsegment=segments{i};

%Kural 3 uygulamaya konmamıstır.

if numel(currentdir_segment)>2 %Kural 4 ile uygun olarak hazırlanmıstır.

j=1;

currentline=[];

while j<numel(currentdir_segment)

43

Page 45: optical character recognition(matlab)with feature extraction

previousdirection=currentdir_segment(j);

nextdirection=currentdir_segment(j+1);

rule_one=(previousdirection==upright | previousdirection==downleft) & (nextdirection==downright | nextdirection==upleft);

rule_two=(previousdirection==downright | previousdirection==upleft) & (nextdirection==upright | nextdirection==downleft);

if (rule_one | rule_two)

Truelines{N}=[currentline;previousdirection;nextdirection];

N=N+1;

if j+2>=numel(currentdir_segment) %Sadece bir piksel o yapay olarak kabul edilir sonraya kalır mı denetleniyor.

break;

else

j=j+2;

end

else

currentline=[currentline;currentdir_segment(j)];

j=j+1;

if j==numel(currentdir_segment) %Tam bir çizgi taramıs iseniz, o zaman listelemek için eklenmelidir.

Truelines{N}=[currentline;currentdir_segment(end)];

N=N+1;

break;

end

end

end

elseif numel(currentdir_segment)<3

currentdir_segment(:)=currentdir_segment(1); %Ilk yönü varsayarak tüm yön vektörü.

%error(’dostum, senin çizgi parçası 3 piksel azdır.’);

currentline=currentdir_segment;

Truelines{N}=currentline;

N=N+1;

end

end

44

Page 46: optical character recognition(matlab)with feature extraction

%% Çizgi türü algılama

% Burada çizginin türünü bulmak için çalısacagız.

N_Truelines=numel(Truelines);

Normallines={}; %normalize hatları tutmak için ayarlayın.

N=1;

% çizgi tipi normallestirme.

for i=1:N_Truelines

currentmaxtype=0;

currentmaxoccurence=0;

currentline=Truelines{i};

currentlength=numel(currentline);

occurencematrix=[];

for j=1:8 %Kez Dosya Adedi maksimum olusan numarasını bulmak için.

occurencematrix=[occurencematrix,numel(find(currentline==j))];

end

currentmaxoccurence=max(occurencematrix); % olayda max bulmak

current_max_direction=find(currentmaxoccurence==occurencematrix); %% max olusur yön bulma.

repetition=numel(current_max_direction)-1; %% Iki istikametin aynı sayisi kez olusup olusmadıgını bulma.

if repetition~=0

% display(’dostum, iki kez yol tarifi olumsuz sonuc verdi’);

end

Normallines{N}=current_max_direction(1)*ones(1,currentlength);% durumda iki dizin türleri aynı sayisi kez,

% ilk dizin alınlamlı olustu.

N=N+1;

end

% çizgi tipi algılama

N_horizontal=0; % yatay çizgi sayısı.

N_vertical=0; % dikey çizgi sayısı.

N_rightslant=0; % sag çapraz çizgi sayısı.

N_leftslant=0; %sol çapaz çizgi sayısı.

L_horizontal=0; % yatayların toplam uzunlugu.

45

Page 47: optical character recognition(matlab)with feature extraction

L_vertical=0; % dikeylerin toplam uzunlugu.

L_rightslant=0; % sag çaprazların toplam uzunlugu.

L_leftslant=0; % sol çaprazların toplam uzunlugu

N_Normallines=numel(Normallines);

for i=1:N_Normallines

currentline=Normallines{i};

firstelement=currentline(1);

if firstelement==left | firstelement==right

N_horizontal=N_horizontal+1;

L_horizontal=L_horizontal+length(currentline);

elseif firstelement==up | firstelement==down

N_vertical=N_vertical+1;

L_vertical=L_vertical+length(currentline);

elseif firstelement==upleft | firstelement==downright

N_leftslant=N_leftslant+1;

L_leftslant=L_leftslant+length(currentline);

elseif firstelement==upright | firstelement==downleft

N_rightslant=N_rightslant+1;

L_rightslant=L_rightslant+length(currentline);

end

end

window_height=size(image,1);

window_width=size(image,2);

% Onun sayisi çizgiler sonra degeri 1-((no.of lines)/10)*2 olarak normalize edilecek özellik degerleri

V_horizontal=1-((N_horizontal)/10)*2;

V_vertical= 1-((N_vertical)/10)*2;

V_rightslant=1-((N_rightslant)/10)*2;

46

Page 48: optical character recognition(matlab)with feature extraction

V_leftslant=1-((N_leftslant)/10)*2;

% uzunluk formülü uzunlugu = (belirli bir yönde toplam sayisi piksel) / (tüm toplam sayisi) iskelet ait pikseller kullanılarak bulunmustur

if skel_size~=0

norm_horizontal=L_horizontal/skel_size;

norm_vertical= L_vertical/skel_size;

norm_rightslant=L_rightslant/skel_size;

norm_leftslant=L_leftslant/skel_size;

else

norm_horizontal=-1;

norm_vertical=-1;

norm_rightslant=-1;

norm_leftslant=-1;

end

%Bu görüntü için Euler sayıyı verir, sayisi nesneler arasında ve Belirli bir görüntünün delikler sayisi farkı bu özelligi görüntüdeki toplam piksel oranını verir.

filled_area=skel_size/numel(image);

featurevector=[V_horizontal,norm_horizontal,V_vertical,norm_vertical,V_rightslant,norm_rightslant,V_leftslant,norm_leftslant,filled_area];

4.3 Line segmenter

% Bu dosyatek tek hat segmentler ayırt edici bana yardım etmelidir.

%Bu kodda Bu eser bir yazıda Blumenstein, Verma ve H.Basli tarafından

%’parçalı el yazısı karakterlerin tanınması için yeni bir özelligi çıkarma teknigi’ dayanmaktadır. (Bölüm 2.3.2 bakınız)

%% özellikleri giris

%görüntüde herhangi Baslatıcı su anda ise, eklenecek, kod ise yaramaz. (örn için, ’O’ harfini belada olurdu.)

%% Islevi burada baslar.

function [segments]=linesegmenter(image)

% görseli segmentlere önce, bu iskeletize olması ve sahte piksel çıkarılması gerekir. Fonksiyon prep_image o çalısır.

[starters,intersections]=starter_intersection(image);

% Baslatıcı ve kesismeler satır sütun koordinatlarını içerir.

down=1; %Bu # seyleri tanımlamak unutmayın, okunabilirligi artırmak için çalısıyor? :))

47

Page 49: optical character recognition(matlab)with feature extraction

downleft=2;

left=3;

upleft=4;

up=5;

upright=6;

right=7;

downright=8;

previousdirection=0;

currentpixel=[0,0];

nextdirection=0; %hufff!!!!

% Ben orijinal görüntünün 4 tarafı sıfır bir sınır eklemek için gidiyorum.

image=[image,zeros(size(image,1),1)]; %Sag sınırında sıfır ekleme.

image=[zeros(1,size(image,2));image];% Üst sınırındaki sıfır ekleme.

image=[zeros(size(image,1),1),image]; % Sol sınırında sıfır ekleme.

image=[image;zeros(1,size(image,2))];% Alt sınırında sıfır ekleme.

%Simdi orijinal piksel koordinatları degisti, ben baslayanlar ve aynı zamanda kesisimlerde bu degisikligi getirmek zorunda

minor_starters_queue=[];

starters = starters + 1;

intersections = intersections + 1;

if isempty(starters) % mükemmel bir D düsünmek...

[r,c]=find(image==1);

coordinates=[r,c];

starter1=coordinates(1,:);

starter2=coordinates(end,:);

minor_starters_queue=[starter1;starter2];

end

% böylece bir komsuluk için tanımlanabilir.

N=1; % segmentlerin Hayır içermesi gerekiyordu.

segments={}; %gereken hücre bireysel kesimleri içerecek sekilde.

starters_queue=starters;

visited=[]; %ziyaret edilen tüm piksel ayarlayın.

48

Page 50: optical character recognition(matlab)with feature extraction

%for i=1:size(starters_queue,1)

skel_size=numel(find(image==1)); % Biri degere sahip piksel bir olumsuz olarak nitelendirilir

%% Bu, tüm baslayanlar kadar çalısmaya devam ediyorum, ana döngü.

% Ele alınan ya da minör baslayanlar ele alınmaktadır da tüm iskelet ziyaret olmustur.

while(isnotempty(starters_queue) | isnotempty(minor_starters_queue))% | size(visited,1)<skel_size)BU HAKKINDA CIDDI BIR OLABILIR.

currentsegment=[];% Mevcut segmentler piksel listesini içermesi gerekir.

%% Bu kod kısmı, normal starters_queue üyeleri ile ilgilenir.

if isnotempty(starters_queue)

if isnotmember(starters_queue(1,:),visited)

current_starter=starters_queue(1,:);

starters_queue=del_pixel(current_starter,starters_queue);

currentpixel=findneighbours(image,current_starter);

visited=[visited;current_starter];

currentsegment=[currentsegment;current_starter];

nextdirection=finddirection(current_starter,currentpixel);

previousdirection=nextdirection; %Bu bölümleri baslatma parçalardır ve baslangıçları sonraki pikselde olur.

%findneighbours() mevcut pikselin komsuları bulmak için bir islevdir.

else

starters_queue=del_pixel(starters_queue(1,:),starters_queue);

continue; %baslangıç ile ... ele alınmıs ise orada kalan kod çalıstıran hiçbir nokta, böylece bir sonraki baslangıç için gitmeliyiz.

% böylece kontrol süre geçmesi gerekir.

end

%% Bu kod kısmı ÇALISIYOR (!!!) minör baslayanlar ile ugrasmak.

elseif (isempty(starters_queue) & isnotempty(minor_starters_queue))

currentminor=minor_starters_queue(1,:);

currentsegment=[];

if ismymember(currentminor,visited) % iskeletize ’A’ ikinci kesisme olgusu hatırlamak.

minor_starters_queue=del_pixel(currentminor,minor_starters_queue);

continue;

end

visited=[visited;currentminor]; % ziyaret edilen kümesine currentminor ilave edilmesi.

49

Page 51: optical character recognition(matlab)with feature extraction

neighbours=findneighbours(image,currentminor); % Mevcut minör komsuları bulma.

temp=1;

while temp<=size(neighbours,1) %Mevcut Minors komsular listesinden ziyaret edilen komsuları silme.

current_neighbour=neighbours(temp,:);

if (ismymember(current_neighbour,visited) | ismymember(current_neighbour,minor_starters_queue))

neighbours=del_pixel(current_neighbour,neighbours);

temp=1;

else

temp=temp+1;

end

end

unvisited_neighbours=neighbours;

if size(unvisited_neighbours,1)>2

minor_starters_queue=del_pixel(currentminor,minor_starters_queue);

continue;

%error(’arkadas, geçerli minör ikiden fazla Gezilmemis komsuları var.’);

end

if size(unvisited_neighbours,1)==2

discarded=unvisited_neighbours(1,:);

currentpixel=unvisited_neighbours(2,:);

currentsegment=[currentsegment;currentminor];

minor_starters_queue=[minor_starters_queue;discarded];

elseif isempty(unvisited_neighbours)

minor_starters_queue=del_pixel(currentminor,minor_starters_queue);

continue;

elseif size(unvisited_neighbours,1)==1

currentpixel=unvisited_neighbours;

currentsegment=[currentsegment;currentminor];

unvisited_neighbours=[];

end

end

50

Page 52: optical character recognition(matlab)with feature extraction

%% Bu kod satırı currentpixel isler.

while(isnotmember(currentpixel,visited))

%% Bu hücrenin noktası mevcut piksel ne ise bir sonraki piksel bulmaktır.

% kesisim ne Starter ne minör.

if(isnotmember(currentpixel,intersections) & isnotmember(currentpixel,starters_queue)) %isnotmember()

% fonksiyonel geçerli piksel kesisimleri ise, ayrıca mevcut piksel sadece iki komsu oldugunu anlasılacagı denetlemek.

neighbours=findneighbours(image,currentpixel);

visited=[visited;currentpixel];

%% komsuları ziyaret piksel yanı sıra baslatıcı silme ve bir sonraki piksel bulmak için gidiyor

temp=1;

while temp<=size(neighbours,1)

current_neighbour=neighbours(temp,:);

if (ismymember(current_neighbour,visited))

neighbours=del_pixel(current_neighbour,neighbours);

temp=1;

else

temp=temp+1;

end

end

% sonraki ise bölümün komsuları listesindeki tüm minör starterları temizler.

if size(neighbours,1)>2 %komsularından biri minör Starter ise bu durumda gerçeklesir.

temp=1;

while temp<=size(neighbours,1)

current_neighbour=neighbours(temp,:);

if (ismymember(current_neighbour,minor_starters_queue))

neighbours=del_pixel(current_neighbour,neighbours);

temp=1;

else

temp=temp+1;

end

51

Page 53: optical character recognition(matlab)with feature extraction

end

end

if isempty(neighbours) %açıklama için alt bölümüne bakın.

currentsegment=[currentsegment;currentpixel];

segments{N}=currentsegment;

N=N+1;

break;

end

if size(neighbours,1)==1

nextpixel=neighbours;

elseif size(neighbours,1)==2 % Tüm ziyaret edilmis komsuların kaldırıldıgını unutmayın.

%bu nedenle bu iki adet ziyaret edilmemis bulunmaktadır.Burada bunlardan birisi olacaktır.

first_neighbour=neighbours(1,:);

second_neighbour=neighbours(2,:);

% komsularının biri oldugu bir durum olusabilir.

% kesisim öyleyse bu piksel kadar çoksa, burada segmenti durdurmak ve bir minör olarak kesisim dısındaki

%piksel düsünelim.else continue

if ismymember(first_neighbour,intersections)|ismymember(second_neighbour,intersections)

currentsegment=[currentsegment;currentpixel];

if ismymember(first_neighbour,intersections)

currentsegment=[currentsegment;first_neighbour];

segments{N}=currentsegment;

N=N+1;

visited=[visited;first_neighbour];

minor_starters_queue=[minor_starters_queue;second_neighbour];

else

currentsegment=[currentsegment;second_neighbour];

segments{N}=currentsegment;

N=N+1;

visited=[visited;second_neighbour];

minor_starters_queue=[minor_starters_queue;first_neighbour];

52

Page 54: optical character recognition(matlab)with feature extraction

end

minor_starters_queue=[minor_starters_queue;first_neighbour;second_neighbour];

break;

end

neighbour_one_direction=finddirection(currentpixel,first_neighbour);

neighbour_two_direction=finddirection(currentpixel,second_neighbour);

if(neighbour_one_direction==previousdirection)

neighbours=del_pixel(second_neighbour,neighbours);

nextpixel=neighbours;

previousdirection=neighbour_one_direction;

else

neighbours=del_pixel(first_neighbour,neighbours);

nextpixel=neighbours;

previousdirection=neighbour_two_direction;

end

elseif size(neighbours,1)>2

%2’den fazla komsularının oldugundan bunlardan biri bir kesisim olacak çok yüksek ihtimalle. so we

%Bu kesisim bulmak ve burada parçayı sonlandırmak zorunda.

%küçük bir Starter var hiçbiri olmazsa, uç noktası olarak düsünmek yeterli.

%display(’hi, ikiden fazla Gezilmemis komsuları var.’);

unconsidered=neighbours;

for i=1:size(neighbours,1)

current_neighbour=neighbours(i,:);

if ismymember(current_neighbour,intersections)

unconsidered=del_pixel(current_neighbour,unconsidered);

visited=[visited;current_neighbour];

currentsegment=[currentsegment;current_neighbour];

segments{N}=currentsegment;

N=N+1;

currentsegment=[];

break;

53

Page 55: optical character recognition(matlab)with feature extraction

end

end

% Bundan sonra döngü kesistigi hariç tüm pikseller önemsenmemis olacaktır

%bu nedenle, hepsi minor_starters_queue eklenmelidir.

%o zaman sadece bir tanesi kabul edilecektir komsuları ikiden fazla kesismeler, varsa baska bir sorundur.

minor_starters_queue=[minor_starters_queue;unconsidered];

break;

end

currentsegment=[currentsegment;currentpixel];

previousdirection=finddirection(currentpixel,nextpixel);

previouspixel=currentpixel; % Bazen, bu yardımcı olabilir.

currentpixel=nextpixel; % Bir sonraki piksel üzerine hareketli.

%% Bu bölümün noktası geçerli piksel bir kesistigi oldugu durumla basa çıkmak için ise

elseif (ismymember(currentpixel,intersections)) %ikiden fazla komsu olması anlamına gelir.

visited=[visited;currentpixel];

neighbours=findneighbours(image,currentpixel);

unvisited_neighbours=[]; %Gezilmemis komsuları tutmak için.

for i=1:size(neighbours,1)

if isnotmember(neighbours(i,:),visited)

unvisited_neighbours=[unvisited_neighbours;neighbours(i,:)];

end

end

unvisited_directions=[];

direction_flag=0; % Bu geçerli çapraz geçisi yönü korunmus olup olmadıgını kontrol etmek için bir bayraktır.

for i=1:size(unvisited_neighbours,1)

current_neighbour=unvisited_neighbours(i,:);

current_neighbour_direction=finddirection(currentpixel,current_neighbour);

if current_neighbour_direction==previousdirection

direction_flag=1;

currentsegment=[currentsegment;currentpixel];

previouspixel=currentpixel;

54

Page 56: optical character recognition(matlab)with feature extraction

currentpixel=current_neighbour;

unvisited_neighbours=del_pixel(current_neighbour,unvisited_neighbours);

minor_starters_queue=[minor_starters_queue;unvisited_neighbours];

unvisited_neighbours=[];

break;

end

% komsu piksellerin hiçbiri geçerli çapraz geçisi yönünde nerede oldugunu bir durum meydana gelebilecek.

%Daha sonra bunların her minor_starters_queue eklenmelidir.

%Örnek için alt bölümüne bakın.

%sonu burada gerçeklesirse, hepsini st ilave edilmelidir,

%pikselin bir döngü baska bundan sonra, mevcut çapraz geçisi yönünde oldu demektir.

end

if direction_flag==0

minor_starters_queue=[minor_starters_queue;unvisited_neighbours];

currentsegment=[currentsegment;currentpixel];

segments{N}=currentsegment;

N=N+1;

end

%% geçerli piksel starter oldugunun anlasılması

elseif (ismymember(currentpixel,starters_queue))

currentsegment=[currentsegment;currentpixel];

starters_queue=del_pixel(currentpixel,starters_queue);

visited=[visited;currentpixel];

segments{N}=currentsegment;

N=N+1;

%% minör mü=?

elseif (ismymember(currentpixel,minor_starters_queue))

currentsegment=[currentsegment;currentpixel];

minor_starters_queue=del_pixel(currentpixel,minor_starters_queue);

visited=[visited;currentpixel];

55

Page 57: optical character recognition(matlab)with feature extraction

segments{N}=currentsegment;

N=N+1;

end

end

end

% Simdi tüm segmentler nedeniyle sıfır sınırına ekleyerek orijinal konumuna geçer, her (x, y) noktası kaymıstır (x + 1, y + 1).

for i=1:(N-1)

segments{i}=segments{i}-1;

end

save debug.mat

% [1 1 1 1

% 0 1 0 0]

% Bu durumda, çapraz geçisi (1,4) baslayacak ve (1,2) ulastıgında, zikzaklı yönde (1 oldugu, iki komsu (1,1) ve (2,2) vardır 1), (2,2), bu bakıs açısıyla, geçerli piksel) (simdi 1,1 starters_list eklenir, komsular (1,2) ve (2,2), ancak (1,2) zaten ziyaret ve (2,2) ziyaret olamaz....

% cpr=currentpixel(1);cpc=currentpixel(2);

%cpr geçerli piksel satır ve oldugunu.

% tbm geçerli piksel sütundur.

% [1 0 1

% 0 1 0

% 0 1 0]

%baslangıç piksel ne olursa olsun, bu durumda, merkez pikselde, çapraz geçisi yönü korunmaz.

4.4 find neighbours

%Bu fonksiyon, bir görüntü alacak ve merkez pikselin koordinatları verilecektir. .

% Bu 1 olarak deger merkezi pikselin tüm komsularının koordinatlarını dönmelidir.

function [neighbours]=findneighbours(image,coords)

imwindow=image((coords(1)-1):(coords(1)+1),(coords(2)-1):(coords(2)+1));

neighbours=[];

imwindow(2,2)=0; %% Bunun nedeni açıktır !!!!!!!!! olmalı

indexes=find(imwindow==1);

for i=1:length(indexes)

currentindex=indexes(i);

56

Page 58: optical character recognition(matlab)with feature extraction

row=rem(currentindex,3);

if(row==0)

row=3; %rem (currentindex, 3) sıfır olacaktır eger onun 3. satırda.

end

column=ceil(currentindex/3);

neighbours=[neighbours;[row,column]];

end

neighbours(:,1)=coords(1)+(neighbours(:,1)-2); % merkez piksel ’komsuları-2’ .. dinlenme, u anlamaya merkezi haline (0,0) ima, (2,2) ’dir !!!

neighbours(:,2)=coords(2)+(neighbours(:,2)-2);

4.5 find direction

%Fonksiyon find_direction argümanlar ilk merkez piksel olarak ilk piksel dikkate göre ikinci piksel yönünü verir gibi

%iki piksel koordinatlarını alır.Numaralandırma saat yönünün oldugunu.

%Merkez pikselin altına piksel 1 olarak numaralandırılmıs ve kalan saat yönünde numaralandırılmıstır.

function direction=finddirection(first,second);

direction=0;

position = second-first;

if position==[1,0]

direction=1;

elseif position==[1,-1]

direction=2;

elseif position==[0,-1]

direction=3;

elseif position==[-1,-1]

direction=4;

elseif position==[-1,0]

direction=5;

elseif position==[-1,1]

direction=6;

elseif position==[0,1]

direction=7;

57

Page 59: optical character recognition(matlab)with feature extraction

elseif position==[1,1]

direction=8;

end

4.6 ismymember

% func ismymember() cheks whether pixel is a element of given set

% chek doc for isnotmember for more info

function result=ismymember(pixel,set);

if isnotmember(pixel,set)

result=0;

else

result=1;

end

4.7 starter intersection

% Bu dosya girisi her baslatıcı ve kesismeler vererek bana yardım etmelidir.

% Bu geçerli görüntüdeki tüm Starter noktalarını bulur kod (çok kötü !!!!) çok verimsiz bir parça içerir.

%Sorun kontrolleri altındaki kodu verilen görüntüdeki tüm pikselleri bu harfin yalnızca bedene piksel Baslatıcı olabilir çünkü aslında gerekli olmayan

%bir Starter noktası, olup olmadıgını kontrol etmek olması. hufffffffffffffffff!!!!!!!!!!!!!

% kesismeler 3 ya da daha fazla komsuları olan piksellerdir.

% Bu kodda eser bir yazıda Blumenstein, Verma ve H.Basli tarafından ’parçalı el yazısı karakterlerin tanınması için yeni bir özelligi çıkarma teknigi’ dayanmaktadır. (Bölüm 2.3.1 bakınız)

function [starters_list,intersections] = starter_intersection(image)

%Ben orijinal görüntünün 4 tarafı sıfır bir sınır eklemek için gidiyorum.

image=[image,zeros(size(image,1),1)]; % Sag sınırında sıfır ekleme.

image=[zeros(1,size(image,2));image];% Üst sınırındaki sıfır ekleme.

image=[zeros(size(image,1),1),image]; % Sol sınırında ekleme sıfır...

image=[image;zeros(1,size(image,2))];% Alt sınırında sıfır ekleme.

58

Page 60: optical character recognition(matlab)with feature extraction

% Tüm sınırları sıfır ekleyerek tüm (x, y) yapar (x + 1, y + 1).

row=size(image,1);

column=size(image,2);

starters_list=[];

intersections=[];

for m=2:(row-1)

for n=2:(column-1)

if (image(m,n)==1)

neighberhood=image(m-1:m+1,n-1:n+1);

neighbours=numel(find(neighberhood==1))-1;

if neighbours==1

starters_list=[starters_list;[m,n]];

end

if neighbours==3 %açıklama için alt bölümüne bakın.

surrounders=findneighbours(image,[m,n]);

cornerpixels=0;

directpixels=0;

directions=[];

trueneighbours=3;

for i=1:3

currentdirection=finddirection([m,n],surrounders(i,:));

directions=[directions,currentdirection];

end

for i=1:3

currentdirection=directions(i);

if currentdirection==1

adjacency=find(directions==8 | directions==2);

if isempty(adjacency)

continue;

else

59

Page 61: optical character recognition(matlab)with feature extraction

trueneighbours=trueneighbours-1;

break;

end

elseif currentdirection==8

adjacency=find(directions==7 |directions==1);

if isempty(adjacency)

continue;

else

trueneighbours=trueneighbours-1;

break;

end

else

adjacency=find(directions==currentdirection-1 | directions==currentdirection+1);

if isempty(adjacency)

continue;

else

trueneighbours=trueneighbours-1;

break;

end

end

end

if trueneighbours==3

intersections=[intersections;[m,n]];

end

end

if neighbours==4

surrounders=findneighbours(image,[m,n]);

cornerpixels=0;

directpixels=0;

for i=1:4

currentdirection=finddirection([m,n],surrounders(i,:));

60

Page 62: optical character recognition(matlab)with feature extraction

if(rem(currentdirection,2)==0) %alt piksel 1 ve daha sonra piksel piksel merkezi etrafında saat yönünde numaralandırılmıstır.

cornerpixels=cornerpixels+1;

else

directpixels=directpixels+1;

end

end

if cornerpixels~=2

intersections=[intersections;[m,n]];

end

end

if neighbours>4

intersections=[intersections;[m,n]];

end

end

end

end

starters_list=starters_list-1; % koordinat sistemi kaymasının dengelemektedir.

intersections=intersections-1;

%consider matrix [1 1 0

% 0 1 0

% 0 0 1]

% ikiden fazla komsuları vardır, ama belli ki bir kavsak degil çünkü kesismeler

%tanımına göre burada merkezi piksel bir kesisim olarak kabul edilecektir !!!!. Bu sadece 3 komsuları oldugu durumlarda olur.

%Görüntünün iskeleti boyunca seyahat düsünün.En asagı-sag pikselden piksele merkezi geldi diyelim.

% Simdi bu merkez piksel (yukarı ve yukarı-sol), kod kesisim olarak görmektedir gitmek için iki yol vardır çünkü.Bu davranıs, modifiye edilmelidir.

%Yolu bu kalan iki komsu bu 3 * 3 penceresinde bitisik olup olmadıgını kontrol etmektir.

%Bunun için, onlar aynı satır veya sütunda olup olmadıgını kontrol etmek için yeterli.

% Koduyla baska sorun harfi ’C’ düsünmeleridir. Olası bir olay matristir. [1 1 1 1

% 1 0 0 0

% 1 1 1 1]

61

Page 63: optical character recognition(matlab)with feature extraction

% Burada piksel (2,1), bu 4 komsular vardır düsünün.Yani bir kesisim olarak sınıflandırılır, ama onun edilmeyecektir.

%Ben bu görmek gerekecektir.

% Now the elements in the four borders should be checked

% since they are not checked in the previous portion of code

%Dört köselerinde dört piksel denetimi kod önceki bölümü kontrol edilmez çünkü simdi dört sınırları ögeler kontrol edilmelidir

%(Ben kodlama bu tarz nefret !!!!!!)

%% Simdi sol üst kösesinde piksel ile kontrol edecek.

% if image(1,1)==1

% neighberhood=[image(1,2),image(2,2),image(2,1)];

% neighbours=numel(find(neighberhood==1));

% if neighbours==1

% starters_list=[starters_list;[1,1]];

% end

% if neighbours>=3

% intersections=[intersections;[1,1]];

% end

% end

%% Simdi sag üst kösesinde piksel ile kontrol edecek

% if image(1,column)==1

% neighberhood=[image(1,column-1),image(2,column-1),image(2,column)];

% neighbours=numel(find(neighberhood==1));

% if neighbours==1

% starters_list=[starters_list;[1,column]];

% end

% if neighbours>=3

% intersections=[intersections;[1,column]];

% end

% end

%% Simdi sol alt köse piksel kontrol edecek

% if image(row,1)==1

% neighberhood=[image(row-1,1),image(row-1,2),image(row,2)];

62

Page 64: optical character recognition(matlab)with feature extraction

% neighbours=numel(find(neighberhood==1));

% if neighbours==1

% starters_list=[starters_list;[row,1]];

% end

% if neighbours>=3

% intersections=[intersections;[row,1]];

% end

% end

%% Simdi sag alt kösede piksel kontrol edecek.

% if image(row,column)==1

% neighberhood=[image(row-1,column-1),image(row,column-1),image(row-1,column)];

% neighbours=numel(find(neighberhood==1));

% if neighbours==1

% starters_list=[starters_list;[row,column]];

% end

% if neighbours>=3

% intersections=[intersections;[row,column]];

% end

% end

%% Simdi sol sınır piksel kontrol edecek

% for m=2:row-1

% if image(m,1)==1

% neighberhood=image(m-1:m+1,1:2);

% neighbours=numel(find(neighberhood==1))-1;

% if neighbours==1

% starters_list=[starters_list;[m,1]];

% end

% if neighbours>=3

% intersections=[intersections;[m,1]];

% end

% end

63

Page 65: optical character recognition(matlab)with feature extraction

% end

%% Simdi üst sınır piksel kontrol edecek.

% for n=2:column-1

% if image(1,n)==1

% neighberhood=image(1:2,n-1:n+1);

% neighbours=numel(find(neighberhood==1))-1;

% if neighbours==1

% starters_list=[starters_list;[1,n]];

% end

% if neighbours>=3

% intersections=[intersections;[1,n]];

% end

% end

% end

%% Simdi sag sınır piksel kontrol edecek

% for m=2:row-1

% if image(m,column)==1

% neighberhood=image(m-1:m+1,(column-1):column);

% neighbours=numel(find(neighberhood==1))-1;

% if neighbours==1

% starters_list=[starters_list;[m,column]];

% end

% if neighbours>=3

% intersections=[intersections;[m,column]];

% end

% end

% end

%% Simdi alt sınır piksel kontrol edecek.

% for n=2:column-1

% if image(row,n)==1

% neighberhood=image((row-1):row,n-1:n+1);

64

Page 66: optical character recognition(matlab)with feature extraction

% neighbours=numel(find(neighberhood==1))-1;

% if neighbours==1

% starters_list=[starters_list;[row,n]];

% end

% if neighbours>=3

% intersections=[intersections;[row,n]];

% end

% end

% end

4.8 Isnotintersection

% This function tests whether pixel is in the given set

function result=isnotmember(pixel,set)

result=1;

for i=1:size(set,1)

if pixel==set(i,:)

result=0;

break;

end

end

4.9 isnotempty

function result=isnotempty(matrix)

if isempty(matrix)

result=0;

else

result=1;

end

65

Page 67: optical character recognition(matlab)with feature extraction

ÖZGEÇMIS

KISISEL BILGILER

Adı Soyadı :Mustafa Köstek

Uyrugu : T.C

Dogum Yeri ve Tarihi: Çayıralan 9/5/1993

Adres : bilecik

Telefon :

e-mail : [email protected]

EGITIM DURUMU

Lisans Ögrenimi : Bilecik Seyh Edebali Üniverstesi, Bilecik

Bitirme Yılı : 2015

Lise : Edremit Anadolu Lisesi

IS DENEYIMLERI

Yıl : 2013

Kurum : IZSU

Stajlar :

ILGI ALANLARI

YABANCI DILLER : Ingilizce,almanca

66