Scale Invariant Feature Transform Algoritması-Makine Öğrenmesi-

M. Fatih Türkoğlu
3 min readAug 3, 2021

--

Scale Invariant Feature Transform (SIFT) yani Ölçekle Değişmeyen Özellik Dönüşümü algoritmasından bahsedeceğim bu yazımda algoritmanın nerelerde kullanıldığından, basitçe ne iş yaptığından ve algoritmanın çalışmasını bir görsel üzerinden python aracılığı ile göstereceğim.

SIFT algoritmasının tanımını yapacak olursak, 2004 yılında D.Lowe tardından geliştirilen bir görüntü üzerinde döndürme, aydınlatma ve ölçeklendirmeye karşı değişmeyen kısımlarını ve özelliklerini belirleyip tanımlayan bir algoritmadır. Yani SIFT algoritmasına bir çeşit görüntü işleme üzerinde kullanılan nesne tanıma algoritması da diyebiliriz. Diğer kullanım alanları olarak robotik haritalama, görüntü birleştirme, 3B modelleme, hareket tanıma ve video izleme gösterilebilir.

Şimdi ise SIFT algoritmasının çalışma mantığını 4 adımda inceleyelim.

  1. Ölçek Alanı: Gerçek dünya nesneleri ancak belirli bir ölçekte anlamlıdır. Örneğin bir masanın üzerindeki bir kalemi ince detaylarına kadar görebilirsiniz fakat bu kaleme tüm samanyoluyla bakarsanız, oradaki kalem görülemez basitçe varolamaz. Bu tür karışıklıkları önlemek için görsel üzerinde ölçek alanı filtrelemesi kullanılır.

Bir görüntünün ölçek alanı, bir Gauss çekirdeğinin (Bulanıklaştırma) giriş görüntüsüyle farklı ölçeklerde evrişiminden üretilen bir L (x, y, σ) fonksiyonudur. Ölçek alanı oktavlara ayrılır ve oktav sayısı ve ölçek orijinal görüntünün boyutuna bağlıdır. Böylece orijinal görüntünün birkaç oktavını oluşturuyoruz. Her oktavın görüntü boyutu bir öncekinin yarısı kadardır.

2. Anahtar Noktaların Yerleştirilmesi ve Dengeli Noktaların Seçimi: Önceki aşamada birçok anahtar nokta adayı tespit ettik. Bu adımda ise kararlı olmayan yani gürültülü, düşük kontrastlı ve kenar üzerindeki noktaların ayıklanması gerekir. Bu ayıklama işlemi için DoG fonksiyonunun, kilit aday nokta baz olmak üzere ikinci dereceden Taylor serisi açılımı yapılır ve eşitliği elde edilir.

Buradaki taylor serisi ile ölçek alanının boyutu genişler ve noktalardaki yoğunluğun eşik değerinden büyük olup olmadığına bakılır.

3. Yönelimlerin Atanması: Bu adımda kısaca nesnenin iki boyutlu eksen tarafından dönmesine karşı bir dayanıklılık kazandırılır. Bu dayanıklılık bulunan ayıklanan anahtar noktaların eğim yönüne bakılarak oryantasyon atanması ile olur.

m(x,y) ; gradyent büyüklüğü , Θ(x,y) ; dönüklük

Büyüklük ve yön hesaplaması, Gauss filtresi uygulanarak görüntülerdeki kilit noktaların, komşu her pixeli için yapılır. Kilit noktaların etrafında her biri 10 derecelik bir yönü kapsayan 36 adet döngüsel histogram oluşturur.

4. Anahtar Nokta Tanımlayıcılarının Tespiti

Python üzerinden SIFT algoritmasını görelim.

import numpy as np
import cv2 as cv

img = cv.imread('kaldiri-tasi-kalibi-1.jpg')
gray= cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift = cv.SIFT_create()

kp = sift.detect(gray,None)
img=cv.drawKeypoints(gray,kp,img)

cv.imshow('img',img)

cv.waitKey(0)
cv.destroyAllWindows()
Orjinal Görsel
SIFT algoritması uygulandıktan sonra

--

--