You are on page 1of 45

T.C.

ULUDAĞ ÜNİVERSİTESİ

MÜHENDİSLİK VE MİMARLIK FAKÜLTESİ

ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ

OTOMATİK GENİŞ ALAN GÖZETLEME SİSTEMİ

YASİN TUNÇER

BEYZA ŞAHİN

MELİSA KARA

BURSA – 2017
T.C.

ULUDAĞ ÜNİVERSİTESİ

MÜHENDİSLİK VE MİMARLIK FAKÜLTESİ

ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ

OTOMATİK GENİŞ ALAN GÖZETLEME SİSTEMİ

MÜHENDİSLİK TASARIMI-Ⅱ

2016 – 2017 BAHAR DÖNEMİ

HAZIRLAYAN

YASİN TUNÇER - 031210074

BEYZA ŞAHİN - 031210070

MELİSA KARA - 031210112

DANIŞMAN

Prof. Dr. Tuncay ERTAŞ

BURSA – 2017

2
ÖZET

Otomatik geniş alan denetleme sistemimizde görüntü bileşenlerinden faydalanıp


görüntüler üzerinden hedef dedeksiyonu, hareket algılama ve takip gibi işlemleri
gerçekleştirmek amaçlanmıştır. Bu sistemi yapımında arduino, servo motor ve webcam
materyallerinden faydalanılmıştır. Yazılım olarak Visual Studio C++ ve MATLAB
programı ve OpenCV kütüphanesi kullanılmıştır.

Sistemimiz belirli açılarda aldığı frame örneklerini mozaikleyerek bir bütün halinde
geniş bir alandaki değişimleri analiz etmektedir. Kamera servo motor yardımıyla
hareket ettirilecektir. Alınan görüntü örnekleri görüntü işleme teknikleri kullanılarak
anlamlı veri çıkarımı sağlanacaktır. Bu noktada MATLAB ve OpenCV
kütüphanelerinden faydalanılacaktır. Elde edilen verilerle geniş alan gözetlemesi
amaçlanmaktadır.

3
İÇİNDEKİLER

1. GİRİŞ.……………………………………………………………………………………………………………………………………5
2. KAYNAK ARAŞTIRMASI.………………………………………………………………………………………………………..7
3. GÖRÜNTÜ İŞLEME…………………………………………………………………………………………………………………8
3.1. MATLAB..….…………………………………………………………………………………………………………..8
3.2. OpenCV..……………………………………………………………………………………………………………..10
3.2.1. OpenCV 3.0 ve Microsoft Visual Studio 2015 kurulumu…….………………..11
3.2.1.1. OpenCV 3.0 Kurulumu…………………………………………………………..11
3.2.1.2. Microsoft Visual Studio 2015 OpenCV Kütüphanesi Ekleme…12
4. ALGORİTMALAR……..…………………………………………………………………………………………………………..15
4.1. SIFT…………………………………………………......................................................................15
4.1.1. DoG Filtresi…..……..…..………………….………………………………………………………16
4.1.2. Gauss Filtresi…..……………………………………………………………………………………20
4.2. SURF ………………..…….…………………………………………………………………………………………..21
4.3. RANSAC……………………………………………………………………………………………………………….24
4.4. Moravec .……………………………………………………….……………………………………………………26
4.5. Harris..…………………..…………………………………………………………………………………………….26
5. ARDUINO VE SERVO MOTOR YARDIMIYLA KAMERAYI DÖNDÜRME……………………………………28
5.1. Arduino Mega..……………………………………………………………………………………………………28
5.2. Servo Motor…..……………………………………………………………………………………………………28
5.3. Arduino Mega ve Servo Motorun Fritzing Üzerinden Bağlantısı.…………………………29
5.4. Uygulamanın Arduino Kodu……………………………….……………………………………………….29
6. UYGULAMALAR..…………………………………………………………………………………………………………………29
6.1. Öznitelik Çıkarımı ve SIFT Algoritması………………..…………………….………………………….29
6.1.1. Görüntünün Yumuşatılması (Smooting)……………………………………………….29
6.1.2. Görüntünün Ölçek Uzayı Çıkarımı (Scale Space)…………………………………..30
6.1.3. Gauss Farkı (Diferrencial of Gauss DoG)….……………………………………………31
6.1.4. Key Point Elde İşlemi………………………………………………………………………….…32
6.2. Key Point Eşleştirmesi ve RANSAC Algoritması…………………………………………………….33
6.2.1. SIFT Eşleştirme….………………………………………………………………………………….33
6.2.2. RANSAC Algoritması ve Mozaiklemesi………………………………………………….34
7. TARTIŞMA..…………………………………………………………………………………………………………………………35
8. TEŞEKKÜR……………………………………………………………………………………………………………………………37
9. KAYNAKLAR…………………………………………………………………………………………………………………………38
10. ÖZGEÇMİŞLER…………………………………………………………………………………………………………………..39
11. EKLER………………………………………………………………………………………………………………………………..40

4
1. GİRİŞ

Görüntü işleme gittikçe dijitalleşen dünyada bilgisayarlarla gerçek dünya arasında


köprü olma açısından çok büyük önem taşımaktadır. Günümüzde birçok alanda
bilgisayar teknolojileri olmazsa olmaz bir hal almıştır. Yapay zeka algoritmaları üzerine
gün geçtikçe gerçekleşen yeni çalışmalar bilgisayarların günlük hayatmızın vazgeçilmez
bir parçası kılmıştır. Görüntü işleme bu noktada bilgisayarların gerçek hayatla
bağlantısını sağlama konusunda çok büyük yenilikler ve faydalar sağlamaktadır.

Görüntü işleme, kaydedilmiş olan mevcut görüntüleri işlemek, yani mevcut resim ve
grafikleri değiştirmek, yabancılaştırmak ya da iyileştirmek için kullanılır.

Görüntü işleme teknikleri:

Öznitelik, temel olarak görüntüye ait ölçülebilir ya da gözlenebilir bilgi şeklinde ifade
edilebilir. Başka bir deyişle, herhangi bir ayırt edici durum, nitelik ya da karakteristik
özelliklerdir.

Öznitelik çıkarma ise ilgisiz ve fazla bilgiyi eleyerek görüntüye ait karakteristik
özelliğin elde edilmesini sağlar. Öznitelik çıkarma temel anlamda bir çeşit boyut
azaltma olarak adlandırılabilir.

Öznitelik çıkarımı görüntü mozaiklemenin ilk adımıdır. Öznitelik çıkarma işlemi bir
nevi boyut azaltma işlemidir. Öznitelikler tespit edildikten sonra, öznitelik etrafında
yerel bir yama (patch) elde edilir. Öznitelik çıkarma görüntü işleme sürecinin oldukça
önemli bir bölümünü kapsar.

Doğru yapılmış bir öznitelik çıkarma ve bu özniteliklere uygun bir yapının tasarımı,
sonucun performansını etkileyen önemli unsurlardır. Başarılı bir öznitelik çıkarımının
hedefine ulaşabilmesi için, öznitelik çıkarıcıların iki önemli kriteri yerine getirmesi
gerekmektedir.

5
1. Öznitelik çıkarma işlemi tekrarlanabilir ve kesin olmalıdır, böylece aynı öznitelikler
aynı nesneyi gösteren iki görüntüden çıkarılabilir.

2. Öznitelikler farklı olmalıdır, böylece farklı görüntü yapılarının birbirinden ayrı


oldukları söylenebilir.

Öznitelik çıkarma bir görüntünün diğer görüntüye göre hizalama dönüşümünü bulma
işlemidir. Eğer çıkarılan öznitelikler dikkatle seçilirse, öznitelik kümesinde yer alan
veriden ilgili bilginin çıkarılması ve nihai çıktının bir mozaik görüntü oluşturabilmesi
beklenir.

