Oriented FAST and Rotated BRIEF

Kategori: Computer Vision , 23 Şubat 2020 , JanFranco


Şimdilik son algoritmamız olan Oriented FAST and Rotated BRIEF, diğer adıyla ORB algoritmasını inceleyeceğiz. Adından da anlaşılacağı gibi arkaplanda FAST ve BRIEF algoritmalarının geliştirilmiş versiyonlarını çalıştırıyor. FAST algoritmasını henüz görmedik fakat FAST algoritmasında oriented özelliği bulunmuyor. Eğer işin içinde rotation var ise BRIEF algoritması da kötü sonuç veriyor. OpenCV tarafından geliştirilen bu algoritma, bu iki problemi çözerek bu iki algoritmayı birleştirip ORB ismi ile sunuluyor. SIFT ve SURF algoritmalarına alternatif olarak üretilen algoritma, SIFT ve SURF'ten daha hızlı çalışıyor. Ayrıca ORB algoritmasının kullanımı ücretsizdir. Patentli değildir.

ORB algoritması SIFT algoritmasındaki gibi veya SURF algoritmasındaki gibi Image Pyramid tekniğini kullanarak resmi alır ve farklı ölçeklerdeki resimlere dönüştürür. Bu farklı ölçekli resimlere FAST algoritması uygulanır. Fakat FAST algoritmasının dediğim gibi orientation özelliği yoktur. Bu sorunu aşmak için algoritma intensity centroid denilen bir teknik sunuyor. Bu tekniğe göre, orientation yönü, köşenin merkezinden çizilecek bir vektör ile belirlenebilir. Vektörün yönü ise şu şekilde hesaplanır:



Yukarıdaki fonksiyonu kullanarak centroid'in ağırlık merkezini hesaplayabiliriz:



Daha sonra arc tanjant ile yönü belirleyebiliriz:



Aşağıdaki görsel anlamamıza yardımcı olabilir:



ORB algoritmasının FAST kısmı bu kadardı. Algoritmanın arkasında çalışan BRIEF algoritmasını daha önce anlatmıştık. Fakat dediğim gibi BRIEF algoritması rotationlarda kötü sonuç veriyor. Bunun nasıl çözüldüğünü inceleyelim. n bizim feature set sayımız olsun. xi, yi koordinatındaki her bir feature set için 2 x n boyutunda bir matris tanımlıyoruz. Bu matrise S diyelim. S matrisi pixellerin koordinatlarını tutuyor. İlgili patch'in orientation'ını kullanarak bir rotation matrix elde ediyoruz ve S * Rotation Matrix ile S rotation'a dirençli hale geliyor. Python ile OpenCV kütüphanesini kullanarak örnek yapalım:


import cv2

img = cv2.imread('../data/pisa.jpg')
copyImg = img.copy()
cv2.imshow('IMG', img)
cv2.waitKey(0)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

orb = cv2.ORB_create()
kp = orb.detect(gray, None)

cv2.drawKeypoints(gray, kp, outImage=copyImg, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('ORB', copyImg)
cv2.waitKey(0)
>>





Bir sonraki yazımızda feature matching örneği yapacağız.


Sonraki Yazı: Brute Force Feature Matching
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın