Professional Documents
Culture Documents
ULUDAĞ ÜNİVERSİTESİ
YASİN TUNÇER
BEYZA ŞAHİN
MELİSA KARA
BURSA – 2017
T.C.
ULUDAĞ ÜNİVERSİTESİ
MÜHENDİSLİK TASARIMI-Ⅱ
HAZIRLAYAN
DANIŞMAN
BURSA – 2017
2
ÖZET
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, 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.
Ö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.
Ö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.
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.
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
Analog bir görüntü ve bu görüntünün örneklenmesi ile elde edilen sayısal görüntünün
8
Şekil[3.2]:Analog resmin matris formu
9
Matlabın desteklediği ö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.
• 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.
•.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.
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ı.
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.
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.
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
15
7. Her anahtar noktaya referans bir yön atanır,
SIFT; ölçek uzayı için DoG (Difference of Gaussian) filtresi kullanır. Çünkü Gauss’ un
Laplace normalizazyonu için stabil ve verimlidir.
16
Ölçek uzayı oluşturmada Gauss çekirdeği kullanılır.
1 2 +𝑦 2 )/2𝜎 2
G(x, y, σ) = 𝑒 −(𝑥
2𝜋𝜎 2
𝜕𝐺 𝐺(𝑥,𝑦,𝑘𝜎)−𝐺(𝑥,𝑦,𝜎)
σ∇2 G = ≈
𝜕𝜎 𝑘𝜎− 𝜎
17
Minimum ve maksimumunu belirlenir
X eğer diğer 26 komşudan büyük ya da küçükse seçilir.
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ı
𝑇𝑟(𝐻)2 (𝑟+1)2
<
𝐷𝑒𝑡(𝐻) 𝑟
Düşük kontrast noktaları filtresi için önceden bulunan yerdeki ölçek uzayını kullanır.
1 𝜕𝐷𝑇
D(x̂ ) = D+ x̂
2 𝜕𝑥
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.
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:
4.2. SURF
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)
𝜕2 𝐼 𝜕2 𝐼
𝜕𝑥 2 𝜕𝑦𝜕𝑥
H(I(x, y)) = [ 𝜕2 𝐼 𝜕2 𝐼
]
𝜕𝑥𝜕𝑦 𝜕𝑦 2
𝜕2 𝐼 𝜕2 𝐼 𝜕2 𝐼
Det(H(I(x, y))) = ̶ ( )2
𝜕𝑥 2 𝜕𝑦 2 𝜕𝑥𝜕𝑦
𝜕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.
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.
𝜕𝐻 𝑇 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.
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.
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
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.
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 = ∑𝑢,𝑣 𝑤𝑢,𝑣 |𝐼𝑥+𝑢,𝑦+𝑣 − 𝐼𝑢,𝑣 |
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
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.
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.
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.
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
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.
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
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.
29
Şekil [6.1]: Görüntünün yumuşatılmasının uygulaması (EK-2’de kodu verilmiştir.)
30
Şekil [6.3]: Görüntünün ölçek uzay çıkarımı örneklenmesi (EK-3’te kodu verilmiştir.)
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)
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.)
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.
33
Şekil [6.9]: SIFT algoritmasında görüntü eşleme işlemi
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
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.
36
8. TEŞEKKÜR
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
#include <Servo.h>
Servo myservo;
int pos = 0;
void setup() {
myservo.attach(9);
void loop() {
myservo.write(pos);
delay(2000);
myservo.write(pos);
delay(2000);
myservo.write(pos);
delay(2000);
40
myservo.write(pos);
delay(2000); }
myservo.write(pos);
delay(2000);
myservo.write(pos);
delay(2000);
myservo.write(pos);
delay(2000);
myservo.write(pos);
delay(2000);
}}
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’)
////////////////////////////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