Görüntü çiftlerinin köşeleri daha iyi bir öznitelik eşlemesi sağlamak için kantitatif
ölçüm verecek şekilde eşleşmelidir. Köşeler, bazı eşleştirme uygulamalarında kullanılan
iyi özniteliklerdir. Köşelerin en önemli özelliği, bakış açısı değişiklikleri üzerinde daha
stabil olmalarıdır. Köşelerin diğer önemli bir özelliği de görüntüde bir köşe var ise
onun komşuluğunda oluşabilecek yoğunluktaki ani bir değişime işaret edebilmeleridir.
Köşe algılama algoritmalarını uygulayarak görüntülerde köşeler tespit edilir. En iyi
bilinen köşe algılama algoritmalarından bazıları Harris köşe algılama algoritması, SIFT
(ölçekten bağımsız öznitelik dönüşümü) ve Moravec köşe algılama algoritmasıdır.

Bu projede köşe algoritmaları olan Harris, SIFT, Moravec dışında SURF ve RANSAC
algoritmaları da kullanılacaktır.

 HARRIS: Bu algoritmada genel yaklaşım, çevreleyen komşulukta birden fazla


yöndeki kenarları gösteren ilgi noktalarının bulunmasıdır ve bunlar görüntünün
köşeleri olarak nitelendirilir.
 MORAVEC: Moravec ilinti noktası kavramını, görüntüdeki farklı bölgeler olarak
tanımlamıştır ve ardışık görüntülerdeki eşlenik bölgelerin bulunabilmesi için bu
noktaların kullanılabileceğini belirtmiştir. Moravec operatörü işlemlerinde, ilinti
noktaları her yönde büyük bir yoğunluk değişimi gösteren noktalar olarak belirtilir.
Bu durum ise köşe noktalarında gerçekleştiği için Moravec operatörü köşe noktası
yakalayıcısı olarak bilinir.
 SURF: SURF ölçek ve dönüklük değişimlerinden etkilenmeyen bir tanımlayıcıdır.
Kısmen SIFT tanımlayıcısından etkilenmiştir. Hesaplanma süresini azaltmak için
tamamlayıcı (integral) görüntüler kullanılmaktadır. SURF tanımlayıcısı detektör

6
olarak Fast-Hessian detektörünü kullanmaktadır. SURF detektörü Hessian
matrisinin determinantına dayanmaktadır. Hessian matrisinin determinantının
maksimum olduğu konum görüntü bölgelerinin elde edilmesinde kullanılmaktadır.
Ölçek ve konum seçimi için iki farklı yöntem kullanmaktan ziyade, her ikisi içinde
Hessian matrisinin determinantı kullanılmaktadır. Hessian matrisinin determinantı
görüntünün 2. dereceden türevi yardımıyla görüntüdeki maksimum ve minimum
noktaların bulunmasında kullanılmaktadır
 SIFT: SIFT algoritması görüntü üzerinden o görüntüye has öznitelik noktaları
çıkarır. SIFT algoritması nesne tanımlama, nesne takibi, karşılaştırma gibi
işlemlerde kullanılır. Ölçekten, dönüklükten ve açıdan bağımsız olması sebebi ile
Harris ve Moravec gibi algoritmalara karşı daha iyi sonuçlar verir.
 RANSAC: RANSAC altında yatan model parametreleri tahmin etmek için gereken
en az sayıda gözlemi (veri noktalarını) kullanarak aday sonuçlar üreten bir
örnekleme tekniğidir. RANSAC algoritması alınan farklı görüntülerden çıkarılan
öznitelikleri eşleyerek görüntüleri haritalandırır.

Tüm bu algoritmaları servo motor üzerine yerleştirdiğimiz webcam, 0-180 derece


aralığında belirli açılarda frame alarak ilerler sonra bu görüntüleri mozaikleyerek
mozaiklenen görüntü üstünden bölgeyi inceler. Bu işlem 180 dereceye kadar yapılır ve
sonra geri dönüş işlemi başlar ve sistem sürekli tekrarlanır. Görüntülerin
karşılaştırılmasında herhangi bir cisim ya da canlı görüntüye girdiğinde bu algılanır ve
sistem bunun için uyarı verir. Görüntü üstünde bu incelemelerin yapılabilmesi için
yukarıda bahsi geçen algoritmalardan faydalanılır.

2. KAYNAK ARAŞTIRMASI

Yapacağımız proje için “Hareketli Kamerada Gerçek Zamanlı Orman Yangın Duman
Tespiti” tezinden fikir aldık. Bu tezin amacı hareketli kamerada görüntü işleme yöntemi
kullanılarak orman yangın dumanını sadece bir adet kamera ile 360° gözlemleme
yaparak tespit etmeye çalışılmaktır. Bizim projemizin ise hareketli kamerada görüntü
işleme yöntemi kullanılarak belirlediğimiz eşik değerinin üzerindeki nesneler sadece bir
adet kamera ile 180° gözlemleme yaparak tespit etmeye çalışmak. Her iki projede de
kameralar 24 saat boyunca görüş alanlarını takip etmektedir. Tezde olası bir yangın
veya duman olması durumu, projemizde ise istemediğimiz nesne bulunması durumu

7
15–25 saniye içinde tespit edilerek ilgili kişi ve yerleri uyarılmaktadır. Her iki projede
de anahtar noktaların tespiti için SIFT yöntemi kullanılabilir.

3. GÖRÜNTÜ İŞLEME

3.1. MATLAB

MATLAB (MATrix LABoratory), 1985’de C.B Moler tarafından, özellikle matris


temelli matematik ortamında kullanılmak üzere geliştirilmiş etkileşimli bir paket
programlama dilidir.

MATLAB mühendislik hesaplamalarında; sayısal hesaplama, veri çözümleri ve grafik


işlemleri için genel amaçlı bir programdır. Bununla beraber özel amaçlı modüler
paketlere de sahiptir. Control toolbox, signal toolbox, image processing toolbox vb gibi
paket programlar (CACSD), denetim sistemlerinin tasarımında çok etkili araçlardır.

Görüntü işlemede MATLAB kullanımı yaygın olduğu için bu projede MATLAB’a


geniş bir yer verildi.

Sayısal görüntü işlemede sensörlerden gelen görüntünün bilgisayara aktarılıp üzerinde


herhangi bir işlem yapılması ve ardından görüntüleyici çıkışa iletilmesi işlemi yapılır.

Şekil [ 3.1]: Sayısal görüntünün bilgisayardan çıkış şeması

Analog bir görüntü ve bu görüntünün örneklenmesi ile elde edilen sayısal görüntünün

matrissel içeriği aşağıdaki şekilde verilmiştir.

8
Şekil[3.2]:Analog resmin matris formu

Bir sayısal görüntü, analog resmin örneklenmesi ve kuantalanması sonucunda


elemanları reel sayılardan oluşan bir matrix formunda ifade edilir. Yani f(x,y)
şeklindeki bir sayısal image, M satır N sütundan oluşmuş MxN elemanlı bir matristir.

𝑓(0,0) 𝑓(0,1) ⋯ 𝑓(0, 𝑁 − 1)


𝑓(1,0) 𝑓(1,1) ⋯ 𝑓(1, 𝑁 − 1)
𝑓(𝑥, 𝑦) = ⋮ ⋮ ⋱ ⋮
[𝑓(𝑀 − 1,0) 𝑓(𝑀 − 1,1) ⋯ 𝑓(𝑀 − 1, 𝑁 − 1)]

Sayısallaştırılmış görüntüyü ifade eden matris formu

𝑓(1,1) 𝑓(1,2) ⋯ 𝑓(1, 𝑁)


