Paint with pre-formed character, with feature elicitation method using image processing methods with matlab obtained feature vectors are then trained with the aid of weka, which was found to be more successful in the learning process.
Technically After dynamics calculations with the physical characteristics of the vehicle car speed by using timer in the form of animation at # programming language and made the speed of simulation also inclined roads, fuel consumption, cruise concept in detail validated, the project name of a user to shift the throw data implies key means of artificial intelligence user imitative automatic transmission was developed using the algorithm.
Technically After dynamics calculations with the physical characteristics of the vehicle car speed by using timer in the form of animation at # programming language and made the speed of simulation also inclined roads, fuel consumption, cruise concept in detail validated, the project name of a user to shift the throw data implies key means of artificial intelligence user imitative automatic transmission was developed using the algorithm.
SAP PP (Üretim Planlama) Kitabımın tüm detayları ile birlikte düzenlemesi bitmiştir. Yayıncı kurum tarafından çıkarmayacağım. İlgilenen arkadaşlar Email adresimden ulaşabilirler.Aksoy.erdi.1988@gmail.com
Proje Kontrol Açıklamalı El Kitabı v.02.01Yusuf Yıldız
Bu kitapçık T.M.M.O.B İnşaat Mühendisleri Odası İzmir ve Bursa Şubeleri tarafından, statik proje hazırlayan üyelerimize bir yol göstermesi ve kontrol hizmetinin daha sağlıklı yapılabilmesi için hazırlanmıştır.
SAP PP (Üretim Planlama) Kitabımın tüm detayları ile birlikte düzenlemesi bitmiştir. Yayıncı kurum tarafından çıkarmayacağım. İlgilenen arkadaşlar Email adresimden ulaşabilirler.Aksoy.erdi.1988@gmail.com
Proje Kontrol Açıklamalı El Kitabı v.02.01Yusuf Yıldız
Bu kitapçık T.M.M.O.B İnşaat Mühendisleri Odası İzmir ve Bursa Şubeleri tarafından, statik proje hazırlayan üyelerimize bir yol göstermesi ve kontrol hizmetinin daha sağlıklı yapılabilmesi için hazırlanmıştır.
Bu tez çalışmasında NovaproOpen SCADA' sı tanıtılmıştır. NovaproOpen SCADA'sının örnek tesisteki ısıtma ve havalandırma sistemlerine uygulaması anlatılmıştır. Örnek uygulamadıki sısıtma ve havalandırma sistemeleri elektriksel ve mekaniksel kontrolü hakkında bilgi verilmiş, SCADA sistemi tanıtılmış NovaproOpen SCADA sisteminin özellikleri, Sauter EYR 203 F002 PLC' ler ve ECOS EYE 200 DDC' ler ile haberleşmesi anlatılmıştır.
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
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
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
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
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