SlideShare a Scribd company logo
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
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
ÖZET
Projenin Amacı
Görüntü i¸sleme,makine ö˘grenmesi algoritmalarıyla ne derece ba¸sarılı oldu˘gunun yanı sıra
özellik çıkartma algoritmamızında geçerlili˘ginin ölçümünü yorumlayaca˘gız.Karakter ta-
nıma için se˘gmentli 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 oldu˘gu bilgisi eklenecektir.Her ka-
rakterin özellik vektörleri matris haline getirilip alan bilgisi eklendikten sonra weka ile
i¸slenerek hangi yöntemin daha yüksek ba¸sarı gösterdi˘gi tespit edilecektir.
Sonuçlar
Sonuç olarak hangi sınıflandırma yönteminin karakter tanımada daha yüksek ba¸sarı sa˘g-
ladı˘gı tespit edildi.
2
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
TE¸SEKKÜR
Bu projenin ba¸sından sonuna kadar hazırlanmasında eme˘gi bulunan ve beni bu konuya
yönlendiren saygıde˘ger hocam ve danı¸smanım Sayın Emre Dandıl’a tüm katkılarından ve
hiç eksiltmedi˘gi deste˘ginden dolayı te¸sekkür ederim.
Mustafa KÖSTEK
15 Ocak 2015
4
˙Içindekiler
ÖZET 2
ABSTRACT 3
TE¸SEKKÜR 4
S˙IMGE L˙ISTES˙I 7
¸SEK˙IL L˙ISTES˙I 8
TABLO L˙ISTES˙I 9
1 Giri¸s 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 i¸sleme . . . . . . . . . . . . . . . . . . . . . 13
2.2 Görüntü e¸sikleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3 Görüntü kesitleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4 ˙Iskeletleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5 Alt bölgeleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.6 Ba¸slangıçlar,kesi¸simler ve minör ba¸slangıç bölgeleri . . . . . . . . . . . . 14
2.6.1 Ba¸slangıçları . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6.2 Kesi¸simler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6.3 Minör ba¸slangıçları . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6.4 Karakter çapraz geçi¸sleri . . . . . . . . . . . . . . . . . . . . . . 16
2.7 Di˘gerlerinden ayıran çizgi sekmanları . . . . . . . . . . . . . . . . . . . 17
2.8 Özellik çıkartımı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5
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 A˘gları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.4 j48 a˘gaç . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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ÇM˙I¸S 66
6
Simge Listesi
vs. Vesaire
vb. Ve benzeri
7
¸Sekil Listesi
1 8 bitlik derinli˘ge sahip görüntünün e¸sikleme 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 sa˘ga ba¸slangıç,kesi¸sim ve minör ba¸slangıç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 olu¸sturuldu . . . . . . . . . . . . . . . . . . . . 27
8 Dörrt de˘gerlerinden olu¸san 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 a˘glarıyla cross edilmi¸s 1650x85 verinin karma¸sı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 Karma¸sıklı˘gı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
22 A˘gaçın veri kümemize ait genellemesi . . . . . . . . . . . . . . . . . . . 33
23 A˘gaç algoritmasının karma¸sıklık matrisi . . . . . . . . . . . . . . . . . . 34
24 Katmanlar ve döngü sayıları gösterilmi¸s . . . . . . . . . . . . . . . . . . 34
25 ÇKA’nın karma¸sıklık matrisi . . . . . . . . . . . . . . . . . . . . . . . . 34
26 Radyal tabanlı sinir a˘gıyla . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8
Tablo Listesi
1 Temsili bir örnek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2 Çaprazlık ili¸skileri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 Binari olarak gösterilmi¸s basit bir a . . . . . . . . . . . . . . . . . . . . . 22
4 Görüntünün öznitelik olarak bit do˘grultularının kodlanması . . . . . . . . 23
5 Soldan sa˘ga 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österilmi¸s bir g . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
11 Homojen bölünmü¸s bir g harfi ve piksel do˘grultuları belirtilmi¸s . . . . . . 25
12 Öznitelik vektörleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
13 Veri kümemizin çapraz geçerleme neticesinde sınıflandırma oranları . . . 36
9
1 Giri¸s
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 i¸slemidir. OCR metodolojileri kullanı-
larak makineler tarafından yazılmı¸s karakterler, elyazısı karakterler ve i¸saretler 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 do˘gru olarak tanınır ve kar¸sılı˘gında bir AS-
CII kod atanır. Örne˘gin; OCR ile bir çek üzerindeki resmi olmayan miktar alanı tanınıp,
MICR teknolojisi ile kodlanarak bir bankacılık sisteminde i¸slenebilir. Para alanı ise ge-
nelde elyazısı ile doldurulur ve bu karakterler sınırlı bir do˘grulukla tanınabilirler. Bir ADC
uygulamasında, ba¸sarılı bir tanımanın göstergesi %99.98 tanıma do˘gruluk derecesine ula-
¸sılmasıdır. ADC sürecinin ba¸slangıcında bu de˘ger genellikle daha dü¸süktür ve ardından
yapılan görüntü i¸sleme algoritmalarıyla yükseltilir.
Bazı durumlarda, full text search i¸slemi gerçekle¸stirmek 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 a˘glarına dayanan, matris e¸sleme ile gerçekle¸sen, öznitelik ana-
lizi ile çalı¸san ve e˘grileri izleyerek karakter tanıma i¸slemini gerçekle¸stiren metodolojiler
yer almaktadır. Karakterlerin daha büyük do˘grulukla tanınması için, okunan verilere ön
10
i¸sleme ve son i¸sleme 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 iyile¸stirilmesinde kullanılırlar. Karakterlerin büyük do˘g-
rulukla okunmasında, sisteme sunulan elektronik görüntünün mümkün oldu˘gunca keskin
(sharp), temiz ve düzgün olması oldukça büyük önem ta¸sımaktadır. Buna ra˘gmen, günlük
ya¸samda kullanılan dokümanlar ve formlar genellikle kirli, yıpranmı¸s ve katlanmı¸stırlar.
Tanıma i¸sleminden önce uygulanacak ön i¸sleme algoritmaları ile formun elektronik gö-
rüntüsü temizlenir ve karakterler mümkün oldu˘gunca iyile¸stirilir.
Karakterlerin tanınması sırasında, kullanıcı tarafından kabul edilmeyen ya da do˘gruluk
kriterini yakalayamayan karakterler reddedilmelidir (tanınmıyor olarak de˘gerlendirilme-
lidir). Örne˘gin do˘gruluk kriteri olarak % 99.98 kabul edilirse, do˘gru olmadı˘gı kabul edilen
birçok karakter reddedilecektir. E˘ger do˘gruluk kriteri daha a¸sa˘gı sınırlara çekilirse, tanı-
nan karakter sayısı artacaktır. Buna ra˘gmen % 99 oranındaki do˘gruluk kriterleri sıklıkla
kullanılmaktadır.
˙Içinde OCR tarafından okunamayan karakterler de bulunan reddedilen karakterler do˘gru-
lukla belirlenebilmelidir. Bu i¸slem genelde karakterin ekrana getirilerek el ile giri¸si yapıl-
ması süreci ile gerçekle¸stirilir.
Do˘grulu˘gu iyile¸stirmenin en son basama˘gı ise OCR ya da el ile giri¸si yapılmı¸s tüm karak-
terlerin i¸slenmesi, do˘grulu˘gunun istenilen kriteri yakaladı˘gının sınanması ya da kullanıcı
gereksinimini kar¸sılayıp kar¸sılamadı˘gının belirlenmesidir. Son i¸sleme i¸slemleri ile sözü
edilen son basamak gerçekle¸stirilebilir. Ticari olarak var olan algoritmalar ile bu adım
kolaylıkla uygulanabilir. Verinin arıtılması adı da verilen bu i¸slemler, karakter tanımadaki
do˘grulu˘gu 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 i¸sleme i¸slemleri ile ilgilenen ki¸siler, 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
Vergilendirme ve Tahsilat
Personel Kayıt Yönetimi
Nüfus Sayımı Formlarının ˙I¸slenmesi
Çek ˙I¸sleme
Ödeme ˙I¸sleme
Emekli Fonu ˙I¸sleme
Sipari¸s ˙I¸sleme
Tıbbi ˙Istekler
Günümüz ekonomisinde, elektronik doküman yönetimi sistemlerinin, hem i¸s 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 ya¸sadı˘gımız çalkantılı, dinamik ve maliyetlerin önem
ta¸sıdı˘gı günümüz çalı¸sma ortamlarında, OCR ile tanıma i¸slemleri görüntüleme teknolojisi
ile birle¸stirilerek 21. yüzyıla geçi¸ste kullanılan önemli bir basamaktır.
1.2 Projenin Amacı
Özellik çıkartım yöntemleri görüntü i¸slemenin temelini olu¸sturan bir alandır.Bu sayede
biz uzun uzadıya bit e¸slemesi yapmaya gerek kalmadan belirli büyüklükteki parçalara
ayırıp parçalardaki bitlerin ne ¸sekilde da˘gıldı˘gını o bölgeyi karakterize eden de˘ger kü-
melerinde tutarak vektörel de˘gerler elde edip bilgisayarın i¸slem yapması kolayla¸stıracak-
tır.Bizde görüntü i¸sleme yöntemi olarak bu yöntemden yararlanıp vektörleri makineye
ö˘gretip test ederek yöntem ba¸sarılarını ölçece˘giz[1].
12
2 Karakter tanıma
2.1 ˙Ikili görüntüye dönü¸stürme i¸sleme
Görüntü i¸sleme yöntemleri kullanılarak çe¸sitli i¸slemler neticesinde [2] belirli katsayılar
elde edece˘giz.Ama öncelikle 8 bit derinli˘gine sahip görüntümüzü gri sonra ise ikili for-
mata (1)’nolu fonksiyonla gerçekle¸stiriyoruz.
im2bw (1)
2.2 Görüntü e¸sikleme
Görüntü e¸sikleme yaparak görüntüdeki gürültü(noise) etkilerinden çikartmamizi sa˘glar
e¸sikleme yapilan bir görüntünün fonksiyonu a¸sa˘gıdaki gibi olmalıdır[3].Uygulama alan-
ları biyomedikal,co˘grafi vb.Örnek olarak ¸Sekil 1 gösterilmi¸stir.
¸Sekil 1: 8 bitlik derinli˘ge sahip görüntünün e¸sikleme sonra görüntü fonksiyonu
2.3 Görüntü kesitleme
Girilen karakterlerin sa˘gdan soldan a¸sa˘gıdan ve yukarıdan çerçeveleyerek görüntünün i¸s-
lem yapılmayacak bitlerini bir nevi süzgeçliyoruz.Bu sayede i¸slemlerimize dahil olmaya-
cak verilerden kurtulup görüntü indirgenmesini gerçekle¸stirdik.
2.4 ˙Iskeletleme
• Biyolojinin canlıların ¸sekil ve yapıları ile ilgilenen dalına morfoloji (biçim bilim)
adı verilmektedir.
13
• Matematiksel morfoloji ise temel küme i¸slemlerine 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 i¸slemede genellikle, morfolojik süzgeçleme, inceltme (thinning), budama (pru-
ning) gibi ön/son i¸slem olarak da sıkça kullanılırlar.
• Gri tonlu imgeler üzerinde de yapılabilece˘gi gibi, genellikle ikili imgeler üzerinde
yapılan i¸slemlerdir örnek olarak ¸sekil 2 ’de gösterilmi¸stir.
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 a¸samada ise artık ilgili resim çerçevelerini belirli büyüklükler halinde parçalara ayı-
rarak her resim için e¸sit 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 Ba¸slangıçlar,kesi¸simler ve minör ba¸slangıç 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ı ba¸slangıç pikselleri,kav¸saklar ve minör ba¸slan-
gıçları olarak tanımlanır.
14
2.6.1 Ba¸slangıçları
Karakter iskeletinde bir kom¸susu olan piksel bulunur.Karaktere girmeden önce, belirli bir
bölgedeki tüm ba¸slangıçlarda bulunan ve bir liste halinde tutulur.
2.6.2 Kesi¸simler
Kesi¸simlerin tanımlaması bazan daha da karma¸sıktır.Bir kesi¸sim olması için bir piksel
için gereklidir fakat bir kriterde birden fazla kom¸suya sahip olması istenilen durum de-
˘gildir.Do˘gru kom¸sular denilen yeni bir özellik, her piksel için tanımlanır.Belirli piksel
için de kom¸su sayısına dayanarak, bir kesi¸sme ya da kesi¸sme olmayan olarak sınıflandı-
rılır.Bunun için do˘grudan piksel ve çapraz piksel olmak üzere kom¸su pikseller iki kate-
goriye ayrılır.Do˘grudan pikselin yatay ve dikey yönde kesi¸sim pikselinin bölgede tüm bu
piksellerle ba˘glantısı vardır.Çapraz piksel ilgili piksele bir çapraz yönde oldu˘gu bölgede
olan pikseldir.¸Simdi göz önünde bulunan pikselde do˘gru kom¸sularının sayısını bulmak
için, o karakter iskeletindeki sahip kom¸sularının sayısına ba˘glı olarak sınıflandırılacaktır.
Ele alınan piksellerde ¸su ¸sekilde sınıflandırılır
• 3 kom¸su: Direkt piksellerin hepsi bir çapraz piksele herhangi birisine biti¸sik de˘gilse,
o zaman, söz konusu pikselin kom¸su piksellerinin e˘ger hiçbirinin kesi¸sti˘gi ardından
birbirine kom¸su olan ba¸ska piksel varsa, bir kesi¸sme olamaz.
• 4 kom¸sular: Her direk pikselin bir kom¸su çapraz piksel veya tersi varsa, ardından
söz konusu pikselin bir kesi¸sti˘gi olarak kabul edilemez.
• 5 veya kom¸sular: Göz önüne alındı˘gında pikselin be¸s veya daha fazla kom¸suları
varsa, o daima bir kesi¸sme olarak kabul edilir.
Tüm kesi¸smeler görüntüde tanımlandıktan sonra, daha sonra bir liste halinde doldurulur.
2.6.3 Minör ba¸slangıçları
Minör ba¸slangıçlar karakter iskelet birlikte çapraz geçi¸si süresince birlikte bulunur.Göz
önüne alındı˘gında pikselin ikiden fazla kom¸suları ne zaman olu¸sturulur.Olu¸sabilir iki ko-
¸sul vardır
15
• Kesi¸sme:Geçerli bir kesi¸sme oldu˘gunu ne zaman anlarız.Mevcut hat segment sona
erecek ve tüm ziyaret edilmemi¸s kom¸suları minör ba¸slangıçlar listesinde dolduru-
lacaktır.
• Göz önüne alındı˘gında pikselin ikiden fazla kom¸suları ama yine de onun olmayan
bir kesi¸sme ile gereken durumlar olu¸sabilir.Bu gibi durumlarda, çapraz geçi¸si mev-
cut yönü önceki pikselin konumu kullanarak bulunur.Bölgesinde yer gezilmemi¸s
piksellerinin hiçbir bu yönde ise, o zaman bir sonraki piksel olarak dü¸sünülmü¸s ve
bütün di˘ger pikselleri, minör ba¸slangıçlar listesinde doldurulur.Piksellerin hiçbiri
çapraz geçi¸si geçerli yönünde de˘gilse, o zaman geçerli segment bitirilir ve bölge-
sinde yer alan bütün pikselleri minör ba¸slangıçlar listesinde doldurulur.Genel olarak
gösterimi ¸sekil 3’daki gibidir.
¸Sekil 3: Sırasıyla görüntüde soldan sa˘ga ba¸slangıç,kesi¸sim ve minör ba¸slangıçları
2.6.4 Karakter çapraz geçi¸sleri
Bölgeleme resmin üzerine yapıldıktan sonra karakter çapraz geçi¸si ba¸slar.Her bir bölge
ayrı ayrı hat kesimleri çıkarma i¸slemine tabi tutulmaktadır.Bu amaçla, ilk olarak bölgede
ba¸slangıçlar ve kesi¸smeler bir listede doldurulur sonra bölgeye dahil edilir.Minor ba¸s-
langıçlar çapraz geçi¸si süresince birlikte bulunur.Algoritma ba¸slangıçlar listesini dikkate
alarak ba¸slar.Tüm ba¸slangıçlar i¸slenir sonra, bu ¸sekilde elde edilen minör ba¸slangıçlar i¸s-
lenir.Bu i¸slem 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 dola¸sıldıktan sonra, algoritma du-
rur. Bir örnek A¸sa˘gı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
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
1 0 0 0 1
Tablo 1: Temsili bir örnek
kuralı vs. varsayılır.Bu görüntüdeki Ba¸slangıçlar listesi [(1,1), (1,5), (5,1), (5,5)] olacak-
tır.Kesi¸sme sadece piksel (3,3) ihtiva edecektir.¸Simdi algoritma ilk ba¸slangıç örne˘gin (1,1)
i¸sleyerek ba¸slar.Bir sonraki piksel (2,2) ve, bundan sonra da, (3,3) ’dir.Piksel (3,3) bir ke-
si¸sim oldu˘gunu, bu nedenle algoritma o andaki bölümünü durur ve minör ba¸slatıcı tüm
kom¸sularını tanımlar.Yani minör ba¸slatıcı listesi [, (2,4) (4,2) (4,4)] ihtiva edecektir.¸simdi
olu¸san çizgi segmenti [, (2,2) (1,1) (3,3)] içerecektir.¸Simdi bir sonraki ba¸slangıç örne-
˘gin (1,5) olarak kabul edilir.Sonraki piksel (2,4) ’dir. Algoritma akımı durdurur, böylece
piksel (2,4) küçük bir ba¸slangıç oldu˘gunu herhangi olup olmadı˘gını burada bölümlü ve
minör ba¸slatıcı gibi, (2,4), tüm gezilmemi¸s kom¸sularını tanımlar. O ziyaret edilen andan
ba¸slayarak aynı zamanda (2,4), minör ba¸slatıcı listeden kaldırılır.¸Simdi bir sonraki ba¸s-
langıç (5,1) olarak kabul edilir ve bu ¸sekilde olu¸sturulan bir sonraki çizgi parçası [(5,1),
(4,2)] olacaktır.Pixel (4,2) ba¸slayanlar 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 Di˘gerlerinden ayıran çizgi sekmanları
Çizgi parçası görüntüden ekstre edildikten sonra, bunlar ¸su do˘gru tiplerinin herhangi bi-
rine sınıflandırılabilmesi gerekir.
• Yatay çizgi
• Dikey çizgi
• Sa˘g ç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
4 5 6
3 C 7
2 1 8
Tablo 2: Çaprazlık ili¸skileri
göre Tablo 2’daki gibi isimlendirme kuralı olursa bir kom¸su piksel konumunu tanımlana-
bilir.
Verilen, matris içinde "C" merkez pikseli temsil eder.Kom¸su pikseller merkez pikselin al-
tındaki pikselden ba¸slayarak saat yönünde numaralandırılır.Bir çizgi diliminden yön vek-
törü ayıklamak için, algoritma onlar çizgi segmentini olu¸sturan sırayla çizgi segmentlerde
tüm pikselleri dola¸sır.Örne˘gin, ç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 giri¸s 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 giri¸si de 8 olacaktır.Bu ¸sekilde gidi¸s, 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 ra˘gmen, 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 örne˘gin, ’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 a¸sa˘gıdaki kurallara tabi tutulur.
• Önceki yön 6 veya 2 oldu VE sonraki yönü 8 veya 4 ya da.
18
• Önceki yön 8 veya 4 VE sonraki yönü 6 veya 2 ya da.
• Bir çizgi parçası do˘grultusu yönü ya da en fazla üç tip de˘gi¸stirildi.
Resimde i¸saretlenmi¸s çizgi segmenti yön kuralları son açıklanan uygulamadan önce elde
edilmi¸stir.Bu çizgi parçası aslında iki farklı çizgi parçası olu¸sturmasına ra˘gmen, 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 a¸sa˘gıdaki kurallar her yön vektörü sınıflandırmak için tanımlanmı¸s-
tır.
• Olu¸san maksimum yönü tip 2 veya 6 ise, çizgi tipi do˘gru sa˘g çaprazdır
• Olu¸san maksimum yön tipi 4 ya da 8 ise, çizgi tipi sol çapraz bırakılır
• Olu¸san maksimum yönü tip 1 veya 5 ise, ince çizgi tipi dikey
• olu¸sumlu yön tipi 3 veya 7 ise, çizgi tipi yatay oldu˘gu kansına varılır
˙Iki çizgi türü aynı sayıda olu¸sursa 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 olu¸s-
turulmu¸stur. Her bölge kendisine kar¸sılık gelen bir özellik vektörü tutar.Kullanılan algo-
ritma 9 tane de˘ger üretmektedir her bir bölge için..
Bunlar
• Yatay çizgilerin sayısı
• Tüm yatay çizgilerin normalize uzunlu˘gu
• Dikey çizgilerin sayısı
• Tüm dikey çizgilerin normalize uzunlu˘gu
• Sa˘g çapraz çizgiler sayısı
19
• Tüm sa˘g çapraz çizgiler normalize uzunlu˘gu
• Sol çapraz çizgiler sayısı
• Tüm sol çapraz çizgiler normalize uzunlukları
• iskelet normalize Alanı.
• Herhangi bir özel hat türü sayısı
a¸sa˘gıdaki yöntemi de˘geriyle standardize edilir.
deger = 1 − ((cizgiSayisi/10) ∗ 2)
Herhangi bir özel hat türü normalle¸stirilmi¸s uzunlu˘gu a¸sa˘gıdaki yöntem kullanılarak bu-
lunur.
uzunluk = (tumPikseldekiCizgiler)/(bolgedekiPikseller)
Ö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 eldelenmi¸stir.Yine orijinal görüntü yatay do˘grultuda
bölünmesi ile 3 bölgeye ayrılmı¸stır.Sonra özellikleri gibi her bölge için çıkarıldı.Bölgeli
özelli˘gi çıkarımı yapıldıktan sonra, bazı özellikler yani bölgesel özelliklerine göre, tüm
görüntü için ekstre edilmi¸stir.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.Örne˘gin 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
2.9 Fonksiyon ve altfonksiyonlar
Programın anla¸sılabilirli˘gi ve kod kısımlarının tekrar tekrar yazılmasınında önüne ge-
çilebilmesi için i¸slevler ¸seklinde olu¸sturulmu¸stur. ¸sekil 5’de fonksiyonlar hiyerar¸sik bir
¸sekilde gösterilmi¸stir.
¸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 de˘ger döndürür
prep image görüntüdeki gürültüleri gidermeye yöneliktir
line segmenter Çizgilerin kom¸suluklarına,kesi¸simlerine ve minör durumları silme ekleme i¸slemleri
yapılır
finddirection Aldı˘gı iki de˘gere göre yönünü belirleyen fonksiyondur
isnotempty Parametre olarak aldı˘gı matris bo¸ssa sıfır de˘gilse bir de˘geri cevaplar
del pixel Piksel silme metodu
21
isnotmember Üyesi de˘gil mi?
findneighbours Piksellerin kom¸suluklarını arayan fonksiyondur
ismymember üyesi mi?
starter intersection Kesi¸sim bölgesi ba¸slangıcı mı?
2.10 Örnekler
Buraya kadar sürekli olarak teoriden bahsedildi,¸simdi birkaç örnekle kavrayalım[5].Öncelikle
görüntü gray seviye,e¸siklenir ve lojik 1 ve 0’a dönü¸stürülür.Tablo 3 görüldü˘gü gibi.
1
1 1
1 1
1 1
1 1 1 1 1 1 1 1
1 1 1
1 1
1
Tablo 3: Binari olarak gösterilmi¸s basit bir a
˙I¸ste 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 a¸sa˘gıdan ba¸slanarak önündeki yada ziyaret edece˘gi piksele göre do˘g-
rultu alıyor. Bunlar;
Yatayı,
Dikeyi,
Sa˘g çapraz,
Sol çapraz
kesi¸sim olarak ifade edilir.Bu a¸sama sonucunda e¸sit 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 ba˘gımsız dü¸sünülerek bölgesel piksel da˘gılına göre yorumlanır.Tablo 5 örnek
olarak gösterilebilir.˙Ikili a’nın niteliksel gösterimi Tablo 4 gibidir.
22
4
3 4
3 4
2 2
5 1 1 1 1 5
3 4
3 4
4
Tablo 4: Görüntünün öznitelik olarak bit do˘grultularının kodlanması
1 ... ...
1 4 3
1 3 3
1 2 3
1 4 3
1 3 3
1 3 3
1 2 3
Tablo 5: Soldan sa˘ga lokalde çizgi tipi tayini
Bu a¸samadan sonra ise artık 9’luk vektörlere sıra geldi niceliklere adet 1−(2∗cizgiTipiAdet)/10
,ile uzunluk ise cizgiTipUzunluk/BolgedekiToplamCizgiAlani ile dokuzuncu de˘gerse
bolgedekiToplamCizgiAlani/bolgedekiToplamAlan olarak ifade edilmi¸stir.
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.167
1 0 1 0 1 0 0.8 0.67 0.25
-1 -1 -1 -1 -1 -1 -1 -1 -1
1 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 -1
1 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 sa˘g
a¸sa˘gı do˘gru takip edilerek de˘gerler yazılmı¸stır.Yani herbir satır bir bölgeye denk gelmek-
tedir.Ayrıca -1 de˘gerleri o bölgede hiç olmayan[6],bir piksel yada birbirinden ba˘gımsız
iki pikseli ifade eden bölgelerde özelik olarak 9 tane -1 basılır.
23
1 0 0 0 0 1
1 0 0 0 1 0
1 0 0 1 0 0
1 0 1 0 0 0
1 1 0 0 0 0
1 0 1 0 0 0
1 0 0 1 0 0
1 0 0 0 1 0
1 0 0 0 0 1
1 0 0 0 0 0
1 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
i¸slemi,
• morfolojik i¸slem yardımıyla görüntüyü erozyona u˘gratarak iskeleti [7] çıkartılıyor
böylelikle pikseller arası yön tayini karı¸sıklıktan kurtulmu¸s olunuyor.
2 3
2 3
2 3
2 3
5 5
2 4
2 4
2 4
2 4
2 2
2
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
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.33
1 0 1 0 0.8 0.67 1 0 0.25
-1 -1 -1 -1 -1 -1 -1 -1 -1
1 0 0.8 0.8 1 0 1 0 0.416
1 0 1 0 1 0 0.8 0.67 0.25
-1 -1 -1 -1 -1 -1 -1 -1 -1
1 0 0.8 0.67 1 0 1 0 0.25
-1 -1 -1 -1 -1 -1 -1 -1 -1
1 0 0.8 0.5 1 0 1 0 0.167
Tablo 9: Öznitelik vektörleri
0 0 1 1 1 1 0
0 1 0 0 0 0 0
1 1 0 0 0 0 0
1 0 0 1 1 1 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
0 1 1 0 0 1 0
0 0 1 1 1 0 0
Tablo 10: ikili gösterilmi¸s bir g
Yukarıda verilen Tablo 10 niteliksel gösterimi Tablo 11 ve öznitelikleri Tablo 12 görül-
mektedir.
3 1 1 1
3
2
2 1 1 1
2 4
4 2
1 4 3
1 3
Tablo 11: Homojen bölünmü¸s bir g harfi ve piksel do˘grultuları belirtilmi¸s
25
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 -1
1 0 0.8 0.67 1 0 1 0 0.333
0.8 0.5 1 0 1 0 1 0 0.22
1 0 1 0 1 0 0.8 0.67 0.33
-1 -1 -1 -1 -1 -1 -1 -1 -1
1 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
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çekle¸stirece˘gimiz sınıflandırma alan bilgisi girip
e˘gitme i¸slemi gerçekle¸stirdi˘gimizden destekli kapsamına girer.Çapraz geçerleme yapa-
rak yani 10 parçaya ayırıp 1’ini hariç tutup 9’uyla e˘gitip hariç tutu˘gumuzla e˘gitilme du-
rumu,bunu on defa tekrarlar ba¸sarı ö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 olu¸sturuldu
¸Sekil 8: Dörrt de˘gerlerinden olu¸san kalibrasyonlar
Sonra ise (3) parametre olarak görüntüyü veriyoruz ve bize 85 alandan olu¸san vektör
çıktılayacak.
vektor = feature_extractor(goruntu); (3)
27
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 ettirece˘gi öngörülmektedir.Weka kul-
lanımı basit ve pratiktir.Piyasada emsali programlara göre hatırı sayılır bir popülerli˘ge
sahiptir.
2.11.3 Verilerin arff formatına uydurulması
[9] Elli¸ser 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 verdi˘gimiz görüntüden 85 alanlı
özellik vektörü elde edece˘giz ¸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 giri¸s 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
3 Deneysel Çalı¸smalar
3.1 Verilerin analizinin gerçeklenmesi
Artık veri setimizin olu¸sturuldu˘gunu varsayarak programda e˘gitim [10] i¸slemine basla-
yabiliriz.Programa genel bir bakı¸s yapacak olursak ¸Sekil 12’te oldu˘gu 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 a¸samadan sonra artık hangi sınıflandırma yöntemini belirleyece˘gimizi ¸Sekil
13 oldu˘gu gibi seçiyoruz.Deneme amaçlı olarak sonucunu inceleyece˘giz.
¸Sekil 13: Sınıflandırma yöntemi
Sonra ise bu butonun altında olan e˘gitim ve test kriterlerine dokunmadan start butonuna
basarak sınıflandırma i¸slemini ba¸slatıyoruz.Sonuçta confusion matrisimiz a¸sa˘gıdaki ¸Sekil
14 çıktı verdi.
29
¸Sekil 14: Bayes a˘glarıyla cross edilmi¸s 1650x85 verinin karma¸sıklık matrisi
3.2 Alanların minimizasyonu
Özelik çıkartımı yapılırken ço˘gu 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 çoklu˘guna göre de˘gi¸sebilir[11] örne˘gin biz iki adet sınıfı sınıflandı-
raca˘gız algoritmamızın olu¸sturaca˘gı sınır yalnızca bu iki veri için geçerlidir üçüncü bir
veri için de˘gildir.Kısacası dura˘gan alanları filtreleme yaparak program aracılı˘gıyla alan
sayısını üçte birine indirece˘giz.Öncelikle alanların sınıflandırmayı yüzde kaç etkiledi˘gine
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 de˘gil.
30
¸Sekil 16: Hangi alan sınıflandırmayı ne kadar etkiliyor?
Bu bilgiyi göz önüne alarak ön i¸sleme ekranına giderek gereksiz alanları filtrelemek ama-
cıyla ilgili algoritmayı seçip ¸Sekil 17 oldu˘gu gibi onaylıyoruz.
¸Sekil 17: Filtreleme tipi seçme
¸Sekil 18 de scroll bardan anla¸sılaca˘gı üzere 85’tane olan alan 27 ye kadar dü¸smü¸stür.Böylelikle
sınıflandırma i¸sleminde gereksiz i¸slemler devre dı¸sı bırakılmı¸stır.
31
¸Sekil 18: Görüldü˘gü gibi gözle görülür bir azalma söz konusu
3.3 Bayes A˘gları
¸Sekil 19: Bayes sınıflandırıcısı
¸Sekil 20: Dikey olarak belirli alan kısıtları
32
Gayet ba¸sarılı bir sınıflandırma yöntemi bu ba¸sarısını matematikteki olasılık tabanlı he-
saplamalarından alır.Geli¸smi¸s bayes olarakta nitelendirilir.¸Sekil 19 oldu˘gu gibi konfigü-
rasyon yapıp çapraz geçerleme yaptı˘gımızda ¸Sekil 20’de sonuçları üzerine sa˘g tıklayarak
vizualize graph diyerek yapıyı yorumlayabiliriz.Sonuçlar ¸Sekil 21 oldu˘gu gibidir.
¸Sekil 21: Bayes Karma¸sıklı˘gı
3.4 j48 a˘gaç
¸Sekil 22: A˘gaçın veri kümemize ait genellemesi
Gayet anla¸sılabilir net ve keskin hatlar ile sınırlarını belirleyen a˘gaç algoritması bize es-
nek bir ¸sekilde veriyi yorumlama imkanı sunuyor.Veri kümesine ait a˘gaç sonuçların üze-
rine gelip sa˘g tıklayıp visualize tree seçene˘giyle ¸Sekil 22 deki gibi görüntülenebilir sonuç
matrisi 23 olarak çıkacaktır.
33
¸Sekil 23: A˘gaç algoritmasının karma¸sıklık matrisi
3.5 Çok katmanlı algılayıcılar
¸Sekil 24: Katmanlar ve döngü sayıları gösterilmi¸s
¸Sekil 25: ÇKA’nın karma¸sıklık matrisi
Çok katmanlı algılayıcılar yapay sinir a˘gları kapsamındadır.Gayet ba¸sarılı olmasına kar-
¸sın yüksek de˘gerde döngüler hatanın çok küçük olmasından dolayı varyansa(ezber) gi-
34
rer.Ço˘gu mühendislik ve bilim dallarında oldukça kullanılan bir yöntemdir.¸Sekil 24’de ha-
tayı kontrol edebiliriz istedi˘gimiz zaman e˘gitimi sonlandırabilme gibi yetkimiz var.Sonuçları
¸Sekil 25 gösterilmektedir.Gayet ba¸sarılı bir sınıflandırma yapmı¸stır.Yine bir yapay sinir
a˘gları kapsamında e¸sikleme radial fonksiyonu kulanan model bu model yo˘gun e˘gitim ve-
risinde çok iyi sınırlar çıkarmaktadır.Çıktılar ¸Sekil 26 gibidir.
¸Sekil 26: Radyal tabanlı sinir a˘gıyla
35
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 ba¸sarı oranları Tablo 13 oldu˘gu gibidir.
RBF MLA BayesNet j48 BP SVM
95.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 ba¸sarısına sa-
hiptir.
36
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-ortamnd
[11] http://en.wikipedia.org/wiki/Category:Classification_
algorithms
[12] http://bilgisayarkavramlari.sadievrenseker.com/2009/06/
01/weka/
37
EKLER
4.1 feature extractor
%Bu fonksiyon giri¸s görüntüsünün özniteliklerini çıkarır
function [features]=feature_extractor(image);
% Bu fonksiyon bölgeleri giri¸s görüntüsünü ve her bölge için özellik
%% görüntü ön i¸sleme
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 i¸slem olarak iskelet çı
%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 zo
% Önce biz bu görüntü en az 9 satır ve minimum 9 sütun olu¸sur sa˘glam
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
image=[zeros((add_rows-1)/2,column);image;zeros((add_rows+1)/2,colum
end
%bu satırların hepsi üst ve alt e¸sit olarak güncelle¸stirilmesi gerek
%e¸sit olması amacıyla e¸sit 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)/
end
column=size(image,2); %güncellenmi¸s colon sayısıı
n_rows=ceil(row/3)*3-row; % sıfırlardan olu¸san satır yok edilmeyecek
n_columns=ceil(column/3)*3-column; % sıfırlardan olu¸san sütun yok ed
% Satır = 4, yani sıfırlardan olu¸san 2 satır eklenmesi gerekti˘gini v
% Olan 6 3 yandaki ila 4 arası yakın katıdır. Satırlar görüntüye ekl
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 e¸sit bölünmesi amacıyla a¸sa˘gıdaki operasyonlar uygulanmaya
%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 g
zone_height=row/3;
zone_width=column/3;
39
%Her bölgedeki satır sayısı 12 ise partlamada 3’erli gidecektir
%Ancak sütunları 9,3 e¸sit parça 3 olmalıdır oysa matris 12x3 ?.
%Bu de˘gi¸skenler bölge yüksekli˘gi ve geni¸sli˘gi 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_wid
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ü
euler=bweuler(image);
features=[zone11_features;zone12_features;zone13_features;zone21_fea
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
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 CHAN
% ¸Simdi bir önceki geometrik ve bu local özellikleri birle¸stirilmi¸s
%features=[features;regional_features];
4.2 Line Classifier
% Bu i¸slev, belirli bir giri¸se göre bana olumsuz veya çizgi segmentl
function [featurevector]=lineclassifier(image)
% görüntü al
% Çıkı¸s olan unsurları 9 eleman özelli˘gi vektörü içerecektir.
% 1.Yatay çizgilerin sayısı, 2.Yatay çizgilerin toplam uzunlu˘gu,
%3. Sa˘g çapraz çizgiler sayısı,
41
% 4. Sa˘g çapraz çizgiler toplam uzunlu˘gu,
% 5. Dikey çizgilerin sayısı, 6. Dikey çizgilerin toplam uzunlu˘gu,
%Sol çapraz çizgilerin sayısı, sol çapraz çizgiler toplam uzunlu˘gu v
%% E˘ger yön türleri yineleyebilirsiniz durumu olarak kabul bulunmamı
down=1; %okunabilirli˘gi artırmak için çalı¸sıyor, bu # ¸seyler
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 kar¸sılık gelen yön vektörü içerir
%% Her segmente kar¸sı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
error(’Lineclassifier.m içinde sadece bir piksel ile bir segmenti va
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!!!!!!!!!
% A¸sa˘gıdaki durumlardan herhangi B˙IR˙I memnun IF, yeni bir çizgi ba¸sl
% 1. Bir önceki yön sonraki yön a¸sa˘gı-sa˘ga veya yukarı-sol OR sa˘ga-y
% 2. Bir önceki yön a¸sa˘gı do˘gru veya yukarı-sol VE sonraki yönü sa˘ga
% 3. Bir çizgi parçasıyla yönünü yönü ya da üçten fazla tip de˘gi¸stir
% 4. bir önceki yön Çe¸sidi uzunlu˘gu üç piksel daha büyüktür.
%Yukarıdaki kurallar, her segmente kar¸sılık gelen tüm yön vektörü uy
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ı¸s
j=1;
currentline=[];
while j<numel(currentdir_segment)
43
previousdirection=currentdir_segment(j);
nextdirection=currentdir_segment(j+1);
rule_one=(previousdirection==upright | previousdirection==downleft)
rule_two=(previousdirection==downright | previousdirection==upleft)
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
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 zam
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ü
%error(’dostum, senin çizgi parçası 3 piksel azdır.’);
currentline=currentdir_segment;
Truelines{N}=currentline;
N=N+1;
end
end
44
%% Çizgi türü algılama
% Burada çizginin türünü bulmak için çalı¸saca˘gız.
N_Truelines=numel(Truelines);
Normallines={}; %normalize hatları tutmak için ayarlayın.
N=1;
% çizgi tipi normalle¸stirme.
for i=1:N_Truelines
currentmaxtype=0;
currentmaxoccurence=0;
currentline=Truelines{i};
currentlength=numel(currentline);
occurencematrix=[];
for j=1:8 %Kez Dosya Adedi maksimum olu¸san numarasını bulmak
occurencematrix=[occurencematrix,numel(find(currentline==j))];
end
currentmaxoccurence=max(occurencematrix); % olayda max bulmak
current_max_direction=find(currentmaxoccurence==occurencematrix); %%
repetition=numel(current_max_direction)-1; %% ˙Iki istikametin aynı
if repetition~=0
% display(’dostum, iki kez yol tarifi olumsuz sonuc verdi’);
end
Normallines{N}=current_max_direction(1)*ones(1,currentlength);% duru
% ilk dizin alınlamlı olu¸stu.
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; % sa˘g çapraz çizgi sayısı.
N_leftslant=0; %sol çapaz çizgi sayısı.
L_horizontal=0; % yatayların toplam uzunlu˘gu.
45
L_vertical=0; % dikeylerin toplam uzunlu˘gu.
L_rightslant=0; % sa˘g ç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 de˘geri 1-((no.of lines)/10)*2 olarak no
V_horizontal=1-((N_horizontal)/10)*2;
V_vertical= 1-((N_vertical)/10)*2;
V_rightslant=1-((N_rightslant)/10)*2;
46
V_leftslant=1-((N_leftslant)/10)*2;
% uzunluk formülü uzunlu˘gu = (belirli bir yönde toplam sayisi piksel
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 Bel
filled_area=skel_size/numel(image);
featurevector=[V_horizontal,norm_horizontal,V_vertical,norm_vertical
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ında
%’parçalı el yazısı karakterlerin tanınması için yeni bir özelli˘gi ç
%% özellikleri giri¸s
%görüntüde herhangi Ba¸slatıcı ¸su anda ise, eklenecek, kod i¸se yarama
%% I¸slevi burada ba¸slar.
function [segments]=linesegmenter(image)
% görseli segmentlere önce, bu iskeletize olması ve sahte piksel çık
[starters,intersections]=starter_intersection(image);
% Ba¸slatıcı ve kesi¸smeler satır sütun koordinatlarını içerir.
down=1; %Bu # ¸seyleri tanımlamak unutmayın, okunabilirli˘gi a
47
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 gidi
image=[image,zeros(size(image,1),1)]; %Sa˘g 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ı de˘gi¸sti, ben ba¸slayanlar ve ayn
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 kom¸suluk 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
%for i=1:size(starters_queue,1)
skel_size=numel(find(image==1)); % Biri de˘gere sahip piksel bir olum
%% Bu, tüm ba¸slayanlar kadar çalı¸smaya devam ediyorum, ana döngü.
% Ele alınan ya da minör ba¸slayanlar ele alınmaktadır da tüm iskelet
while(isnotempty(starters_queue) | isnotempty(minor_starters_queue))
currentsegment=[];% Mevcut segmentler piksel listesini içermesi gere
%% 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 ba¸slatma parçalardır
%findneighbours() mevcut pikselin kom¸suları bulmak için bir i¸slevdir
else
starters_queue=del_pixel(starters_queue(1,:),starters_queue);
continue; %ba¸slangıç ile ... ele alınmı¸s ise orada kalan kod çalı¸stı
% böylece kontrol süre geçmesi gerekir.
end
%% Bu kod kısmı ÇALI¸SIYOR (!!!) minör ba¸slayanlar ile u˘gra¸smak.
elseif (isempty(starters_queue) & isnotempty(minor_starters_queue))
currentminor=minor_starters_queue(1,:);
currentsegment=[];
if ismymember(currentminor,visited) % iskeletize ’A’ ikinci kesi¸sme
minor_starters_queue=del_pixel(currentminor,minor_starters_queue);
continue;
end
visited=[visited;currentminor]; % ziyaret edilen kümesine currentmin
49
neighbours=findneighbours(image,currentminor); % Mevcut minör kom¸sul
temp=1;
while temp<=size(neighbours,1) %Mevcut Minors kom¸sular listesinden z
current_neighbour=neighbours(temp,:);
if (ismymember(current_neighbour,visited) | ismymember(current_neigh
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(’arkada¸s, geçerli minör ikiden fazla Gezilmemi¸s kom¸suları 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
%% Bu kod satırı currentpixel i¸sler.
while(isnotmember(currentpixel,visited))
%% Bu hücrenin noktası mevcut piksel ne ise bir sonraki piksel bulma
% kesi¸sim ne Starter ne minör.
if(isnotmember(currentpixel,intersections) & isnotmember(currentpixe
% fonksiyonel geçerli piksel kesi¸simleri ise, ayrıca mevcut piksel
neighbours=findneighbours(image,currentpixel);
visited=[visited;currentpixel];
%% kom¸suları ziyaret piksel yanı sıra ba¸slatıcı silme ve bir sonraki
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 kom¸suları listesindeki tüm minör starterları t
if size(neighbours,1)>2 %kom¸sularından biri minör Starter ise bu dur
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
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 edilmi¸s kom¸suların kaldır
%bu nedenle bu iki adet ziyaret edilmemi¸s bulunmaktadır.Burada bunla
first_neighbour=neighbours(1,:);
second_neighbour=neighbours(2,:);
% kom¸sularının biri oldu˘gu bir durum olu¸sabilir.
% kesi¸sim öyleyse bu piksel kadar çoksa, burada segmenti durdurmak v
%piksel dü¸sünelim.else continue
if ismymember(first_neighbour,intersections)|ismymember(second_neigh
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
end
minor_starters_queue=[minor_starters_queue;first_neighbour;second_ne
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 kom¸sularının oldu˘gundan bunlardan biri bir kesi¸sim olac
%Bu kesi¸sim bulmak ve burada parçayı sonlandırmak zorunda.
%küçük bir Starter var hiçbiri olmazsa, uç noktası olarak dü¸sünmek y
%display(’hi, ikiden fazla Gezilmemi¸s kom¸suları 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
end
end
% Bundan sonra döngü kesi¸sti˘gi hariç tüm pikseller önemsenmemi¸s olac
%bu nedenle, hepsi minor_starters_queue eklenmelidir.
%o zaman sadece bir tanesi kabul edilecektir kom¸suları ikiden fazla
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 kesi¸sti˘gi oldu˘gu durumla ba
elseif (ismymember(currentpixel,intersections)) %ikiden fazla kom¸su
visited=[visited;currentpixel];
neighbours=findneighbours(image,currentpixel);
unvisited_neighbours=[]; %Gezilmemi¸s kom¸suları 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çi¸si yönü korunmu¸s olup olma
for i=1:size(unvisited_neighbours,1)
current_neighbour=unvisited_neighbours(i,:);
current_neighbour_direction=finddirection(currentpixel,current_neigh
if current_neighbour_direction==previousdirection
direction_flag=1;
currentsegment=[currentsegment;currentpixel];
previouspixel=currentpixel;
54
currentpixel=current_neighbour;
unvisited_neighbours=del_pixel(current_neighbour,unvisited_neighbour
minor_starters_queue=[minor_starters_queue;unvisited_neighbours];
unvisited_neighbours=[];
break;
end
% kom¸su piksellerin hiçbiri geçerli çapraz geçi¸si yönünde nerede old
%Daha sonra bunların her minor_starters_queue eklenmelidir.
%Örnek için alt bölümüne bakın.
%sonu burada gerçekle¸sirse, hepsini st ilave edilmelidir,
%pikselin bir döngü ba¸ska bundan sonra, mevcut çapraz geçi¸si yönünde
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 oldu˘gunun anla¸sı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
segments{N}=currentsegment;
N=N+1;
end
end
end
% ¸Simdi tüm segmentler nedeniyle sıfır sınırına ekleyerek orijinal k
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çi¸si (1,4) ba¸slayacak ve (1,2) ula¸stı˘gında, z
% cpr=currentpixel(1);cpc=currentpixel(2);
%cpr geçerli piksel satır ve oldu˘gunu.
% tbm geçerli piksel sütundur.
% [1 0 1
% 0 1 0
% 0 1 0]
%ba¸slangıç piksel ne olursa olsun, bu durumda, merkez pikselde, çapr
4.4 find neighbours
%Bu fonksiyon, bir görüntü alacak ve merkez pikselin koordinatları v
% Bu 1 olarak de˘ger merkezi pikselin tüm kom¸sularının koordinatların
function [neighbours]=findneighbours(image,coords)
imwindow=image((coords(1)-1):(coords(1)+1),(coords(2)-1):(coords(2)+
neighbours=[];
imwindow(2,2)=0; %% Bunun nedeni açıktır !!!!!!!!! olmalı
indexes=find(imwindow==1);
for i=1:length(indexes)
currentindex=indexes(i);
56
row=rem(currentindex,3);
if(row==0)
row=3; %rem (currentindex, 3) sıfır olacaktır e˘ger onun 3. satırda.
end
column=ceil(currentindex/3);
neighbours=[neighbours;[row,column]];
end
neighbours(:,1)=coords(1)+(neighbours(:,1)-2); % merkez piksel ’kom¸s
neighbours(:,2)=coords(2)+(neighbours(:,2)-2);
4.5 find direction
%Fonksiyon find_direction argümanlar ilk merkez piksel olarak ilk pi
%iki piksel koordinatlarını alır.Numaralandırma saat yönünün oldu˘gun
%Merkez pikselin altına piksel 1 olarak numaralandırılmı¸s ve kalan s
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
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 giri¸si her ba¸slatıcı ve kesi¸smeler vererek bana yardım et
% Bu geçerli görüntüdeki tüm Starter noktalarını bulur kod (çok kötü
%Sorun kontrolleri altındaki kodu verilen görüntüdeki tüm pikselleri
%bir Starter noktası, olup olmadı˘gını kontrol etmek olması. huffffff
% kesi¸smeler 3 ya da daha fazla kom¸suları olan piksellerdir.
% Bu kodda eser bir yazıda Blumenstein, Verma ve H.Basli tarafından
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 gidiy
image=[image,zeros(size(image,1),1)]; % Sa˘g 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
% 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
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==currentd
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
if(rem(currentdirection,2)==0) %alt piksel 1 ve daha sonra piksel pi
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 dengel
intersections=intersections-1;
%consider matrix [1 1 0
% 0 1 0
% 0 0 1]
% ikiden fazla kom¸suları vardır, ama belli ki bir kav¸sak de˘gil çünkü
%tanımına göre burada merkezi piksel bir kesi¸sim olarak kabul edilec
%Görüntünün iskeleti boyunca seyahat dü¸sünün.En a¸sa˘gı-sa˘g pikselden
% ¸Simdi bu merkez piksel (yukarı ve yukarı-sol), kod kesi¸sim olarak
%Yolu bu kalan iki kom¸su bu 3 * 3 penceresinde biti¸sik olup olmadı˘gı
%Bunun için, onlar aynı satır veya sütunda olup olmadı˘gını kontrol e
% Koduyla ba¸ska sorun harfi ’C’ dü¸sünmeleridir. Olası bir olay matri
% 1 0 0 0
% 1 1 1 1]
61
% Burada piksel (2,1), bu 4 kom¸sular vardır dü¸sünün.Yani bir kes
%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 edi
%(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 sa˘g üst kö¸sesinde piksel ile kontrol edecek
% if image(1,column)==1
% neighberhood=[image(1,column-1),image(2,column-1),image(2,colu
% 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
% 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 sa˘g alt kö¸sede piksel kontrol edecek.
% if image(row,column)==1
% neighberhood=[image(row-1,column-1),image(row,column-1),image(
% 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
% 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 sa˘g 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
% 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
ÖZGEÇM˙I¸S
K˙I¸S˙ISEL B˙ILG˙ILER
Adı Soyadı :Mustafa Köstek
Uyru˘gu : T.C
Do˘gum Yeri ve Tarihi: Çayıralan 9/5/1993
Adres : bilecik
Telefon :
e-mail : mustafakostek@gmail.com
E ˘G˙IT˙IM DURUMU
Lisans Ö˘grenimi : Bilecik ¸Seyh Edebali Üniverstesi, Bilecik
Bitirme Yılı : 2015
Lise : Edremit Anadolu Lisesi
˙I¸S DENEY˙IMLER˙I
Yıl : 2013
Kurum : ˙IZSU
Stajlar :
˙ILG˙I ALANLARI
YABANCI D˙ILLER : ˙Ingilizce,almanca
66

More Related Content

What's hot

Analog devre elemanları
Analog devre elemanlarıAnalog devre elemanları
Analog devre elemanlarıErol Dizdar
 
SAP PP İçindekiler
SAP PP İçindekilerSAP PP İçindekiler
SAP PP İçindekiler
Erdi AKSOY_MBA
 
Flashplatform optimizing content türkçe
Flashplatform optimizing content türkçeFlashplatform optimizing content türkçe
Flashplatform optimizing content türkçe
deniz armutlu
 
Grup 2 b170100014_alperen dobrucalı tasarım çalışması
Grup 2 b170100014_alperen dobrucalı  tasarım çalışmasıGrup 2 b170100014_alperen dobrucalı  tasarım çalışması
Grup 2 b170100014_alperen dobrucalı tasarım çalışması
Bayram7
 
B170100067 tasarim
B170100067 tasarimB170100067 tasarim
B170100067 tasarim
Bayram7
 
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders NotlarıBeyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
BGA Cyber Security
 
Adobe Flash as3 actionscript 3 ile programlama türkçe
Adobe Flash as3 actionscript 3 ile programlama türkçeAdobe Flash as3 actionscript 3 ile programlama türkçe
Adobe Flash as3 actionscript 3 ile programlama türkçe
deniz armutlu
 
Analiz 1
Analiz 1Analiz 1
Analiz 1
Ahmet Bilgin
 
Proje Kontrol Açıklamalı El Kitabı v.02.01
Proje Kontrol Açıklamalı El Kitabı v.02.01Proje Kontrol Açıklamalı El Kitabı v.02.01
Proje Kontrol Açıklamalı El Kitabı v.02.01
Yusuf Yıldız
 
Adobe actionscript 3.0 programlama türkçe
Adobe actionscript 3.0 programlama türkçeAdobe actionscript 3.0 programlama türkçe
Adobe actionscript 3.0 programlama türkçe
deniz armutlu
 
DoS DDoS Saldırıları ve Korunma Yöntemleri Kitabı
DoS DDoS Saldırıları ve Korunma Yöntemleri KitabıDoS DDoS Saldırıları ve Korunma Yöntemleri Kitabı
DoS DDoS Saldırıları ve Korunma Yöntemleri Kitabı
BGA Cyber Security
 

What's hot (16)

Visual studio
Visual studioVisual studio
Visual studio
 
Fireworks cs5 help
Fireworks cs5 helpFireworks cs5 help
Fireworks cs5 help
 
Analog devre elemanları
Analog devre elemanlarıAnalog devre elemanları
Analog devre elemanları
 
SAP PP İçindekiler
SAP PP İçindekilerSAP PP İçindekiler
SAP PP İçindekiler
 
Flashplatform optimizing content türkçe
Flashplatform optimizing content türkçeFlashplatform optimizing content türkçe
Flashplatform optimizing content türkçe
 
Grup 2 b170100014_alperen dobrucalı tasarım çalışması
Grup 2 b170100014_alperen dobrucalı  tasarım çalışmasıGrup 2 b170100014_alperen dobrucalı  tasarım çalışması
Grup 2 b170100014_alperen dobrucalı tasarım çalışması
 
B170100067 tasarim
B170100067 tasarimB170100067 tasarim
B170100067 tasarim
 
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders NotlarıBeyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
 
Adobe Flash as3 actionscript 3 ile programlama türkçe
Adobe Flash as3 actionscript 3 ile programlama türkçeAdobe Flash as3 actionscript 3 ile programlama türkçe
Adobe Flash as3 actionscript 3 ile programlama türkçe
 
Photoshop cs5 help part 0001
Photoshop cs5 help part 0001Photoshop cs5 help part 0001
Photoshop cs5 help part 0001
 
Analiz 1
Analiz 1Analiz 1
Analiz 1
 
Proje Kontrol Açıklamalı El Kitabı v.02.01
Proje Kontrol Açıklamalı El Kitabı v.02.01Proje Kontrol Açıklamalı El Kitabı v.02.01
Proje Kontrol Açıklamalı El Kitabı v.02.01
 
Adobe actionscript 3.0 programlama türkçe
Adobe actionscript 3.0 programlama türkçeAdobe actionscript 3.0 programlama türkçe
Adobe actionscript 3.0 programlama türkçe
 
Flash cs5 help
Flash cs5 helpFlash cs5 help
Flash cs5 help
 
Illustrator cs5 help part 0001
Illustrator cs5 help part 0001Illustrator cs5 help part 0001
Illustrator cs5 help part 0001
 
DoS DDoS Saldırıları ve Korunma Yöntemleri Kitabı
DoS DDoS Saldırıları ve Korunma Yöntemleri KitabıDoS DDoS Saldırıları ve Korunma Yöntemleri Kitabı
DoS DDoS Saldırıları ve Korunma Yöntemleri Kitabı
 

Similar to optical character recognition(matlab)with feature extraction

Adobe Flash ActionScript 3 components help Türkçe
Adobe Flash ActionScript 3 components help TürkçeAdobe Flash ActionScript 3 components help Türkçe
Adobe Flash ActionScript 3 components help Türkçe
deniz armutlu
 
Flash as3 bileşenlerini kullanma
Flash as3 bileşenlerini kullanmaFlash as3 bileşenlerini kullanma
Flash as3 bileşenlerini kullanma
deniz armutlu
 
FPGA MİMARİSİ ve TARİHİ GELİŞİMİ
FPGA MİMARİSİ ve TARİHİ GELİŞİMİFPGA MİMARİSİ ve TARİHİ GELİŞİMİ
FPGA MİMARİSİ ve TARİHİ GELİŞİMİ
AliMETN
 
Avid hd omni tr
Avid hd omni trAvid hd omni tr
Avid hd omni tr
Radikal Ltd.
 
Adobe Flash ActionScript 3 Programlama Türkçe
Adobe Flash ActionScript 3 Programlama TürkçeAdobe Flash ActionScript 3 Programlama Türkçe
Adobe Flash ActionScript 3 Programlama Türkçe
deniz armutlu
 
Adobe Photoshop cs5 ı kullanma
Adobe Photoshop cs5 ı kullanma Adobe Photoshop cs5 ı kullanma
Adobe Photoshop cs5 ı kullanma
deniz armutlu
 
Beyazsapkalihackeregitimikitap 140409071714-phpapp02
Beyazsapkalihackeregitimikitap 140409071714-phpapp02Beyazsapkalihackeregitimikitap 140409071714-phpapp02
Beyazsapkalihackeregitimikitap 140409071714-phpapp02
Öncü Furkan
 
BGA- BEYAZ SAPKALI HACKER EGITIMI
BGA- BEYAZ SAPKALI HACKER EGITIMIBGA- BEYAZ SAPKALI HACKER EGITIMI
BGA- BEYAZ SAPKALI HACKER EGITIMI
Dr. Hayati Tastan (1526+)
 
Adobe Fireworks CS5 Türkçe Yardım Kitapçığı
Adobe Fireworks CS5 Türkçe Yardım KitapçığıAdobe Fireworks CS5 Türkçe Yardım Kitapçığı
Adobe Fireworks CS5 Türkçe Yardım Kitapçığı
deniz armutlu
 
Adobe Fireworks CS4 Kullanım Kitapçığı Türkçe
Adobe Fireworks CS4 Kullanım Kitapçığı TürkçeAdobe Fireworks CS4 Kullanım Kitapçığı Türkçe
Adobe Fireworks CS4 Kullanım Kitapçığı Türkçe
deniz armutlu
 
Avid Pro Tools HD Native Kullanici Kilavuzu v90_69708
Avid Pro Tools HD Native Kullanici Kilavuzu v90_69708Avid Pro Tools HD Native Kullanici Kilavuzu v90_69708
Avid Pro Tools HD Native Kullanici Kilavuzu v90_69708
Radikal Ltd.
 
Tolga Saglam - ISITMA/HAVALANDIRMA OTOMASYONUN NOVAPROOPEN SCADA İLE GERÇEKLE...
Tolga Saglam - ISITMA/HAVALANDIRMA OTOMASYONUN NOVAPROOPEN SCADA İLE GERÇEKLE...Tolga Saglam - ISITMA/HAVALANDIRMA OTOMASYONUN NOVAPROOPEN SCADA İLE GERÇEKLE...
Tolga Saglam - ISITMA/HAVALANDIRMA OTOMASYONUN NOVAPROOPEN SCADA İLE GERÇEKLE...
tolgasaglam
 
SAP Portal kılavuzu
SAP Portal kılavuzuSAP Portal kılavuzu
SAP Portal kılavuzu
Dr. Kerem Koseoglu
 
Beyazsapkalihackeregitimikitap2
Beyazsapkalihackeregitimikitap2Beyazsapkalihackeregitimikitap2
Beyazsapkalihackeregitimikitap2
oxioxi3
 
Iç donanım birimleri
Iç donanım birimleriIç donanım birimleri
Iç donanım birimleriErol Dizdar
 
Teknik resim ve çizim teknolojileri 520 tc0007 (1)
Teknik resim ve çizim teknolojileri 520 tc0007 (1)Teknik resim ve çizim teknolojileri 520 tc0007 (1)
Teknik resim ve çizim teknolojileri 520 tc0007 (1)Iklimlendirme Sogutma
 

Similar to optical character recognition(matlab)with feature extraction (20)

Adobe Flash ActionScript 3 components help Türkçe
Adobe Flash ActionScript 3 components help TürkçeAdobe Flash ActionScript 3 components help Türkçe
Adobe Flash ActionScript 3 components help Türkçe
 
Flash as3 bileşenlerini kullanma
Flash as3 bileşenlerini kullanmaFlash as3 bileşenlerini kullanma
Flash as3 bileşenlerini kullanma
 
FPGA MİMARİSİ ve TARİHİ GELİŞİMİ
FPGA MİMARİSİ ve TARİHİ GELİŞİMİFPGA MİMARİSİ ve TARİHİ GELİŞİMİ
FPGA MİMARİSİ ve TARİHİ GELİŞİMİ
 
Avid hd omni tr
Avid hd omni trAvid hd omni tr
Avid hd omni tr
 
Adobe Flash ActionScript 3 Programlama Türkçe
Adobe Flash ActionScript 3 Programlama TürkçeAdobe Flash ActionScript 3 Programlama Türkçe
Adobe Flash ActionScript 3 Programlama Türkçe
 
Bgnet
BgnetBgnet
Bgnet
 
Adobe Photoshop cs5 ı kullanma
Adobe Photoshop cs5 ı kullanma Adobe Photoshop cs5 ı kullanma
Adobe Photoshop cs5 ı kullanma
 
Beyazsapkalihackeregitimikitap 140409071714-phpapp02
Beyazsapkalihackeregitimikitap 140409071714-phpapp02Beyazsapkalihackeregitimikitap 140409071714-phpapp02
Beyazsapkalihackeregitimikitap 140409071714-phpapp02
 
BGA- BEYAZ SAPKALI HACKER EGITIMI
BGA- BEYAZ SAPKALI HACKER EGITIMIBGA- BEYAZ SAPKALI HACKER EGITIMI
BGA- BEYAZ SAPKALI HACKER EGITIMI
 
Adobe Fireworks CS5 Türkçe Yardım Kitapçığı
Adobe Fireworks CS5 Türkçe Yardım KitapçığıAdobe Fireworks CS5 Türkçe Yardım Kitapçığı
Adobe Fireworks CS5 Türkçe Yardım Kitapçığı
 
Trt staj 2
Trt staj 2Trt staj 2
Trt staj 2
 
Adobe Fireworks CS4 Kullanım Kitapçığı Türkçe
Adobe Fireworks CS4 Kullanım Kitapçığı TürkçeAdobe Fireworks CS4 Kullanım Kitapçığı Türkçe
Adobe Fireworks CS4 Kullanım Kitapçığı Türkçe
 
Avid Pro Tools HD Native Kullanici Kilavuzu v90_69708
Avid Pro Tools HD Native Kullanici Kilavuzu v90_69708Avid Pro Tools HD Native Kullanici Kilavuzu v90_69708
Avid Pro Tools HD Native Kullanici Kilavuzu v90_69708
 
Indesign cs5 help part 0001
Indesign cs5 help part 0001Indesign cs5 help part 0001
Indesign cs5 help part 0001
 
Tolga Saglam - ISITMA/HAVALANDIRMA OTOMASYONUN NOVAPROOPEN SCADA İLE GERÇEKLE...
Tolga Saglam - ISITMA/HAVALANDIRMA OTOMASYONUN NOVAPROOPEN SCADA İLE GERÇEKLE...Tolga Saglam - ISITMA/HAVALANDIRMA OTOMASYONUN NOVAPROOPEN SCADA İLE GERÇEKLE...
Tolga Saglam - ISITMA/HAVALANDIRMA OTOMASYONUN NOVAPROOPEN SCADA İLE GERÇEKLE...
 
SAP Portal kılavuzu
SAP Portal kılavuzuSAP Portal kılavuzu
SAP Portal kılavuzu
 
Beyazsapkalihackeregitimikitap2
Beyazsapkalihackeregitimikitap2Beyazsapkalihackeregitimikitap2
Beyazsapkalihackeregitimikitap2
 
Iç donanım birimleri
Iç donanım birimleriIç donanım birimleri
Iç donanım birimleri
 
Teknik resim ve çizim teknolojileri 520 tc0007 (1)
Teknik resim ve çizim teknolojileri 520 tc0007 (1)Teknik resim ve çizim teknolojileri 520 tc0007 (1)
Teknik resim ve çizim teknolojileri 520 tc0007 (1)
 
213 gim016
213 gim016213 gim016
213 gim016
 

optical character recognition(matlab)with feature extraction

  • 1. 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
  • 2. 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
  • 3. ÖZET Projenin Amacı Görüntü i¸sleme,makine ö˘grenmesi algoritmalarıyla ne derece ba¸sarılı oldu˘gunun yanı sıra özellik çıkartma algoritmamızında geçerlili˘ginin ölçümünü yorumlayaca˘gız.Karakter ta- nıma için se˘gmentli 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 oldu˘gu bilgisi eklenecektir.Her ka- rakterin özellik vektörleri matris haline getirilip alan bilgisi eklendikten sonra weka ile i¸slenerek hangi yöntemin daha yüksek ba¸sarı gösterdi˘gi tespit edilecektir. Sonuçlar Sonuç olarak hangi sınıflandırma yönteminin karakter tanımada daha yüksek ba¸sarı sa˘g- ladı˘gı tespit edildi. 2
  • 4. 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
  • 5. TE¸SEKKÜR Bu projenin ba¸sından sonuna kadar hazırlanmasında eme˘gi bulunan ve beni bu konuya yönlendiren saygıde˘ger hocam ve danı¸smanım Sayın Emre Dandıl’a tüm katkılarından ve hiç eksiltmedi˘gi deste˘ginden dolayı te¸sekkür ederim. Mustafa KÖSTEK 15 Ocak 2015 4
  • 6. ˙Içindekiler ÖZET 2 ABSTRACT 3 TE¸SEKKÜR 4 S˙IMGE L˙ISTES˙I 7 ¸SEK˙IL L˙ISTES˙I 8 TABLO L˙ISTES˙I 9 1 Giri¸s 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 i¸sleme . . . . . . . . . . . . . . . . . . . . . 13 2.2 Görüntü e¸sikleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3 Görüntü kesitleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.4 ˙Iskeletleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.5 Alt bölgeleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.6 Ba¸slangıçlar,kesi¸simler ve minör ba¸slangıç bölgeleri . . . . . . . . . . . . 14 2.6.1 Ba¸slangıçları . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.6.2 Kesi¸simler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.6.3 Minör ba¸slangıçları . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.6.4 Karakter çapraz geçi¸sleri . . . . . . . . . . . . . . . . . . . . . . 16 2.7 Di˘gerlerinden ayıran çizgi sekmanları . . . . . . . . . . . . . . . . . . . 17 2.8 Özellik çıkartımı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5
  • 7. 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 A˘gları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.4 j48 a˘gaç . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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ÇM˙I¸S 66 6
  • 9. ¸Sekil Listesi 1 8 bitlik derinli˘ge sahip görüntünün e¸sikleme 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 sa˘ga ba¸slangıç,kesi¸sim ve minör ba¸slangıç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 olu¸sturuldu . . . . . . . . . . . . . . . . . . . . 27 8 Dörrt de˘gerlerinden olu¸san 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 a˘glarıyla cross edilmi¸s 1650x85 verinin karma¸sı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 Karma¸sıklı˘gı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 22 A˘gaçın veri kümemize ait genellemesi . . . . . . . . . . . . . . . . . . . 33 23 A˘gaç algoritmasının karma¸sıklık matrisi . . . . . . . . . . . . . . . . . . 34 24 Katmanlar ve döngü sayıları gösterilmi¸s . . . . . . . . . . . . . . . . . . 34 25 ÇKA’nın karma¸sıklık matrisi . . . . . . . . . . . . . . . . . . . . . . . . 34 26 Radyal tabanlı sinir a˘gıyla . . . . . . . . . . . . . . . . . . . . . . . . . . 35 8
  • 10. Tablo Listesi 1 Temsili bir örnek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2 Çaprazlık ili¸skileri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3 Binari olarak gösterilmi¸s basit bir a . . . . . . . . . . . . . . . . . . . . . 22 4 Görüntünün öznitelik olarak bit do˘grultularının kodlanması . . . . . . . . 23 5 Soldan sa˘ga 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österilmi¸s bir g . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 11 Homojen bölünmü¸s bir g harfi ve piksel do˘grultuları belirtilmi¸s . . . . . . 25 12 Öznitelik vektörleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 13 Veri kümemizin çapraz geçerleme neticesinde sınıflandırma oranları . . . 36 9
  • 11. 1 Giri¸s 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 i¸slemidir. OCR metodolojileri kullanı- larak makineler tarafından yazılmı¸s karakterler, elyazısı karakterler ve i¸saretler 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 do˘gru olarak tanınır ve kar¸sılı˘gında bir AS- CII kod atanır. Örne˘gin; OCR ile bir çek üzerindeki resmi olmayan miktar alanı tanınıp, MICR teknolojisi ile kodlanarak bir bankacılık sisteminde i¸slenebilir. Para alanı ise ge- nelde elyazısı ile doldurulur ve bu karakterler sınırlı bir do˘grulukla tanınabilirler. Bir ADC uygulamasında, ba¸sarılı bir tanımanın göstergesi %99.98 tanıma do˘gruluk derecesine ula- ¸sılmasıdır. ADC sürecinin ba¸slangıcında bu de˘ger genellikle daha dü¸süktür ve ardından yapılan görüntü i¸sleme algoritmalarıyla yükseltilir. Bazı durumlarda, full text search i¸slemi gerçekle¸stirmek 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 a˘glarına dayanan, matris e¸sleme ile gerçekle¸sen, öznitelik ana- lizi ile çalı¸san ve e˘grileri izleyerek karakter tanıma i¸slemini gerçekle¸stiren metodolojiler yer almaktadır. Karakterlerin daha büyük do˘grulukla tanınması için, okunan verilere ön 10
  • 12. i¸sleme ve son i¸sleme 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 iyile¸stirilmesinde kullanılırlar. Karakterlerin büyük do˘g- rulukla okunmasında, sisteme sunulan elektronik görüntünün mümkün oldu˘gunca keskin (sharp), temiz ve düzgün olması oldukça büyük önem ta¸sımaktadır. Buna ra˘gmen, günlük ya¸samda kullanılan dokümanlar ve formlar genellikle kirli, yıpranmı¸s ve katlanmı¸stırlar. Tanıma i¸sleminden önce uygulanacak ön i¸sleme algoritmaları ile formun elektronik gö- rüntüsü temizlenir ve karakterler mümkün oldu˘gunca iyile¸stirilir. Karakterlerin tanınması sırasında, kullanıcı tarafından kabul edilmeyen ya da do˘gruluk kriterini yakalayamayan karakterler reddedilmelidir (tanınmıyor olarak de˘gerlendirilme- lidir). Örne˘gin do˘gruluk kriteri olarak % 99.98 kabul edilirse, do˘gru olmadı˘gı kabul edilen birçok karakter reddedilecektir. E˘ger do˘gruluk kriteri daha a¸sa˘gı sınırlara çekilirse, tanı- nan karakter sayısı artacaktır. Buna ra˘gmen % 99 oranındaki do˘gruluk kriterleri sıklıkla kullanılmaktadır. ˙Içinde OCR tarafından okunamayan karakterler de bulunan reddedilen karakterler do˘gru- lukla belirlenebilmelidir. Bu i¸slem genelde karakterin ekrana getirilerek el ile giri¸si yapıl- ması süreci ile gerçekle¸stirilir. Do˘grulu˘gu iyile¸stirmenin en son basama˘gı ise OCR ya da el ile giri¸si yapılmı¸s tüm karak- terlerin i¸slenmesi, do˘grulu˘gunun istenilen kriteri yakaladı˘gının sınanması ya da kullanıcı gereksinimini kar¸sılayıp kar¸sılamadı˘gının belirlenmesidir. Son i¸sleme i¸slemleri ile sözü edilen son basamak gerçekle¸stirilebilir. Ticari olarak var olan algoritmalar ile bu adım kolaylıkla uygulanabilir. Verinin arıtılması adı da verilen bu i¸slemler, karakter tanımadaki do˘grulu˘gu 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 i¸sleme i¸slemleri ile ilgilenen ki¸siler, 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
  • 13. Vergilendirme ve Tahsilat Personel Kayıt Yönetimi Nüfus Sayımı Formlarının ˙I¸slenmesi Çek ˙I¸sleme Ödeme ˙I¸sleme Emekli Fonu ˙I¸sleme Sipari¸s ˙I¸sleme Tıbbi ˙Istekler Günümüz ekonomisinde, elektronik doküman yönetimi sistemlerinin, hem i¸s 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 ya¸sadı˘gımız çalkantılı, dinamik ve maliyetlerin önem ta¸sıdı˘gı günümüz çalı¸sma ortamlarında, OCR ile tanıma i¸slemleri görüntüleme teknolojisi ile birle¸stirilerek 21. yüzyıla geçi¸ste kullanılan önemli bir basamaktır. 1.2 Projenin Amacı Özellik çıkartım yöntemleri görüntü i¸slemenin temelini olu¸sturan bir alandır.Bu sayede biz uzun uzadıya bit e¸slemesi yapmaya gerek kalmadan belirli büyüklükteki parçalara ayırıp parçalardaki bitlerin ne ¸sekilde da˘gıldı˘gını o bölgeyi karakterize eden de˘ger kü- melerinde tutarak vektörel de˘gerler elde edip bilgisayarın i¸slem yapması kolayla¸stıracak- tır.Bizde görüntü i¸sleme yöntemi olarak bu yöntemden yararlanıp vektörleri makineye ö˘gretip test ederek yöntem ba¸sarılarını ölçece˘giz[1]. 12
  • 14. 2 Karakter tanıma 2.1 ˙Ikili görüntüye dönü¸stürme i¸sleme Görüntü i¸sleme yöntemleri kullanılarak çe¸sitli i¸slemler neticesinde [2] belirli katsayılar elde edece˘giz.Ama öncelikle 8 bit derinli˘gine sahip görüntümüzü gri sonra ise ikili for- mata (1)’nolu fonksiyonla gerçekle¸stiriyoruz. im2bw (1) 2.2 Görüntü e¸sikleme Görüntü e¸sikleme yaparak görüntüdeki gürültü(noise) etkilerinden çikartmamizi sa˘glar e¸sikleme yapilan bir görüntünün fonksiyonu a¸sa˘gıdaki gibi olmalıdır[3].Uygulama alan- ları biyomedikal,co˘grafi vb.Örnek olarak ¸Sekil 1 gösterilmi¸stir. ¸Sekil 1: 8 bitlik derinli˘ge sahip görüntünün e¸sikleme sonra görüntü fonksiyonu 2.3 Görüntü kesitleme Girilen karakterlerin sa˘gdan soldan a¸sa˘gıdan ve yukarıdan çerçeveleyerek görüntünün i¸s- lem yapılmayacak bitlerini bir nevi süzgeçliyoruz.Bu sayede i¸slemlerimize dahil olmaya- cak verilerden kurtulup görüntü indirgenmesini gerçekle¸stirdik. 2.4 ˙Iskeletleme • Biyolojinin canlıların ¸sekil ve yapıları ile ilgilenen dalına morfoloji (biçim bilim) adı verilmektedir. 13
  • 15. • Matematiksel morfoloji ise temel küme i¸slemlerine 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 i¸slemede genellikle, morfolojik süzgeçleme, inceltme (thinning), budama (pru- ning) gibi ön/son i¸slem olarak da sıkça kullanılırlar. • Gri tonlu imgeler üzerinde de yapılabilece˘gi gibi, genellikle ikili imgeler üzerinde yapılan i¸slemlerdir örnek olarak ¸sekil 2 ’de gösterilmi¸stir. 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 a¸samada ise artık ilgili resim çerçevelerini belirli büyüklükler halinde parçalara ayı- rarak her resim için e¸sit 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 Ba¸slangıçlar,kesi¸simler ve minör ba¸slangıç 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ı ba¸slangıç pikselleri,kav¸saklar ve minör ba¸slan- gıçları olarak tanımlanır. 14
  • 16. 2.6.1 Ba¸slangıçları Karakter iskeletinde bir kom¸susu olan piksel bulunur.Karaktere girmeden önce, belirli bir bölgedeki tüm ba¸slangıçlarda bulunan ve bir liste halinde tutulur. 2.6.2 Kesi¸simler Kesi¸simlerin tanımlaması bazan daha da karma¸sıktır.Bir kesi¸sim olması için bir piksel için gereklidir fakat bir kriterde birden fazla kom¸suya sahip olması istenilen durum de- ˘gildir.Do˘gru kom¸sular denilen yeni bir özellik, her piksel için tanımlanır.Belirli piksel için de kom¸su sayısına dayanarak, bir kesi¸sme ya da kesi¸sme olmayan olarak sınıflandı- rılır.Bunun için do˘grudan piksel ve çapraz piksel olmak üzere kom¸su pikseller iki kate- goriye ayrılır.Do˘grudan pikselin yatay ve dikey yönde kesi¸sim pikselinin bölgede tüm bu piksellerle ba˘glantısı vardır.Çapraz piksel ilgili piksele bir çapraz yönde oldu˘gu bölgede olan pikseldir.¸Simdi göz önünde bulunan pikselde do˘gru kom¸sularının sayısını bulmak için, o karakter iskeletindeki sahip kom¸sularının sayısına ba˘glı olarak sınıflandırılacaktır. Ele alınan piksellerde ¸su ¸sekilde sınıflandırılır • 3 kom¸su: Direkt piksellerin hepsi bir çapraz piksele herhangi birisine biti¸sik de˘gilse, o zaman, söz konusu pikselin kom¸su piksellerinin e˘ger hiçbirinin kesi¸sti˘gi ardından birbirine kom¸su olan ba¸ska piksel varsa, bir kesi¸sme olamaz. • 4 kom¸sular: Her direk pikselin bir kom¸su çapraz piksel veya tersi varsa, ardından söz konusu pikselin bir kesi¸sti˘gi olarak kabul edilemez. • 5 veya kom¸sular: Göz önüne alındı˘gında pikselin be¸s veya daha fazla kom¸suları varsa, o daima bir kesi¸sme olarak kabul edilir. Tüm kesi¸smeler görüntüde tanımlandıktan sonra, daha sonra bir liste halinde doldurulur. 2.6.3 Minör ba¸slangıçları Minör ba¸slangıçlar karakter iskelet birlikte çapraz geçi¸si süresince birlikte bulunur.Göz önüne alındı˘gında pikselin ikiden fazla kom¸suları ne zaman olu¸sturulur.Olu¸sabilir iki ko- ¸sul vardır 15
  • 17. • Kesi¸sme:Geçerli bir kesi¸sme oldu˘gunu ne zaman anlarız.Mevcut hat segment sona erecek ve tüm ziyaret edilmemi¸s kom¸suları minör ba¸slangıçlar listesinde dolduru- lacaktır. • Göz önüne alındı˘gında pikselin ikiden fazla kom¸suları ama yine de onun olmayan bir kesi¸sme ile gereken durumlar olu¸sabilir.Bu gibi durumlarda, çapraz geçi¸si mev- cut yönü önceki pikselin konumu kullanarak bulunur.Bölgesinde yer gezilmemi¸s piksellerinin hiçbir bu yönde ise, o zaman bir sonraki piksel olarak dü¸sünülmü¸s ve bütün di˘ger pikselleri, minör ba¸slangıçlar listesinde doldurulur.Piksellerin hiçbiri çapraz geçi¸si geçerli yönünde de˘gilse, o zaman geçerli segment bitirilir ve bölge- sinde yer alan bütün pikselleri minör ba¸slangıçlar listesinde doldurulur.Genel olarak gösterimi ¸sekil 3’daki gibidir. ¸Sekil 3: Sırasıyla görüntüde soldan sa˘ga ba¸slangıç,kesi¸sim ve minör ba¸slangıçları 2.6.4 Karakter çapraz geçi¸sleri Bölgeleme resmin üzerine yapıldıktan sonra karakter çapraz geçi¸si ba¸slar.Her bir bölge ayrı ayrı hat kesimleri çıkarma i¸slemine tabi tutulmaktadır.Bu amaçla, ilk olarak bölgede ba¸slangıçlar ve kesi¸smeler bir listede doldurulur sonra bölgeye dahil edilir.Minor ba¸s- langıçlar çapraz geçi¸si süresince birlikte bulunur.Algoritma ba¸slangıçlar listesini dikkate alarak ba¸slar.Tüm ba¸slangıçlar i¸slenir sonra, bu ¸sekilde elde edilen minör ba¸slangıçlar i¸s- lenir.Bu i¸slem 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 dola¸sıldıktan sonra, algoritma du- rur. Bir örnek A¸sa˘gı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
  • 18. 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 Tablo 1: Temsili bir örnek kuralı vs. varsayılır.Bu görüntüdeki Ba¸slangıçlar listesi [(1,1), (1,5), (5,1), (5,5)] olacak- tır.Kesi¸sme sadece piksel (3,3) ihtiva edecektir.¸Simdi algoritma ilk ba¸slangıç örne˘gin (1,1) i¸sleyerek ba¸slar.Bir sonraki piksel (2,2) ve, bundan sonra da, (3,3) ’dir.Piksel (3,3) bir ke- si¸sim oldu˘gunu, bu nedenle algoritma o andaki bölümünü durur ve minör ba¸slatıcı tüm kom¸sularını tanımlar.Yani minör ba¸slatıcı listesi [, (2,4) (4,2) (4,4)] ihtiva edecektir.¸simdi olu¸san çizgi segmenti [, (2,2) (1,1) (3,3)] içerecektir.¸Simdi bir sonraki ba¸slangıç örne- ˘gin (1,5) olarak kabul edilir.Sonraki piksel (2,4) ’dir. Algoritma akımı durdurur, böylece piksel (2,4) küçük bir ba¸slangıç oldu˘gunu herhangi olup olmadı˘gını burada bölümlü ve minör ba¸slatıcı gibi, (2,4), tüm gezilmemi¸s kom¸sularını tanımlar. O ziyaret edilen andan ba¸slayarak aynı zamanda (2,4), minör ba¸slatıcı listeden kaldırılır.¸Simdi bir sonraki ba¸s- langıç (5,1) olarak kabul edilir ve bu ¸sekilde olu¸sturulan bir sonraki çizgi parçası [(5,1), (4,2)] olacaktır.Pixel (4,2) ba¸slayanlar 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 Di˘gerlerinden ayıran çizgi sekmanları Çizgi parçası görüntüden ekstre edildikten sonra, bunlar ¸su do˘gru tiplerinin herhangi bi- rine sınıflandırılabilmesi gerekir. • Yatay çizgi • Dikey çizgi • Sa˘g ç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
  • 19. 4 5 6 3 C 7 2 1 8 Tablo 2: Çaprazlık ili¸skileri göre Tablo 2’daki gibi isimlendirme kuralı olursa bir kom¸su piksel konumunu tanımlana- bilir. Verilen, matris içinde "C" merkez pikseli temsil eder.Kom¸su pikseller merkez pikselin al- tındaki pikselden ba¸slayarak saat yönünde numaralandırılır.Bir çizgi diliminden yön vek- törü ayıklamak için, algoritma onlar çizgi segmentini olu¸sturan sırayla çizgi segmentlerde tüm pikselleri dola¸sır.Örne˘gin, ç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 giri¸s 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 giri¸si de 8 olacaktır.Bu ¸sekilde gidi¸s, 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 ra˘gmen, 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 örne˘gin, ’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 a¸sa˘gıdaki kurallara tabi tutulur. • Önceki yön 6 veya 2 oldu VE sonraki yönü 8 veya 4 ya da. 18
  • 20. • Önceki yön 8 veya 4 VE sonraki yönü 6 veya 2 ya da. • Bir çizgi parçası do˘grultusu yönü ya da en fazla üç tip de˘gi¸stirildi. Resimde i¸saretlenmi¸s çizgi segmenti yön kuralları son açıklanan uygulamadan önce elde edilmi¸stir.Bu çizgi parçası aslında iki farklı çizgi parçası olu¸sturmasına ra˘gmen, 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 a¸sa˘gıdaki kurallar her yön vektörü sınıflandırmak için tanımlanmı¸s- tır. • Olu¸san maksimum yönü tip 2 veya 6 ise, çizgi tipi do˘gru sa˘g çaprazdır • Olu¸san maksimum yön tipi 4 ya da 8 ise, çizgi tipi sol çapraz bırakılır • Olu¸san maksimum yönü tip 1 veya 5 ise, ince çizgi tipi dikey • olu¸sumlu yön tipi 3 veya 7 ise, çizgi tipi yatay oldu˘gu kansına varılır ˙Iki çizgi türü aynı sayıda olu¸sursa 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 olu¸s- turulmu¸stur. Her bölge kendisine kar¸sılık gelen bir özellik vektörü tutar.Kullanılan algo- ritma 9 tane de˘ger üretmektedir her bir bölge için.. Bunlar • Yatay çizgilerin sayısı • Tüm yatay çizgilerin normalize uzunlu˘gu • Dikey çizgilerin sayısı • Tüm dikey çizgilerin normalize uzunlu˘gu • Sa˘g çapraz çizgiler sayısı 19
  • 21. • Tüm sa˘g çapraz çizgiler normalize uzunlu˘gu • Sol çapraz çizgiler sayısı • Tüm sol çapraz çizgiler normalize uzunlukları • iskelet normalize Alanı. • Herhangi bir özel hat türü sayısı a¸sa˘gıdaki yöntemi de˘geriyle standardize edilir. deger = 1 − ((cizgiSayisi/10) ∗ 2) Herhangi bir özel hat türü normalle¸stirilmi¸s uzunlu˘gu a¸sa˘gıdaki yöntem kullanılarak bu- lunur. uzunluk = (tumPikseldekiCizgiler)/(bolgedekiPikseller) Ö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 eldelenmi¸stir.Yine orijinal görüntü yatay do˘grultuda bölünmesi ile 3 bölgeye ayrılmı¸stır.Sonra özellikleri gibi her bölge için çıkarıldı.Bölgeli özelli˘gi çıkarımı yapıldıktan sonra, bazı özellikler yani bölgesel özelliklerine göre, tüm görüntü için ekstre edilmi¸stir.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.Örne˘gin 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
  • 22. 2.9 Fonksiyon ve altfonksiyonlar Programın anla¸sılabilirli˘gi ve kod kısımlarının tekrar tekrar yazılmasınında önüne ge- çilebilmesi için i¸slevler ¸seklinde olu¸sturulmu¸stur. ¸sekil 5’de fonksiyonlar hiyerar¸sik bir ¸sekilde gösterilmi¸stir. ¸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 de˘ger döndürür prep image görüntüdeki gürültüleri gidermeye yöneliktir line segmenter Çizgilerin kom¸suluklarına,kesi¸simlerine ve minör durumları silme ekleme i¸slemleri yapılır finddirection Aldı˘gı iki de˘gere göre yönünü belirleyen fonksiyondur isnotempty Parametre olarak aldı˘gı matris bo¸ssa sıfır de˘gilse bir de˘geri cevaplar del pixel Piksel silme metodu 21
  • 23. isnotmember Üyesi de˘gil mi? findneighbours Piksellerin kom¸suluklarını arayan fonksiyondur ismymember üyesi mi? starter intersection Kesi¸sim bölgesi ba¸slangıcı mı? 2.10 Örnekler Buraya kadar sürekli olarak teoriden bahsedildi,¸simdi birkaç örnekle kavrayalım[5].Öncelikle görüntü gray seviye,e¸siklenir ve lojik 1 ve 0’a dönü¸stürülür.Tablo 3 görüldü˘gü gibi. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Tablo 3: Binari olarak gösterilmi¸s basit bir a ˙I¸ste 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 a¸sa˘gıdan ba¸slanarak önündeki yada ziyaret edece˘gi piksele göre do˘g- rultu alıyor. Bunlar; Yatayı, Dikeyi, Sa˘g çapraz, Sol çapraz kesi¸sim olarak ifade edilir.Bu a¸sama sonucunda e¸sit 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 ba˘gımsız dü¸sünülerek bölgesel piksel da˘gılına göre yorumlanır.Tablo 5 örnek olarak gösterilebilir.˙Ikili a’nın niteliksel gösterimi Tablo 4 gibidir. 22
  • 24. 4 3 4 3 4 2 2 5 1 1 1 1 5 3 4 3 4 4 Tablo 4: Görüntünün öznitelik olarak bit do˘grultularının kodlanması 1 ... ... 1 4 3 1 3 3 1 2 3 1 4 3 1 3 3 1 3 3 1 2 3 Tablo 5: Soldan sa˘ga lokalde çizgi tipi tayini Bu a¸samadan sonra ise artık 9’luk vektörlere sıra geldi niceliklere adet 1−(2∗cizgiTipiAdet)/10 ,ile uzunluk ise cizgiTipUzunluk/BolgedekiToplamCizgiAlani ile dokuzuncu de˘gerse bolgedekiToplamCizgiAlani/bolgedekiToplamAlan olarak ifade edilmi¸stir. 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.167 1 0 1 0 1 0 0.8 0.67 0.25 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 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 -1 1 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 sa˘g a¸sa˘gı do˘gru takip edilerek de˘gerler yazılmı¸stır.Yani herbir satır bir bölgeye denk gelmek- tedir.Ayrıca -1 de˘gerleri o bölgede hiç olmayan[6],bir piksel yada birbirinden ba˘gımsız iki pikseli ifade eden bölgelerde özelik olarak 9 tane -1 basılır. 23
  • 25. 1 0 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 1 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 i¸slemi, • morfolojik i¸slem yardımıyla görüntüyü erozyona u˘gratarak iskeleti [7] çıkartılıyor böylelikle pikseller arası yön tayini karı¸sıklıktan kurtulmu¸s olunuyor. 2 3 2 3 2 3 2 3 5 5 2 4 2 4 2 4 2 4 2 2 2 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
  • 26. 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.33 1 0 1 0 0.8 0.67 1 0 0.25 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 0 0.8 0.8 1 0 1 0 0.416 1 0 1 0 1 0 0.8 0.67 0.25 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 0 0.8 0.67 1 0 1 0 0.25 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 0 0.8 0.5 1 0 1 0 0.167 Tablo 9: Öznitelik vektörleri 0 0 1 1 1 1 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 1 1 0 0 Tablo 10: ikili gösterilmi¸s bir g Yukarıda verilen Tablo 10 niteliksel gösterimi Tablo 11 ve öznitelikleri Tablo 12 görül- mektedir. 3 1 1 1 3 2 2 1 1 1 2 4 4 2 1 4 3 1 3 Tablo 11: Homojen bölünmü¸s bir g harfi ve piksel do˘grultuları belirtilmi¸s 25
  • 27. 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 -1 1 0 0.8 0.67 1 0 1 0 0.333 0.8 0.5 1 0 1 0 1 0 0.22 1 0 1 0 1 0 0.8 0.67 0.33 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 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
  • 28. 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çekle¸stirece˘gimiz sınıflandırma alan bilgisi girip e˘gitme i¸slemi gerçekle¸stirdi˘gimizden destekli kapsamına girer.Çapraz geçerleme yapa- rak yani 10 parçaya ayırıp 1’ini hariç tutup 9’uyla e˘gitip hariç tutu˘gumuzla e˘gitilme du- rumu,bunu on defa tekrarlar ba¸sarı ö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 olu¸sturuldu ¸Sekil 8: Dörrt de˘gerlerinden olu¸san kalibrasyonlar Sonra ise (3) parametre olarak görüntüyü veriyoruz ve bize 85 alandan olu¸san vektör çıktılayacak. vektor = feature_extractor(goruntu); (3) 27
  • 29. 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 ettirece˘gi öngörülmektedir.Weka kul- lanımı basit ve pratiktir.Piyasada emsali programlara göre hatırı sayılır bir popülerli˘ge sahiptir. 2.11.3 Verilerin arff formatına uydurulması [9] Elli¸ser 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 verdi˘gimiz görüntüden 85 alanlı özellik vektörü elde edece˘giz ¸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 giri¸s 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
  • 30. 3 Deneysel Çalı¸smalar 3.1 Verilerin analizinin gerçeklenmesi Artık veri setimizin olu¸sturuldu˘gunu varsayarak programda e˘gitim [10] i¸slemine basla- yabiliriz.Programa genel bir bakı¸s yapacak olursak ¸Sekil 12’te oldu˘gu 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 a¸samadan sonra artık hangi sınıflandırma yöntemini belirleyece˘gimizi ¸Sekil 13 oldu˘gu gibi seçiyoruz.Deneme amaçlı olarak sonucunu inceleyece˘giz. ¸Sekil 13: Sınıflandırma yöntemi Sonra ise bu butonun altında olan e˘gitim ve test kriterlerine dokunmadan start butonuna basarak sınıflandırma i¸slemini ba¸slatıyoruz.Sonuçta confusion matrisimiz a¸sa˘gıdaki ¸Sekil 14 çıktı verdi. 29
  • 31. ¸Sekil 14: Bayes a˘glarıyla cross edilmi¸s 1650x85 verinin karma¸sıklık matrisi 3.2 Alanların minimizasyonu Özelik çıkartımı yapılırken ço˘gu 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 çoklu˘guna göre de˘gi¸sebilir[11] örne˘gin biz iki adet sınıfı sınıflandı- raca˘gız algoritmamızın olu¸sturaca˘gı sınır yalnızca bu iki veri için geçerlidir üçüncü bir veri için de˘gildir.Kısacası dura˘gan alanları filtreleme yaparak program aracılı˘gıyla alan sayısını üçte birine indirece˘giz.Öncelikle alanların sınıflandırmayı yüzde kaç etkiledi˘gine 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 de˘gil. 30
  • 32. ¸Sekil 16: Hangi alan sınıflandırmayı ne kadar etkiliyor? Bu bilgiyi göz önüne alarak ön i¸sleme ekranına giderek gereksiz alanları filtrelemek ama- cıyla ilgili algoritmayı seçip ¸Sekil 17 oldu˘gu gibi onaylıyoruz. ¸Sekil 17: Filtreleme tipi seçme ¸Sekil 18 de scroll bardan anla¸sılaca˘gı üzere 85’tane olan alan 27 ye kadar dü¸smü¸stür.Böylelikle sınıflandırma i¸sleminde gereksiz i¸slemler devre dı¸sı bırakılmı¸stır. 31
  • 33. ¸Sekil 18: Görüldü˘gü gibi gözle görülür bir azalma söz konusu 3.3 Bayes A˘gları ¸Sekil 19: Bayes sınıflandırıcısı ¸Sekil 20: Dikey olarak belirli alan kısıtları 32
  • 34. Gayet ba¸sarılı bir sınıflandırma yöntemi bu ba¸sarısını matematikteki olasılık tabanlı he- saplamalarından alır.Geli¸smi¸s bayes olarakta nitelendirilir.¸Sekil 19 oldu˘gu gibi konfigü- rasyon yapıp çapraz geçerleme yaptı˘gımızda ¸Sekil 20’de sonuçları üzerine sa˘g tıklayarak vizualize graph diyerek yapıyı yorumlayabiliriz.Sonuçlar ¸Sekil 21 oldu˘gu gibidir. ¸Sekil 21: Bayes Karma¸sıklı˘gı 3.4 j48 a˘gaç ¸Sekil 22: A˘gaçın veri kümemize ait genellemesi Gayet anla¸sılabilir net ve keskin hatlar ile sınırlarını belirleyen a˘gaç algoritması bize es- nek bir ¸sekilde veriyi yorumlama imkanı sunuyor.Veri kümesine ait a˘gaç sonuçların üze- rine gelip sa˘g tıklayıp visualize tree seçene˘giyle ¸Sekil 22 deki gibi görüntülenebilir sonuç matrisi 23 olarak çıkacaktır. 33
  • 35. ¸Sekil 23: A˘gaç algoritmasının karma¸sıklık matrisi 3.5 Çok katmanlı algılayıcılar ¸Sekil 24: Katmanlar ve döngü sayıları gösterilmi¸s ¸Sekil 25: ÇKA’nın karma¸sıklık matrisi Çok katmanlı algılayıcılar yapay sinir a˘gları kapsamındadır.Gayet ba¸sarılı olmasına kar- ¸sın yüksek de˘gerde döngüler hatanın çok küçük olmasından dolayı varyansa(ezber) gi- 34
  • 36. rer.Ço˘gu mühendislik ve bilim dallarında oldukça kullanılan bir yöntemdir.¸Sekil 24’de ha- tayı kontrol edebiliriz istedi˘gimiz zaman e˘gitimi sonlandırabilme gibi yetkimiz var.Sonuçları ¸Sekil 25 gösterilmektedir.Gayet ba¸sarılı bir sınıflandırma yapmı¸stır.Yine bir yapay sinir a˘gları kapsamında e¸sikleme radial fonksiyonu kulanan model bu model yo˘gun e˘gitim ve- risinde çok iyi sınırlar çıkarmaktadır.Çıktılar ¸Sekil 26 gibidir. ¸Sekil 26: Radyal tabanlı sinir a˘gıyla 35
  • 37. 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 ba¸sarı oranları Tablo 13 oldu˘gu gibidir. RBF MLA BayesNet j48 BP SVM 95.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 ba¸sarısına sa- hiptir. 36
  • 38. 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-ortamnd [11] http://en.wikipedia.org/wiki/Category:Classification_ algorithms [12] http://bilgisayarkavramlari.sadievrenseker.com/2009/06/ 01/weka/ 37
  • 39. EKLER 4.1 feature extractor %Bu fonksiyon giri¸s görüntüsünün özniteliklerini çıkarır function [features]=feature_extractor(image); % Bu fonksiyon bölgeleri giri¸s görüntüsünü ve her bölge için özellik %% görüntü ön i¸sleme 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 i¸slem olarak iskelet çı %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 zo % Önce biz bu görüntü en az 9 satır ve minimum 9 sütun olu¸sur sa˘glam 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
  • 40. image=[zeros((add_rows-1)/2,column);image;zeros((add_rows+1)/2,colum end %bu satırların hepsi üst ve alt e¸sit olarak güncelle¸stirilmesi gerek %e¸sit olması amacıyla e¸sit 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)/ end column=size(image,2); %güncellenmi¸s colon sayısıı n_rows=ceil(row/3)*3-row; % sıfırlardan olu¸san satır yok edilmeyecek n_columns=ceil(column/3)*3-column; % sıfırlardan olu¸san sütun yok ed % Satır = 4, yani sıfırlardan olu¸san 2 satır eklenmesi gerekti˘gini v % Olan 6 3 yandaki ila 4 arası yakın katıdır. Satırlar görüntüye ekl 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 e¸sit bölünmesi amacıyla a¸sa˘gıdaki operasyonlar uygulanmaya %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 g zone_height=row/3; zone_width=column/3; 39
  • 41. %Her bölgedeki satır sayısı 12 ise partlamada 3’erli gidecektir %Ancak sütunları 9,3 e¸sit parça 3 olmalıdır oysa matris 12x3 ?. %Bu de˘gi¸skenler bölge yüksekli˘gi ve geni¸sli˘gi 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_wid 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ü euler=bweuler(image); features=[zone11_features;zone12_features;zone13_features;zone21_fea 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
  • 42. 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 CHAN % ¸Simdi bir önceki geometrik ve bu local özellikleri birle¸stirilmi¸s %features=[features;regional_features]; 4.2 Line Classifier % Bu i¸slev, belirli bir giri¸se göre bana olumsuz veya çizgi segmentl function [featurevector]=lineclassifier(image) % görüntü al % Çıkı¸s olan unsurları 9 eleman özelli˘gi vektörü içerecektir. % 1.Yatay çizgilerin sayısı, 2.Yatay çizgilerin toplam uzunlu˘gu, %3. Sa˘g çapraz çizgiler sayısı, 41
  • 43. % 4. Sa˘g çapraz çizgiler toplam uzunlu˘gu, % 5. Dikey çizgilerin sayısı, 6. Dikey çizgilerin toplam uzunlu˘gu, %Sol çapraz çizgilerin sayısı, sol çapraz çizgiler toplam uzunlu˘gu v %% E˘ger yön türleri yineleyebilirsiniz durumu olarak kabul bulunmamı down=1; %okunabilirli˘gi artırmak için çalı¸sıyor, bu # ¸seyler 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 kar¸sılık gelen yön vektörü içerir %% Her segmente kar¸sı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
  • 44. error(’Lineclassifier.m içinde sadece bir piksel ile bir segmenti va 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!!!!!!!!! % A¸sa˘gıdaki durumlardan herhangi B˙IR˙I memnun IF, yeni bir çizgi ba¸sl % 1. Bir önceki yön sonraki yön a¸sa˘gı-sa˘ga veya yukarı-sol OR sa˘ga-y % 2. Bir önceki yön a¸sa˘gı do˘gru veya yukarı-sol VE sonraki yönü sa˘ga % 3. Bir çizgi parçasıyla yönünü yönü ya da üçten fazla tip de˘gi¸stir % 4. bir önceki yön Çe¸sidi uzunlu˘gu üç piksel daha büyüktür. %Yukarıdaki kurallar, her segmente kar¸sılık gelen tüm yön vektörü uy 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ı¸s j=1; currentline=[]; while j<numel(currentdir_segment) 43
  • 45. previousdirection=currentdir_segment(j); nextdirection=currentdir_segment(j+1); rule_one=(previousdirection==upright | previousdirection==downleft) rule_two=(previousdirection==downright | previousdirection==upleft) 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 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 zam 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ü %error(’dostum, senin çizgi parçası 3 piksel azdır.’); currentline=currentdir_segment; Truelines{N}=currentline; N=N+1; end end 44
  • 46. %% Çizgi türü algılama % Burada çizginin türünü bulmak için çalı¸saca˘gız. N_Truelines=numel(Truelines); Normallines={}; %normalize hatları tutmak için ayarlayın. N=1; % çizgi tipi normalle¸stirme. for i=1:N_Truelines currentmaxtype=0; currentmaxoccurence=0; currentline=Truelines{i}; currentlength=numel(currentline); occurencematrix=[]; for j=1:8 %Kez Dosya Adedi maksimum olu¸san numarasını bulmak occurencematrix=[occurencematrix,numel(find(currentline==j))]; end currentmaxoccurence=max(occurencematrix); % olayda max bulmak current_max_direction=find(currentmaxoccurence==occurencematrix); %% repetition=numel(current_max_direction)-1; %% ˙Iki istikametin aynı if repetition~=0 % display(’dostum, iki kez yol tarifi olumsuz sonuc verdi’); end Normallines{N}=current_max_direction(1)*ones(1,currentlength);% duru % ilk dizin alınlamlı olu¸stu. 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; % sa˘g çapraz çizgi sayısı. N_leftslant=0; %sol çapaz çizgi sayısı. L_horizontal=0; % yatayların toplam uzunlu˘gu. 45
  • 47. L_vertical=0; % dikeylerin toplam uzunlu˘gu. L_rightslant=0; % sa˘g ç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 de˘geri 1-((no.of lines)/10)*2 olarak no V_horizontal=1-((N_horizontal)/10)*2; V_vertical= 1-((N_vertical)/10)*2; V_rightslant=1-((N_rightslant)/10)*2; 46
  • 48. V_leftslant=1-((N_leftslant)/10)*2; % uzunluk formülü uzunlu˘gu = (belirli bir yönde toplam sayisi piksel 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 Bel filled_area=skel_size/numel(image); featurevector=[V_horizontal,norm_horizontal,V_vertical,norm_vertical 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ında %’parçalı el yazısı karakterlerin tanınması için yeni bir özelli˘gi ç %% özellikleri giri¸s %görüntüde herhangi Ba¸slatıcı ¸su anda ise, eklenecek, kod i¸se yarama %% I¸slevi burada ba¸slar. function [segments]=linesegmenter(image) % görseli segmentlere önce, bu iskeletize olması ve sahte piksel çık [starters,intersections]=starter_intersection(image); % Ba¸slatıcı ve kesi¸smeler satır sütun koordinatlarını içerir. down=1; %Bu # ¸seyleri tanımlamak unutmayın, okunabilirli˘gi a 47
  • 49. 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 gidi image=[image,zeros(size(image,1),1)]; %Sa˘g 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ı de˘gi¸sti, ben ba¸slayanlar ve ayn 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 kom¸suluk 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
  • 50. %for i=1:size(starters_queue,1) skel_size=numel(find(image==1)); % Biri de˘gere sahip piksel bir olum %% Bu, tüm ba¸slayanlar kadar çalı¸smaya devam ediyorum, ana döngü. % Ele alınan ya da minör ba¸slayanlar ele alınmaktadır da tüm iskelet while(isnotempty(starters_queue) | isnotempty(minor_starters_queue)) currentsegment=[];% Mevcut segmentler piksel listesini içermesi gere %% 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 ba¸slatma parçalardır %findneighbours() mevcut pikselin kom¸suları bulmak için bir i¸slevdir else starters_queue=del_pixel(starters_queue(1,:),starters_queue); continue; %ba¸slangıç ile ... ele alınmı¸s ise orada kalan kod çalı¸stı % böylece kontrol süre geçmesi gerekir. end %% Bu kod kısmı ÇALI¸SIYOR (!!!) minör ba¸slayanlar ile u˘gra¸smak. elseif (isempty(starters_queue) & isnotempty(minor_starters_queue)) currentminor=minor_starters_queue(1,:); currentsegment=[]; if ismymember(currentminor,visited) % iskeletize ’A’ ikinci kesi¸sme minor_starters_queue=del_pixel(currentminor,minor_starters_queue); continue; end visited=[visited;currentminor]; % ziyaret edilen kümesine currentmin 49
  • 51. neighbours=findneighbours(image,currentminor); % Mevcut minör kom¸sul temp=1; while temp<=size(neighbours,1) %Mevcut Minors kom¸sular listesinden z current_neighbour=neighbours(temp,:); if (ismymember(current_neighbour,visited) | ismymember(current_neigh 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(’arkada¸s, geçerli minör ikiden fazla Gezilmemi¸s kom¸suları 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
  • 52. %% Bu kod satırı currentpixel i¸sler. while(isnotmember(currentpixel,visited)) %% Bu hücrenin noktası mevcut piksel ne ise bir sonraki piksel bulma % kesi¸sim ne Starter ne minör. if(isnotmember(currentpixel,intersections) & isnotmember(currentpixe % fonksiyonel geçerli piksel kesi¸simleri ise, ayrıca mevcut piksel neighbours=findneighbours(image,currentpixel); visited=[visited;currentpixel]; %% kom¸suları ziyaret piksel yanı sıra ba¸slatıcı silme ve bir sonraki 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 kom¸suları listesindeki tüm minör starterları t if size(neighbours,1)>2 %kom¸sularından biri minör Starter ise bu dur 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
  • 53. 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 edilmi¸s kom¸suların kaldır %bu nedenle bu iki adet ziyaret edilmemi¸s bulunmaktadır.Burada bunla first_neighbour=neighbours(1,:); second_neighbour=neighbours(2,:); % kom¸sularının biri oldu˘gu bir durum olu¸sabilir. % kesi¸sim öyleyse bu piksel kadar çoksa, burada segmenti durdurmak v %piksel dü¸sünelim.else continue if ismymember(first_neighbour,intersections)|ismymember(second_neigh 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
  • 54. end minor_starters_queue=[minor_starters_queue;first_neighbour;second_ne 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 kom¸sularının oldu˘gundan bunlardan biri bir kesi¸sim olac %Bu kesi¸sim bulmak ve burada parçayı sonlandırmak zorunda. %küçük bir Starter var hiçbiri olmazsa, uç noktası olarak dü¸sünmek y %display(’hi, ikiden fazla Gezilmemi¸s kom¸suları 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
  • 55. end end % Bundan sonra döngü kesi¸sti˘gi hariç tüm pikseller önemsenmemi¸s olac %bu nedenle, hepsi minor_starters_queue eklenmelidir. %o zaman sadece bir tanesi kabul edilecektir kom¸suları ikiden fazla 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 kesi¸sti˘gi oldu˘gu durumla ba elseif (ismymember(currentpixel,intersections)) %ikiden fazla kom¸su visited=[visited;currentpixel]; neighbours=findneighbours(image,currentpixel); unvisited_neighbours=[]; %Gezilmemi¸s kom¸suları 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çi¸si yönü korunmu¸s olup olma for i=1:size(unvisited_neighbours,1) current_neighbour=unvisited_neighbours(i,:); current_neighbour_direction=finddirection(currentpixel,current_neigh if current_neighbour_direction==previousdirection direction_flag=1; currentsegment=[currentsegment;currentpixel]; previouspixel=currentpixel; 54
  • 56. currentpixel=current_neighbour; unvisited_neighbours=del_pixel(current_neighbour,unvisited_neighbour minor_starters_queue=[minor_starters_queue;unvisited_neighbours]; unvisited_neighbours=[]; break; end % kom¸su piksellerin hiçbiri geçerli çapraz geçi¸si yönünde nerede old %Daha sonra bunların her minor_starters_queue eklenmelidir. %Örnek için alt bölümüne bakın. %sonu burada gerçekle¸sirse, hepsini st ilave edilmelidir, %pikselin bir döngü ba¸ska bundan sonra, mevcut çapraz geçi¸si yönünde 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 oldu˘gunun anla¸sı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
  • 57. segments{N}=currentsegment; N=N+1; end end end % ¸Simdi tüm segmentler nedeniyle sıfır sınırına ekleyerek orijinal k 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çi¸si (1,4) ba¸slayacak ve (1,2) ula¸stı˘gında, z % cpr=currentpixel(1);cpc=currentpixel(2); %cpr geçerli piksel satır ve oldu˘gunu. % tbm geçerli piksel sütundur. % [1 0 1 % 0 1 0 % 0 1 0] %ba¸slangıç piksel ne olursa olsun, bu durumda, merkez pikselde, çapr 4.4 find neighbours %Bu fonksiyon, bir görüntü alacak ve merkez pikselin koordinatları v % Bu 1 olarak de˘ger merkezi pikselin tüm kom¸sularının koordinatların function [neighbours]=findneighbours(image,coords) imwindow=image((coords(1)-1):(coords(1)+1),(coords(2)-1):(coords(2)+ neighbours=[]; imwindow(2,2)=0; %% Bunun nedeni açıktır !!!!!!!!! olmalı indexes=find(imwindow==1); for i=1:length(indexes) currentindex=indexes(i); 56
  • 58. row=rem(currentindex,3); if(row==0) row=3; %rem (currentindex, 3) sıfır olacaktır e˘ger onun 3. satırda. end column=ceil(currentindex/3); neighbours=[neighbours;[row,column]]; end neighbours(:,1)=coords(1)+(neighbours(:,1)-2); % merkez piksel ’kom¸s neighbours(:,2)=coords(2)+(neighbours(:,2)-2); 4.5 find direction %Fonksiyon find_direction argümanlar ilk merkez piksel olarak ilk pi %iki piksel koordinatlarını alır.Numaralandırma saat yönünün oldu˘gun %Merkez pikselin altına piksel 1 olarak numaralandırılmı¸s ve kalan s 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
  • 59. 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 giri¸si her ba¸slatıcı ve kesi¸smeler vererek bana yardım et % Bu geçerli görüntüdeki tüm Starter noktalarını bulur kod (çok kötü %Sorun kontrolleri altındaki kodu verilen görüntüdeki tüm pikselleri %bir Starter noktası, olup olmadı˘gını kontrol etmek olması. huffffff % kesi¸smeler 3 ya da daha fazla kom¸suları olan piksellerdir. % Bu kodda eser bir yazıda Blumenstein, Verma ve H.Basli tarafından 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 gidiy image=[image,zeros(size(image,1),1)]; % Sa˘g 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
  • 60. % 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
  • 61. 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==currentd 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
  • 62. if(rem(currentdirection,2)==0) %alt piksel 1 ve daha sonra piksel pi 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 dengel intersections=intersections-1; %consider matrix [1 1 0 % 0 1 0 % 0 0 1] % ikiden fazla kom¸suları vardır, ama belli ki bir kav¸sak de˘gil çünkü %tanımına göre burada merkezi piksel bir kesi¸sim olarak kabul edilec %Görüntünün iskeleti boyunca seyahat dü¸sünün.En a¸sa˘gı-sa˘g pikselden % ¸Simdi bu merkez piksel (yukarı ve yukarı-sol), kod kesi¸sim olarak %Yolu bu kalan iki kom¸su bu 3 * 3 penceresinde biti¸sik olup olmadı˘gı %Bunun için, onlar aynı satır veya sütunda olup olmadı˘gını kontrol e % Koduyla ba¸ska sorun harfi ’C’ dü¸sünmeleridir. Olası bir olay matri % 1 0 0 0 % 1 1 1 1] 61
  • 63. % Burada piksel (2,1), bu 4 kom¸sular vardır dü¸sünün.Yani bir kes %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 edi %(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 sa˘g üst kö¸sesinde piksel ile kontrol edecek % if image(1,column)==1 % neighberhood=[image(1,column-1),image(2,column-1),image(2,colu % 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
  • 64. % 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 sa˘g alt kö¸sede piksel kontrol edecek. % if image(row,column)==1 % neighberhood=[image(row-1,column-1),image(row,column-1),image( % 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
  • 65. % 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 sa˘g 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
  • 66. % 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
  • 67. ÖZGEÇM˙I¸S K˙I¸S˙ISEL B˙ILG˙ILER Adı Soyadı :Mustafa Köstek Uyru˘gu : T.C Do˘gum Yeri ve Tarihi: Çayıralan 9/5/1993 Adres : bilecik Telefon : e-mail : mustafakostek@gmail.com E ˘G˙IT˙IM DURUMU Lisans Ö˘grenimi : Bilecik ¸Seyh Edebali Üniverstesi, Bilecik Bitirme Yılı : 2015 Lise : Edremit Anadolu Lisesi ˙I¸S DENEY˙IMLER˙I Yıl : 2013 Kurum : ˙IZSU Stajlar : ˙ILG˙I ALANLARI YABANCI D˙ILLER : ˙Ingilizce,almanca 66