𝑓(2,1) 𝑓(2,2) ⋯ 𝑓(2, 𝑁)
𝑓= ⋮ ⋮ ⋱ ⋮
[𝑓(𝑀, 1) 𝑓(𝑀, 2) ⋯ 𝑓(𝑀, 𝑁)]

Sayısal görüntüyü ifade eden MATLAB matris formu

9
Matlabın desteklediği önemli resim formatları:

Tablo [3.1]:Matlab için önemli resim formatları

3.2. OpenCV

OpenCV (Open Source Computer Vision) açık kaynak kodlu görüntü işleme
kütüphanesidir. 1999 yılında Intel tarafından geliştirilmeye başlanmış daha sonra Itseez,
Willow, Nvidia, AMD, Google gibi şirket ve toplulukların desteği ile gelişim süreci
devam etmektedir. İlk sürüm olan OpenCV alfa 2000 yılında piyasaya çıkmıştır. İlk
etapta C programlama dili ile geliştirilmeye başlanmış ve daha sonra birçok algoritması
C++ dili ile geliştirilmiştir. Open source yani açık kaynak kodlu bir kütüphanedir ve
BSD lisansı altında geliştirilmektedir. BSD lisansına sahip olması bu kütüphaneyi
istediğiniz projede ücretsiz olarak kullanabileceğiniz anlamına gelmektedir. OpenCV
platform bağımsız bir kütüphanedir, bu sayede Windows, Linux, FreeBSD, Android,
Mac OS ve iOS platformlarında çalışabilmektedir. C++, C, Python, Java, MATLAB,
EmguCV kütüphanesi aracılığıyla da Visual Basic.Net, C# ve Visual C++ dilleri ile
topluluklar tarafından geliştirilen farklı wrapperlar aracılığıyla Perl ve Ruby
programlama dilleri ile kolaylıkla OpenCV uygulamaları geliştirilebilir.

10
OpenCV kütüphanesi içerisinde görüntü işlemeye (image processing) ve makine
öğrenmesine (machine learning) yönelik 2500’den fazla algoritma bulunmaktadır. Bu
algoritmalar ile yüz tanıma, nesneleri ayırt etme, insan hareketlerini tespit edebilme,
nesne sınıflandırma, plaka tanıma, üç boyutlu görüntü üzerinde işlem yapabilme,
görüntü karşılaştırma, optik karakter tanımlama OCR (Optical Character Recognition)
gibi işlemler rahatlıkla yapılabilmektedir.

OpenCV kütüphanesini daha iyi anlamak için mimarisinden ve OpenCV’yi oluşturan


bileşenlerden bahsedelim.

• Core: OpenCV’nin temel fonksiyonları ve matris, point, size gibi veri yapılarını
bulundurur. Ayrıca görüntü üzerine çizim yapabilmek için kullanılabilecek metotları ve
XML işlemleri için gerekli bileşenleri barındırır.

• HighGui: Resim görüntüleme, pencereleri yönetme ve grafiksel kullanıcı arabirimleri


için gerekli olabilecek metotları barındırır. 3.0 öncesi sürümlerde dosya sistemi
üzerinden resim dosyası okuma ve yazma işlemlerini yerine getiren metotları
barındırmaktaydı.

•.Imgproc: Filtreleme operatörleri, kenar bulma, nesne belirleme, renk uzayı yönetimi,
renk yönetimi ve eşikleme gibi neredeyse tüm fonksiyonları içine alan bir pakettir. 3 ve
sonra sürümlerde bazı fonksiyonlar değişmiş olsada 2 ve 3 sürümünde de birçok
fonksiyon aynıdır.

• Imgcodecs: Dosya sistemi üzerinden resim ve video okuma/yazma işlemlerini yerine


getiren metotları barındırmaktadır.

• Videoio: Kameralara ve video cihazlarına erişmek ve görüntü almak ve görüntü


yazmak için gerekli metotları barındırır. OpenCV 3 sürümü öncesinde bu paketteki
birçok metot video paketi içerisindeydi.

3.2.1.OpenCV 3.0 ve Microsoft Visual Studio 2015 Kurulumu

3.2.1.1. OpenCV 3.0 Kurulumu

1.) http://opencv.org/downloads.html adresinden OpenCV 3.0 versiyonu indirilir.


2.) İndirilen OpenCV dosyası C:\ dizinine çıkarılır.

11
3.) 'Bilgisayarım' simgesine sağ tıklandıktan sonra 'Özellikler' seçeneği seçildikten
sonra aşağıdaki gibi bir görüntü açılır:
4.) ‘Gelişmiş Sistem Ayarları’ veya 'Advance System Settings' seçildikten sonra ‘Ortam
Değişkenleri’ veya 'Environment Variables' seçilir.
5.) Daha sonra sistem değişkenlerinden Path kısmı seçilir ve düzenlenir.
6.) Düzenlenen kısma Opencv\Bin dizini bulunur ve eklenir.
7.) Değişikler uygulanır ve sayfalar kapatılabilir.
8.) Birinci aşama tamamlandı.

Şekil [3.4]: OpenCV 3.0 kurulum aşaması

3.2.1.2. Microsoft Visual Studio 2015 OpenCV Kütüphanesi Ekleme

1.) Yeni bir C++ Win32 console projesi açılır.

12
Şekil [3.5]: Microsoft Visual Studio’ya OpenCV kütüphanesi eklenmesi ilk aşama
2.) Yapılandırma yöneticisi (Configuration Manager) Debug ve x64 seçilir.

Şekil [3.6]: Microsoft Visual Studio’ya OpenCV kütüphanesi eklenmesi ikinci


aşama
3.) Solution explorerden projemize sağ tıklanır ve properties penceresi açılır.
4.) Burada VC++ Directories de;
İnclude directories : Opencv\include dizini bulunur ve eklenir.
Library directories : Opencv\lib dizini bulunur ve eklenir.

13
Şekil [3.7]: Microsoft Visual Studio’ya OpenCV kütüphanesi eklenmesi üçüncü
aşama
5.) Linker bölgesi seçilir input seçilir ve kütüphane dosya adları projemize tanıtılır.

Şekil [3.8]: Microsoft Visual Studio’ya OpenCV kütüphanesi eklenmesi dördüncü


aşama

14
6.) Kurulum tamamlanmıştır. Visual Studio için OpenCV kütüphane tanımlamalarının
açılan her proje için gerçeklenmesi gerekmektedir.

4. ALGORİTMALAR

4.1. SIFT

Lowe (2004) tarafından geliştirilen SIFT (Scale Invariant Feature Transform)


algoritması tek bir görüntü dilimini giriş olarak almakta ve bu görüntü üzerindeki
öznitelik bilgilerini vermektedir. SIFT, bir görüntüdeki köşe özniteliklerini algılayan bir
algoritma olup bir görüntüden tanımlayıcı bir küme çıkarır. Çıkarılan tanımlayıcıların
her biri bir görüntünün çevrilmesi (translation), döndürmesi (rotation) ve uzaklaştırması
(zoom-out) için değişmezdir. SIFT tanımlayıcıları, eşleştirme amaçları için ayırt etmede
yeterli kalır, üstelik hafif bakış açısı değişiklikleri, gürültü, bulanıklığı, kontrast
değişiklikleri ve sahne deformasyonları gibi geniş görüntü dönüşüm ailesine karşı
dayanıklı olduğunu ispatlamıştır. Bu özellikler, hareketli görüntüler üzerinde
çalışılabilmesi için oldukça kullanışlıdır. Ayrıca diğer görüntülerdeki benzer nesneleri
tanımlamak içinde kullanılabilir. SIFT yüksek çözünürlüklü görüntülerde nesne
algılama için çok uygundur. 500x500 boyutundaki görüntüden yaklaşık 2000 özellik
bulunabilir.

Öznitelik belirleme, robotik sistemlerde nesne tanımlama ve takip etme, fotoğrafçılıkta


mozaikleme gibi farklı birçok görüntü işleme uygulamasında kullanılabilir.

SIFT algoritmasının adımları aşağıdaki gibidir:

1. Gauss ölçek alanı hesaplanır,

2. Gauss (DoG) farkı hesaplanır,

3. Aday anahtar noktalar (DoG 3B ayrık ekstremumlar) bulunur,

4. Alt-piksel hassasiyeti ile aday anahtar noktaların yeri belirginleştirilir,

5. Gürültü nedeniyle kararsız anahtar noktaları filtrelenir,

6. Kenarlarda bulunan kararsız anahtar noktaları filtrelenir,

15
7. Her anahtar noktaya referans bir yön atanır,

8. Anahtar nokta tanımlayıcıları oluşturulur.

4.1.1. DoG Filtresi

SIFT; ölçek uzayı için DoG (Difference of Gaussian) filtresi kullanır. Çünkü Gauss’ un
Laplace normalizazyonu için stabil ve verimlidir.

Şekil [4.1]: Difference of Gaussian (DoG) örneği

Görüntüdeki kenar bölgelerinin ve diğer ayrıntıların ortaya çıkarılmasında kullanılır.


Benzer algoritmalar, yüksek frekans noktalarını açığa çıkartmaktadır. Rastgele gürültü
yüksek frekans içerdiğinden bu arzu edilen bir durum değildir. DoG, yüksek frekans
ayrıntılarını yok etmesi sebebiyle bu tür gürültüleri de yok edebilmektedir

Ölçek uzayı oluşturma

Şekil [4.2]: Ölçek uzayı oluşturma şematiği

16
Ölçek uzayı oluşturmada Gauss çekirdeği kullanılır.

L(x, y, σ) = G(x, y, σ) * I(x, y)

1 2 +𝑦 2 )/2𝜎 2
G(x, y, σ) = 𝑒 −(𝑥
2𝜋𝜎 2

Gaussların Farkını Alma

𝜕𝐺 𝐺(𝑥,𝑦,𝑘𝜎)−𝐺(𝑥,𝑦,𝜎)
σ∇2 G = ≈
𝜕𝜎 𝑘𝜎− 𝜎

G(x, y, kσ) ̶ G(x, y, σ) ≈ (k ̶ 1)σ2∇2G

D(x, y, σ) = [G(x, y, kσ) ̶ G(x, y, σ)] * I(x, y)

=L(x, y, kσ) ̶ L(x, y, σ)

Bir sonraki düzey için σ 2 kat artar.

Şekil [4.3]: Ölçek uzayı oluşturma şeması

Düzeylere bölme sadece verimlilik amacıyla yapılır.

DoG’un İlinti Noktaları Lokalizasyonu

Her DoG resmi görüntülenir;

 Tüm komşu noktalarına bakılır

17
 Minimum ve maksimumunu belirlenir
 X eğer diğer 26 komşudan büyük ya da küçükse seçilir.

Şekil [4.4]: Dog filtresi uygulanmış iki resim arasındaki fark

Alt Piksel Hassasiyeti ile Aday Anahtar Noktaların Yerinin Belirginleşmesi

3D eğri uydurma;

𝜕𝐷𝑇 1 𝜕2 𝐷
Taylor Seri Açılımı: D(x) = D+ x+ xT 2 x
𝜕𝑥 2 𝜕𝑥

𝜕2 𝐷−1 𝜕𝐷
x̂ = ̶
𝜕𝑥 2 𝜕𝑥

18
Filtre Köşe ve Düşük Kontrast Cevapları

Köşe yanıtlarının eliminasyonu:

Tr(H ) = Dxx + Dyy = a + b, Det(H ) = Dxx Dyy ̶ (Dxy )2 = ab

𝑇𝑟(𝐻)2 (𝑟+1)2
<
𝐷𝑒𝑡(𝐻) 𝑟

Şekil [4.5]: Köşe yanıtlarının eliminasyonu


Düşük kontrastlı köşelerin eliminasyonu:

Düşük kontrast noktaları filtresi için önceden bulunan yerdeki ölçek uzayını kullanır.

1 𝜕𝐷𝑇
D(x̂ ) = D+ x̂
2 𝜕𝑥

Şekil[4.6] : Düşük kontrastlı köşe eliminasyonu

19
Yönelimin Belirlenmesi

Tutarlı bir yönelim yapılabilmesi için ilinti noktası tanımlayıcı yönelim bağımsız
olabilir.

İlinti noktası için, L en yakın ölçekte Gauss yumuşatma ile yumuşatılmış görüntüdür.

m(x, y) = √[𝐿(𝑥 + 1, 𝑦) − 𝐿(𝑥 − 1, 𝑦)]2 + [𝐿(𝑥, 𝑦 + 1) − 𝐿(𝑥, 𝑦 − 1)]2

θ(x, y) = tan-1[(L(x, y+1) ̶ L(x, y-1))/(L(x+1, y) ̶ L(x-1, y))]

Local Görüntü Bulucu

Eşik değer uygulanmış görüntü gradyentleri 16x16 boyutunda örneklenir.

Vektör yönelim histogramları oluşturulur.

(8 yönelim) x (4x4 histogram alanı) = 128 boyut

Eğer boyut 0.2 den büyükse normalleştirilmemiş, aksi takdirde normalleştirilmiş.

Şekil [4.7]: Dog filtresinin matris formu

4.1.2. Gauss Filtresi

Gauss filtresi verilen bir resim üzerinde düzleştirme işlemi uygulamak için kullanılır.
Diğer bir tabirle resim üzerindeki gürültüyü kaldırır.

20
Gauss filresinin genel formülü aşağıdaki gibidir:

1 2 /(2𝜎 2 )
G(r) = 𝑒 −𝑟
(2𝜋𝜎 2 )𝑁/2

Bu formülün 2 boyutlu resimler için sadeleştirilmiş hali (N=2 için) aşağıda verilmiştir:

1 2 +𝑣 2 )/(2𝜎 2 )
G(u, v) = 𝑒 −(𝑢
2𝜋𝜎 2

Gauss dağılımının (aynı zamanda normal dağılım olarak da adlandırılır) standart sapma
değerinin fikir vermesi açısından aşağıdaki resim faydalı olabilir:

Şekil [4.8]: Gauss filtresinin grafiksel tarifi

4.2. SURF

SURF (Speeded Up Robust Features) ölçek ve dönüklük değişimlerinden etkilenmeyen


bir tanımlayıcıdır. SURF yöntemi ilk olarak 2006 yılında Herbert Bay tarafından ortaya
atılmıştır. Kısmen SIFT tanımlayıcısından esinlenilmiştir. SURF 2 boyutlu Haar
dalgacık yanıtlarının toplamına dayanmaktadır. Hesaplama süresini azaltmak için
tamamlayıcı (integral) görüntüler kullanılmaktadır.

Tamamlayıcı görüntüler verilen dikdörtgen bir alanın hızlı bir şekilde hesaplanmasını
sağlamaktadır. I(x,y) konumunda IΣ(x) tamamlayıcı görüntüsü, nokta ve onun

21
merkezinde şekillenmiş dikdörtgen bir alan içindeki I giriş görüntüsündeki bütün
piksellerin toplamıdır.

j≤y
IΣ (x) = ∑i≤x
i=0 ∑j=0 I(i, j)

Fast-Hessian Detektörü: SURF tanımlayıcısı detektör olarak Fast-Hessian detektörünü


kullanmaktadır. SURF detektörü Hessian matrisinin determinantına dayanmaktadır.
Hessian matrisinin determinantının maksimum olduğu konum görüntü bölgelerinin
(blob) elde edilmesinde kullanılmaktadır. Ölçek ve konum seçimi için iki farklı yöntem
kullanmaktan ziyade, her ikisi için de Hessian matrisinin determinantı kullanılmaktadır.

𝜕2 𝐼 𝜕2 𝐼
𝜕𝑥 2 𝜕𝑦𝜕𝑥
H(I(x, y)) = [ 𝜕2 𝐼 𝜕2 𝐼
]
𝜕𝑥𝜕𝑦 𝜕𝑦 2

𝜕2 𝐼 𝜕2 𝐼 𝜕2 𝐼
Det(H(I(x, y))) = ̶ ( )2
𝜕𝑥 2 𝜕𝑦 2 𝜕𝑥𝜕𝑦

I görüntüsü içindeki σ ölçeğinde bir P(x,y) noktasındaki Hessian matrisi:

𝐿𝑥𝑥 (𝑃, 𝜎) 𝐿𝑥𝑦 (𝑃, 𝜎)


H(P, σ) = [ ]
𝐿𝑥𝑦 (𝑃, 𝜎) 𝐿𝑦𝑦 (𝑃, 𝜎)

𝜕2
Lxx(P,σ), I görüntüsündeki P noktasının Gaussun 2. dereceden türevinin g(G)
𝜕𝑥 2
alınması ile elde edilmektedir. Görüntünün 2. dereceden kısmi türevini almak için
görüntü uygun bir çekirdek (kernel) ile (convolution) yaklaşıklanır.

Tahmini Gausslar kullanılarak Hessianın determinantı hesaplanmaktadır:

Det(Happrox) = DxxDyy ̶ (wDxy)2

2. Dereceden Gaussun kısmi türevlerinin x, y, xy yönünde ağırlıklandırılmış kutu filtre


yaklaşımı (tahmini) Dxx, Dxy, Dyy ile gösterilmektedir.

Ölçek uzayı oluşturulması: Eşleştirilmesi istenen görüntüler farklı ölçeklerde olabilir


veya detaylar farklı ölçeklerden elde edilebilmektedir. Bir ölçek uzayı bütün olası

22
ölçekler karşısında maksimumu bulmak için kullanılabilen sürekli bir fonksiyondur.
Ölçek uzayı genellikle görüntü piramitleri şeklindedir. Görüntüler defalarca bir
Gaussian ile yumuşatılmakta, sonra piramidin en üst seviyesine ulaşmak için boyutta
azaltma yapılmaktadır.

İlgi noktası yerelleştirmesi Görüntüdeki ilgi noktalarını konumlandırılması 3 aşamada


gerçekleşmektedir. İlk aşamada önceden belirlenen eşik değerinin altındaki cevaplar
elenmektedir. Bu şekilde en güçlü olan noktalar elde edilmektedir.

Eşikleme aşamasından sonra bir 3*3*3 komşuluğunda maksimum olmayan noktaların


elenmesi yapılmaktadır. Bu şekilde aday ilgi noktaları elde edilmektedir. Ölçek
uzayında bu aşamanın gerçekleştirilmesi için her piksel alt ve üst ölçeğinde 9’ar
komşusu ve ana ölçekte 8 komşusu olmak üzere toplam 26 komşusu ile
karşılaştırılmaktadır.

Konumlandırmadaki son aşamada Hessian matrisinin determinantının maksimumları


görüntü uzayında ve ölçekte nokta konumlarını bulmak için enterpole edilmektedir.

𝜕𝐻 𝑇 1 𝜕2 𝐻
H(x) = H+ x+ xT x
𝜕𝑥 2 𝜕𝑥 2

Maksimum konum, x̂ = (x, y, σ) Hessian matrisinin türevi alınıp sıfıra eşitlenerek elde
edilmektedir.

𝜕2 𝐻 𝑇 𝜕𝐻
x̂ = ̶
𝜕𝑥 2 𝜕𝑥

Buradaki türevler komşu piksellerin sonlu farkları ile tahmin edilmektedir. Eğer x̂; x, y
veya σ yönlerinde 0,5’ten büyükse enterpolasyon tekrar yapılmaktadır. Tüm yönlerde x̂
değeri 0,5’ten küçük oluncaya kadar veya önceden belirlenen enterpolasyon sayısı
aşılıncaya kadar enterpolasyon tekrar edilmektedir.

İlgi noktası tanımlayıcısı ve eşleme SURF tanımlayıcısı Fast-Hessian dedektörü


tarafından belirlenen her bir ilgi noktasının bir ölçeğe bağlı komşuluğu içerisinde piksel
yoğunluklarının nasıl dağıtıldığını tanımlamaktadır. Bu yaklaşım SIFT’e benzemekte
fakat Haar dalgacık olarak bilinen filtreler ile birlikte kullanılan tamamlayıcı görüntüler

23
hesaplama süresini azaltmakta ve sağlamlığı arttırmada kullanılmaktadır. Haar
dalgacıklar x ve y gradyentlerini bulmak için kullanılabilen basit filtrelerdir.

Tanımlayıcıların elde edilmesi iki aşamadan oluşmaktadır. İlki 64 boyutlu bir vektörün
oluşturulduğu konumda ölçeğe bağlı olarak bir pencere oluşturulmadan önce her bir ilgi
noktasının görüntü dönüklüğüne karşı değişmezliğini sağlamak için tekrarlanabilir bir
yön atanmaktadır. Bu aşama ilgi noktası etrafındaki dairesel bir bölgeden alınan bilgiye
dayanan tekrar edilebilir bir yön belirlenmesini içermektedir. Sonra seçilen yöne atanan
kare bir bölge elde edilmektedir. SURF tanımlayıcıları bu kare alandan elde
edilmektedir. Son olarak da, bu elde edilen özellikler iki görüntüde eşlenmektedir.

Yön atama: ilgi noktaları eşleştirilirken dönüklüğe karşı bağımsızlığın sağlanmasında


her bir ilgi noktasında tekrarlanabilir bir yön tanımlanmaktadır. Bir ilgi noktasının s
ölçeğinde olmak üzere, ilgi noktası etrafında 6σ yarıçaplı dairesel bir alan içerisindeki
komşulukta x ve y yönünde 4σ boyutlu Haar dalgacık cevapları hesaplanmaktadır.
Öncelikle dalgacık cevapları hesaplanmakta ve ilgi noktasında merkezlenmiş bir
Gaussian’la (σ=2s) ağırlıklandırılmaktadır. Ağırlıklandırılan bu cevaplar noktalar olarak
sunulmaktadır. Cevaplar düşey eksen boyunca düşey cevaplar, yatay eksen boyunca
yatay cevaplar ile bir nokta olarak sunulmaktadır.

Baskın yön, merkez etrafında π/3 açısı ile çevreli bir daire dilimi döndürülerek
seçilmektedir. Boyutunun dilimlenmiş yön penceresi içerisindeki bütün cevapların
toplamı hesaplanarak tahmin edilmektedir. Pencere içerisindeki düşey ve yatay cevaplar
toplanmaktadır. Her bir pozisyonda x ve y cevapları dilim içerisinde toplanmakta ve
yeni bir vektör oluşturmak için seçilmektedir. En uzun vektör ilgi noktasının yönünü
belirlemektedir.

4.3. RANSAC

Fischer ve Bolles tarafından önerilen rastgele örnekleme uzlaşı (RANSAC) algoritması,


girdi verisindeki aykırı noktaların büyük bir kısmını yakalamak için tasarlanmış genel
bir parametre tahmin yaklaşımıdır.

RANSAC altında yatan model parametreleri tahmin etmek için gereken en az sayıda
gözlemi (veri noktalarını) kullanarak aday sonuçlar üreten bir örnekleme tekniğidir.

24
Fishher ve Bolles tarafından işaret edildiği gibi, bir başlangıç çözümü elde etmek için
mümkün olan en büyük miktardaki veriyi kullanan ve aykırı noktaları ayıklayan
geleneksel örnekleme tekniklerinin aksine, RANSAC mümkün olan en küçük kümeyi
kullanır ve tutarlı veri noktalarını içeren bu kümeyi genişletmeye devam eder.

Şekil [4.9] deki gibi bir noktaya en uygun bir çizginin denklemi RANSAC kullanılarak
tahmin edilebilir.

Şekil [4.9]:Çizgi denklemi için RANSAC tahmini

RANSAC yöntemi geleneksel model kestirim yöntemlerinin tersine bir algoritmadır.


Geleneksel model kestirim algoritmalarında, başlangıç olarak olabildiğince fazla girdi
veri seçilip daha sonra geçersiz verileri model içinden elenirken RANSAC
algoritmasında olabildiğince az sayıda girdi verisi kullanıp bu girdi veriyi modele uygun
oluncaya kadar artırmaktadır. Örneğin 2 boyutlu bir nokta verisi seti içinde bir dairenin
yayı modeli yakalamak için 3 nokta (daireyi oluşturan parametreleri hesaplayabilmek
için) seçilir. Seçilen noktalar ile dairenin merkezi ve yarıçapı belirlenir. Daha sonra
belirlenen bir eşik değeri altında kalan noktalar daireye atanır. Bu şekilde uygun model
bulunana kadar işlem devam ettirilir.

25
4.4. Moravec

Marovec köşe belirleme yönteminde, seçilen bir piksel merkezli pencere, pikselin 8
komşusuna kaydırılıyor ve asıl pencere ile kaydırılan pencereler arasındaki piksellerin
arasındaki parlaklık farkı değerlendirilerek köşeler belirlenebiliyor. Burada üç farklı
durum var. Bunlar;

a- Eğer pencerenin bulunduğu yer düz ise, tüm yönlerde kaydırılan pencereler
arasındaki değişim az olacaktır.
b- Eğer pencere bir kenar içeriyorsa kenara dik olan kaydırmalar büyük değişim,
paralel olanlar ise küçük değişim gösterecektir.
c- Eğer pencere bir köşe veya izole bir nokta içeriyorsa, tüm yönlerdeki
kaydırmalar büyük değişim gösterecektir. Matematiksel olarak,

2
Ex,y = ∑𝑢,𝑣 𝑤𝑢,𝑣 |𝐼𝑥+𝑢,𝑦+𝑣 − 𝐼𝑢,𝑣 |

olarak hesaplanır. Burada E değişimi, I görüntü piksellerinin parlaklık değerlerini, w ise


kullanılan pencereyi ifade eder. w pencere içinde 1, dışında 0 değerini alır.

P(x,y) noktası için w penceresi {(1,0), (1,1), (0,1), (-1,1)} yönlerinde kaydırılacaktır.
P(x,y) noktasının köşe olması için bu nokta için hesaplanan min(Ex,y)'nin lokal
maksimum ve belirli bir eşik seviyesinden yüksek olması gerekir.

4.5. Harris

Harris köşe algılama, 1988 yılında C. Harris ve MJ Stephens tarafından Moravec


algoritmasına dayanan bir nokta özniteliği çıkarma algoritması olarak tanımlanmıştır.
Bu algoritmada genel yaklaşım, çevreleyen komşulukta birden fazla yöndeki kenarları
gösteren ilgi noktalarının bulunmasıdır ve bunlar görüntünün köşeleri olarak
nitelendirilir. Görüntünün içinde bir yerel algılama penceresi tasarlanır. Farklı bir yönde
küçük bir miktar pencereyi kaydırarak oluşan yoğunluktaki ortalama değişim belirlenir.
Bu noktada, pencerenin orta noktası köşe noktası olarak çıkarılır. Küçük bir pencere
içinde yoğunluk değerlerine bakılarak bu nokta kolaylıkla tanımlanır. Herhangi bir
yönde pencerenin kaydırılması görünüşte büyük bir değişikliğe neden olur. Pencere
kaydırıldığında, eğer düz bölge ise, hiçbir yöndeki yoğunluk değişime uğramaz. Eğer

26
kenar bölge bulunursa, kenar yönündeki yoğunlukta bir değişim olmaz. Ama köşe
bulunursa, her yöndeki yoğunlukta önemli bir değişiklik olur.

Şekil[4.10] : Harris köşe ve kenar algılama yöntemi

Harris köşe algılayıcısı bölgenin düz, kenar veya köşe olup olmadığını belirlemek için
matematiksel bir yaklaşım sağlar. Harris köşe tekniği çok fazla öznitelik algılar ve
dönmeden etkilenmezken ölçek değişimlerinden etkilenir.

[u, v] kayması için yoğunluğun değişimi aşağıdaki denklemde verilmiştir:

E(u,v)=Σx,y w(x,y)[I(x+u+y+v) ̶ I(x,y)]2

w(x, y): bir pencere fonksiyonu

I(x + u, y + v): kaydırılan yoğunluk

I(x, y): her bir pikselin yoğunluğu

Harris köşe algoritması aşağıda verilmiştir:

1. Görüntüdeki her piksel (x,y) için otokorelasyon M matrisi hesaplanır:


𝐼𝑥2 𝐼𝑥 𝐼𝑦
M = ∑𝑥,𝑦 [ ]
𝐼𝑥 𝐼𝑦 𝐼𝑦2
2. Görüntünün Gaussian filtrelemeye sahip her bir piksel için yeni bir matris M
alınır ve farklı iki boyutlu sıfır ortalama Gauss fonksiyonu elde edilir:
Gauss = exp( ̶ u2+v2)/2δ2
3. Her piksel (x,y) için köşelerin cevap ölçüsü hesaplanır (R köşeler için pozitif,
kenarlar için negatif, düz alanlar için küçük olur).

27
R = {𝐼𝑥2 𝑥𝐼𝑦2 − (𝐼𝑥2 𝐼𝑦2 )} − 𝑘{𝐼𝑥2 + 𝐼𝑦2 }2
4. Yerel maksimum nokta seçilir. Harris yöntemi, özellik noktalarının yerel azami
ilgi noktasına karşılık piksel değerleri olduğunu varsayar.
5. T eşiği ayarlanır ve köşe noktaları tespit edilir.

5. ARDUINO VE SERVO MOTOR İLE KAMERAYI DÖNDÜRME

5.1. Arduino Mega

Arduino Mega 2560 ATMega 2560 mikrokontrollür tabanlıdır. Arduino Mega 2560
kartı üzerinde 54 tane dijital giriş çıkış (bu çıkışlardan 15 tanesi pwm olarak
kullanılabilir.), 16 tane analog giriş, 4 tane seri
port(UART), 16MHZ kristal osilatör, USB soketi, güç
jakı, ICSP başlığı ve reset butonu bulunmaktadır.
Mikrodenetleyici desteklemek için gereken her şeyi
içerir. Çalıştırmak için bir USB kablosuyla bilgisayar
aracılığıyla çalıştırabilir veya AC-DC adaptör ile
çalıştırılabilir.

Şekil[5.1]:Arduino mega

5.2. Servo Motor

Servo motor 0 ila 180 derece arasında 1 derece hassasiyetle dönebilen motor çeşididir.
Tam tur atamaz. Genellikle robot kol gibi tam tur dönmesine gerek olmayan, hassas
açılı yerlerde kullanılır. Servo motor içerisinde bir adet DC motor bulunur. DC motorun
ucuna bağlı dişli sisteminin yardımıyla servo mili daha fazla yük kaldırabilmektedir. Bu
işlem sırasında servonun dönüş hızı da yavaşlamış olur. Kullanılan dişli sistemine göre
servo motorların kaldırabileceği yük değişir. Servoların
kaldırabileceği yük tork gücü üzerinden ifade edilir. Servo
motorların torku, motor miline bağlı 1cm uzunluğundaki
çubuğun kaldırabileceği maksimum yük olarak tarif edilir.
Piyasada bulunan servolar genellikle 1,4 kgf.cm torka
sahiptir.

Şekil[5.2]:Servo motor

28
5.3. Arduino Mega ve Servo Motorun Fritzing Üzerinden Bağlantısı
Servo motor ile arduino arasındaki bağlantı aşağıdaki gibidir.

Şekil [5.3]: Fritzing şeması

5.4. Uygulamanın Arduino Kodu

Arduinoya bağlı olan servo motorun kodlanması arduinonun kendi programı üzerinden
yapılmıştır. Kameranın geniş açıyla görüntü alması için kullanılan bu sistemde servo
motor önce 90 derece dönüp 1000 ms bekler ve kameranın görüntü almasını sağlar.
Sonra 180 dereceyi tamamlar ve tekrar 1000ms bekler. Kameranın toplam dönüş
periyodu 180 derece olduğu için, 180 dereceyi tamamladıktan sonra önce 90 derecede
bekleme yaptıktan sonra 0 dereceye kadar ilerler ve son beklemesini orda sağladıktan
sonra sürekli aynı işlem tekrarlanır. (Ek-1’de kodu verilmiştir)

6. UYGULAMALAR

6.1. Öznitelik Çıkarımı ve SIFT Algoritması

Kamera tarafından alınan görüntüler öznitelik çıkarımı işlemine sokulur bunun için
öncelikle görüntüler öncelikle gri seviyeye çekilir.

6.1.1. Görüntünün Yumuşatılması (Smoothing)

Görüntüdeki gürültüyü azaltmak amacıyla yapılır. Alınan gri seviye görüntüler


blurlaştırılır. Bunun için Gauss blurlaştırma işlemi kullanılmıştır. Görüntünün farklı
sigma değerlerinde elde edilen sonuçlar.

29
Şekil [6.1]: Görüntünün yumuşatılmasının uygulaması (EK-2’de kodu verilmiştir.)

6.1.2. Görüntünün Ölçek Uzayı Çıkarımı (Scale Space)

Görüntülerin farklı ölçeklerdeki örnekleri alınarak ölçekten bağımsız bir öznitelik


çıkarımı için önemlidir. Özellikle SIFT matching ve mozaikleme işlemlerinde ölçekten
bağımsızlık önemlidir.

Projemizde SIFT algoritması kullanılarak öznitelik çıkarımı yapılmıştır. Görüntülerden


elde edilmiş key pointlerin dönüklükten ve ölçekten bağımsız olması amaçlanmıştır.

30
Şekil [6.3]: Görüntünün ölçek uzay çıkarımı örneklenmesi (EK-3’te kodu verilmiştir.)

6.1.3. Gauss Farkı (Diferrence of Gaussians DoG)

Farklı yumuşatma seviyelerinde elde ettiğimiz görüntülerin birbirinden çıkarımı ile elde
key point çıkarımının ilk aşamasıdır.

Elde ettiğimiz farklı scale ve blur sevilerindeki görüntülerin çıkarımı aşağıdaki gibidir.

31
Şekil [6.5]: Gauss farkı alınan görüntüler (Kodu EK-4’te verilmiştir)

6.1.4. Key Point Elde İşlemi

DoG filtresinden çıkardığımız görüntü kümelerinin tüm piksel değerleri aslında bir key
point’tir. Fakat bu işlemin gürültülü ve çok fazla tanımlı key point’i bulunmaktadır. Bu
piksel değerlerinin maximum ve minumum değer çıkarımı ile elenmesi ile asıl
istediğimiz görüntüye has key pointler elde edilir.

32
Şekil[6.7]: Görüntülerden key point elde işlemi (EK-5’te kodu verilmiştir.)

6.2. Key Point Eşleştirmesi ve RANSAC Algoritması

6.2.1. SIFT Eşleştirme

SIFT ile elde edilen key point çıkarımları farklı görüntülerin karşılaştırılmasında,
eşleşmesinde kullanılabilir.

Bu işlem yapılırken MATLAB’da işlem süresinin uzun sürmesi nedeni ile OpenCV
kütüphanesinden ve Visual Studio C++ derleyicisinden faydalanılmıştır.

Biz bu çalışmasmızda farklı ölçek ve dönüklükteki aynı resimleri karşılaştırdık sonuçlar


aşağıdaki gibidir.

33
Şekil [6.9]: SIFT algoritmasında görüntü eşleme işlemi

Şekil [6.10]: SIFT algoritmasında renkli görüntü eşleme işlemi

6.2.2. RANSAC Algoritması ve Mozaikleme

Birbirini takip eden görüntü örneklerinin öznitelik çıkarımlarını yapıldıktan sonra key
point noktalarının eşleştirilmesi sonucunda ortak key pointlerin bulunması durumunda
RANSAC algoritması ile bu görüntüleri yama işlemini gerçekleştirebiliyoruz. Bu işlem
sonrasında görüntüler homografik filtreler yardımı ile yama noktaları eşitlenerek
kesintisiz bir mozaik görüntüsü elde edilmiştir. Aşağıdaki örneği inceleyebilirsiniz.

34
Şekil [6.12]: RANSAC algoritmasında kullanılacak görüntüler

Şekil [6.13]: RANSAC algoritmasında mozaiklenen görüntü

7. TARTIŞMA

Projeye öznitelik çıkarmakla başlandı. Bunun için önce Harris algoritması seçildi ancak
kameranın aldığı görüntülerin ölçekleri farklı olacağı için bu algoritmanın projemiz için
uygun olmadığını fark edip, araştırmalarımıza göre projemize en uygun olan ve en
önemli özelliği ölçekten bağımsızlık olan SIFT algoritması kullanıldı. Renkli görüntüler

35
gri tonlamalı renklere göre yaklaşık 3 kat daha fazla veri taşıdığı yani işlemci için 3 kat
daha fazla iş gücü gerektirdiği için görüntüler gri tonlamaya çevrildi.

Elde ettiğimiz görüntülerde parazitlerle karşılaşıldı ve bu gürültüyü filtrelemek


amacıyla Gauss blurlaştırma işlemi yapıldı.

Projenin MATLAB kullanılarak gerçekleştirilmesi hedeflenmişti fakat SIFT eşleştirme


kısmında MATLAB’ın yavaşlığı bizi Visual Studio C++ kullanmaya yönlendirdi.
MATLAB’tan sadece projenin bazı kısımlarında yardım alındı.

36
8. TEŞEKKÜR

Projenin her aşamasında yanımızda olan ve desteğini esirgemeyerek en iyi şekilde


rehberlik yapan hocamız, proje danışmanımız Prof. Dr. Tuncay ERTAŞ’a teşekkür
ederiz.

37
9. KAYNAKLAR

1.https://www.kongresistemi.com

2.http://acikerisim.selcuk.edu.tr

3.http://akademikpersonel.kocaeli.edu.tr

4.http://www.github.com

5.https://www.mathworks.com/help/vision/ref/estimatefundamentalmatrix.html

6.https://web.eecs.umich.edu/~silvio/teaching/EECS598/lectures/lecture10_1.pdf

7.https://www.kongresistemi.com/root/dosyalar/uzalcbs2014/206.pdf

8.http://www.openaccess.hacettepe.edu.tr:8080/xmlui/bitstream/handle/11655/2677/fec
e11c6-e3c9-4701-a38f-a3ec6fb037ac.pdf?sequence=1

38
10. ÖZGEÇMİŞLER

1994 yılında İzmir ili Konak ilçesinde doğdu. İlkokula İzmir Karabağlar’da başladı.
Zeyni Hanım İlköğretim Okulu’ndan mezun oldu. 2012 yılında İzmir Buca Anadolu
Lisesi’nden mezun oldu. 2012 yılında Hacettepe Üniversitesi Mühendislik Fakültesi
Nükleer Enerji Mühendisliği Bölümünü kazandı. 2014 yılında yatay geçiş ile Uludağ
Üniversitesi Mühendislik Fakültesi Elektronik Mühendisliği Bölümüne başladı.

Melisa KARA

1993 yılında Trabzon ili Merkez ilçesinde doğdu. İlkokula Trabzon Merkez’de başladı.
Mehmet Akif Ersoy İlköğretim Okulu’ndan mezun oldu. 2011 yılında Trabzon Anadolu
Lisesi’nden mezun oldu. 2012 yılında Uludağ Üniversitesi Mühendislik Fakültesi
Elektronik Mühendisliği Bölümünü kazandı.

Beyza ŞAHİN

1993 yılında Bolu ilinde Merkez ilçesinde doğdu. İlkokula Ankara Altındağ’da başladı.
ATO 65. Yıl İlköğretim Okulu’ndan mezun oldu. 2010 yılına kadar Bolu Gerede
Anadolu Lisesi’nde okudu. 2011 yılında Bolu Atatürk Anadolu Lisesi’nden mezun
oldu. 2012 yılında Uludağ Üniversitesi Mühendislik Fakültesi Elektronik Mühendisliği
Bölümünü kazandı.

Yasin TUNÇER

39
11. EKLER

EK-1: Servo Motor Arduino Kodu

#include <Servo.h>

Servo myservo;

int pos = 0;

void setup() {

myservo.attach(9);

void loop() {

for (pos = 0; pos <= 45; pos += 45) {

myservo.write(pos);

delay(2000);

for (pos = 45; pos <= 90; pos +=45) {

myservo.write(pos);

delay(2000);

for (pos = 90; pos <= 135; pos += 45) {

myservo.write(pos);

delay(2000);

for (pos = 135; pos <= 180; pos +=45) {

40
myservo.write(pos);

delay(2000); }

for (pos = 135; pos >= 180; pos -= 45) {

myservo.write(pos);

delay(2000);

for (pos = 90; pos >= 135; pos -= 45){

myservo.write(pos);

delay(2000);

for (pos = 45; pos >= 90; pos -= 45)

myservo.write(pos);

delay(2000);

for (pos = 0; pos >= 45; pos -= 45){

myservo.write(pos);

delay(2000);

}}

EK-2: Gauss Blurlaştırma ile Görüntünün Yumuşatılması

41
////////////////////////////////MATLAB////////////////////////////
I=imread('.jpg');
I=rgb2gray(I);
Ib2=imgaussfilt(I,3);
Ib3=imgaussfilt(I,5);
Figure;
subplot(1,3,1); imshow(I); title(‘Gri seviye orjinal resim’);
subplot(1,3,2); imshow(I); title(‘sigma=3’);
subplot(1,3,3); imshow(I); title(‘sigma=5’)

EK-3: Görüntünün Ölçek Uzayı Çıkarımı Örneklenmesi

////////////////////////////MATLAB////////////////////////////////////
I =imread('bursakozahan.jpg');
%I=imresize(I,[256,256]);
sigma0=sqrt(2);
Igri = rgb2gray(I);
Iblur1 = imgaussfilt(Igri,sigma0); %sigma1,sigma2,sigma3
J1= imresize(Igri,0.75);imwrite(J1,'J1.jpg');
J1blur1 = imgaussfilt(J1,2);
J2= imresize(Igri,0.50);imwrite(J2,'J2.jpg');
J1blur2 = imgaussfilt(J1,4);
J3= imresize(Igri,0.25); J1blur3 = imgaussfilt(J1,8);
figure;
subplot(4,4,1),imshow(Igri,[]),title('1.scale') %% Iblur1,Iblur2,Iblur3
subplot(4,4,2), imshow(J1),title('2.scale') %% J1blur1,J1blur2,J1blur3
subplot(4,4,3),imshow(J2,),title('3.scale') %% J2blur1,J2blur2,J2blur3
subplot(4,4,4),imshow(J3,[]),title('4.scale') %% J3blur1,J3blur2,J3blur3
EK-4: Gauss Farkı Alma (DoG Piramidi)
////////////////////////////MATLAB////////////////////////////////////
sigma0=sqrt(2); octave=3; level=3;
D=cell(1,octave);
for i=1:octave

42
D(i)=mat2cell(zeros(row*2^(2-i)+2,colum*2^(2-i)+2,level),row*2^(2-i)+2,colum*2^(2-
i)+2,level);
end
temp_img=kron(img,ones(2));
temp_img=padarray(temp_img,[1,1],'replicate');
for i=1:octave
temp_D=D{i};
for j=1:level
scale=sigma0*sqrt(2)^(1/level)^((i-1)*level+j);
p=(level)*(i-1);
figure(p+j);
subplot(octave,level,p+j);
f=fspecial('gaussian',[1,floor(6*scale)],scale);
L1=temp_img;
if(i==1&&j==1)
L2=conv2(temp_img,f,'same');
L2=conv2(L2,f','same');
temp_D(:,:,j)=L2-L1;
imshow(uint8(255 * mat2gray(temp_D(:,:,j))));
L1=L2;
else
L2=conv2(temp_img,f,'same');
L2=conv2(L2,f','same');
temp_D(:,:,j)=L2-L1;
L1=L2;
if(j==level)
temp_img=L1(2:end-1,2:end-1);
end
imshow(uint8(255 * mat2gray(temp_D(:,:,j))));
end
end
end

43
EK-5: Görüntülerden Key Point Elde İşlemi
///////////////////////////////////MATLAB//////////////////////////////
%HER pixel kendi içindeki dog içerisinde max noktası bulunur.
Bu işlem 3 aşamalı olarak farklı eşik değerlerinde gerçeklenir
SADECE 1. Aşama gösterilmiştir.
tic
interval=level-1;
number=0;
for i=2:octave+1
number=number+(2^(i-octave)*colum)*(2*row)*interval;
end
extrema=zeros(1,4*number);
flag=1;
for i=1:octave
[m,n,~]=size(D{i});
m=m-2;
n=n-2;
volume=m*n/(4^(i-1));
for k=2:interval
for j=1:volume
% starter=D{i}(x+1,y+1,k);
x=ceil(j/n);
y=mod(j-1,m)+1;
sub=D{i}(x:x+2,y:y+2,k-1:k+1);
large=max(max(max(sub)));
little=min(min(min(sub)));
if(large==D{i}(x+1,y+1,k))
temp=[i,k,j,1];
extrema(flag:(flag+3))=temp;
flag=flag+4;
end
if(little==D{i}(x+1,y+1,k))

44
temp=[i,k,j,-1];
extrema(flag:(flag+3))=temp;
flag=flag+4;
end
end
end
end
idx= extrema==0;
extrema(idx)=[];
toc
[m,n]=size(img);
x=floor((extrema(3:4:end)-1)./(n./(2.^(extrema(1:4:end)-2))))+1;
y=mod((extrema(3:4:end)-1),m./(2.^(extrema(1:4:end)-2)))+1;
ry=y./2.^(octave-1-extrema(1:4:end));
rx=x./2.^(octave-1-extrema(1:4:end));
figure(2)
subplot(1,2,2);
imshow(origin)
hold on
plot(ry,rx,'b.');

45

You might also like