slam oznitelik-cikarimi

1️⃣ Yorumlama Tabanlı (Model Bazlı) Algoritmalar

Bu yöntemlerde, görüntüden çıkarılan özellikler bir öğrenilmiş model veya önceden belirlenmiş kurallar ile anlamlandırılır.

📌 Derin Öğrenme Tabanlı Özellik Çıkarma

(Bu yöntemler genellikle önceden eğitilmiş sinir ağlarını kullanır.)

  • SuperPoint → CNN tabanlı, ölçek ve döndürme dayanıklı anahtar nokta çıkarma.
  • R2D2 (Repeatable and Reliable Detector and Descriptor) → SuperPoint’e alternatif, daha kararlı eşleşmeler sağlar.
  • LF-Net (Learning Feature Matching) → Derin öğrenme ile özellik eşleştirme yapar, geleneksel yöntemlerden daha iyi sonuçlar verir.
  • DELF (Deep Local Features) → Google tarafından geliştirilen, görüntü eşleştirme için kullanılan bir özellik çıkarma ağıdır.
  • ### 📌 Derin Öğrenme Tabanlı Takip ve Hareket Tahmini
  • RAFT (Recurrent All-Pairs Field Transforms) → Derin öğrenme tabanlı optik akış algoritması.
  • RAFT-SLAM → RAFT’in SLAM’a uygulanmış hali.
  • DeepSORT (Simple Online and Realtime Tracker) → Nesne takibi için derin öğrenme tabanlı bir yöntem.
  • TrackNet → Spor analizlerinde kullanılan bir nesne takip ağı.
  • 📌 Öğrenilmiş Model Kullanmadan Özellik Çıkarma

    (Bu yöntemler belirli matematiksel modelleri kullanır.)

  • SIFT (Scale-Invariant Feature Transform) → Ölçek ve döndürmeye dayanıklı özellik çıkarır.
  • SURF (Speeded-Up Robust Features) → SIFT’e benzer ama daha hızlıdır.
  • KAZE → Görüntünün doğal sınırlarını (edges) kullanarak özellik noktaları çıkarır.
  • AKAZE (Accelerated KAZE) → KAZE’nin hızlandırılmış versiyonu.
  • ORB (Oriented FAST and Rotated BRIEF) → Hafif ve hızlı, SLAM sistemlerinde yaygın olarak kullanılır.
  • BRISK (Binary Robust Invariant Scalable Keypoints) → ORB’ye benzer ama farklı bir anahtar nokta seçme yöntemi kullanır.

  • 2️⃣ Yorumsuz (Doğrudan Hesaplama Tabanlı) Algoritmalar

    Bu yöntemlerde, görüntüden çıkarılan bilgiler herhangi bir model eğitimi olmadan doğrudan matematiksel hesaplamalarla belirlenir.

  • 📌 Optik Akış (Optical Flow) Tabanlı Yöntemler

    (Görüntüdeki piksellerin hareketini analiz eder.)

  • Lucas-Kanade Optical Flow → Hareketli nesnelerin yönünü ve hızını tahmin eder, düşük çözünürlüklü görüntülerde etkilidir.
  • Farneback Optical Flow → Lucas-Kanade’den farklı olarak yoğun (dense) akış hesaplar.
  • Gunnar-Farneback Method → Farneback’in geliştirilmiş versiyonudur, video kareleri arasında akış belirler.
  • PWC-Net (Pyramid, Warping, and Cost Volume) → Optik akış hesaplamak için bir CNN modelidir.
  • RAFT (Recurrent All-Pairs Field Transforms) → En güncel derin öğrenme tabanlı optik akış modeli.
  • 📌 Geometrik Yaklaşımlar

    (Bu yöntemler doğrudan matematiksel dönüşümler ve eşleştirmeler ile çalışır.)

  • Epipolar Geometry → Stereo kameralar arasındaki ilişkiyi modellemek için kullanılır.
  • Essential & Fundamental Matrix → Kamera hareketini anlamak için kullanılır.
  • Homography Estimation → İki görüntü arasında düzlemsel dönüşümü belirler.
  • Structure-from-Motion (SfM) → 3D yapıların hareketli bir kameradan çıkarılmasını sağlar.
  • Visual-Inertial Odometry (VIO) → Görsel verilerle IMU sensörlerini birleştirerek hareket tahmini yapar.
  • 📌 Klasik Nesne Takip Algoritmaları

    (Bu yöntemler doğrudan piksellerin hareketini takip eder.)

  • Mean-Shift → Piksellerin renk dağılımına göre nesne takibi yapar.
  • CamShift (Continuously Adaptive Mean Shift) → Mean-Shift’in adaptif versiyonu, nesnenin boyutunu değiştirebilir.
  • Kalman Filter → Hareket tahmini ve nesne takibinde kullanılır.
  • Particle Filter (Monte Carlo Localization) → Kalman filtresine benzer ama daha fazla olasılığa dayalıdır.
  • KLT Tracker (Kanade-Lucas-Tomasi Tracker) → Optik akış kullanarak nesneleri takip eder.

  • Özet Karşılaştırma

    Yaklaşım Algoritma Model Gerektirir mi? Hız Doğruluk Uygulama Alanı
    *Yorumlama Tabanlı * SuperPoint Orta Çok Yüksek SLAM, Görüntü Eşleştirme
    R2D2 Orta Yüksek Görüntü Analizi
    SIFT Yavaş Çok Yüksek 3D Rekonstrüksiyon
    ORB Çok Hızlı Orta SLAM, Gerçek Zamanlı Uygulamalar
    AKAZE Orta Yüksek Görsel Odometri
    RAFT Orta Çok Yüksek Optik Akış, Video Analizi
    Yorumsuz Lucas-Kanade Optical Flow Hızlı Orta Video İşleme
    Farneback Optical Flow Orta Orta Hareket Algılama
    Epipolar Geometry Orta Yüksek Stereo Görüntüleme
    Kalman Filter Hızlı Orta Nesne Takibi
    CamShift Hızlı Orta Basit Nesne Takibi

Sonuç

  • Gerçek zamanlı uygulamalar için ORB, AKAZE veya optik akış yöntemleri daha uygundur.
  • Hassasiyet gerektiren uygulamalar için SIFT, SuperPoint veya RAFT gibi derin öğrenme tabanlı yöntemler tercih edilmelidir.
  • SLAM ve görsel odometri için SuperPoint, R2D2, AKAZE ve optik akış tabanlı yöntemler iyi bir seçenektir.
  • Nesne takibi için DeepSORT, Kalman Filter veya optik akış kullanılabilir.

! Bu algoritmalar Yorumlayıcı ve Keyframes ile çalışan algoritmalarıdır.

Binary descriptor, bir keypoint (anahtar nokta) çevresindeki yerel görsel bilgiyi temsil eden ikili (0 ve 1'lerden oluşan) sabit uzunlukta bir bit vektörüdür. Bir pikselin 0 veya 1 oluşu etrafında karşılaştıldıgı bir pikselin aydınlık olma durumuna göredir. Mesela diğer piksel daha parlaksa (255'e daha yakınsa) bu piksele 0 yazılır.

Float Descriptor,bir keypoint (anahtar nokta) çevresindeki yerel görsel piksellerin her birine ait float değerler tutar.

Algoritmalar

Bınary Yorumlayıcılar (Descriptor)

  • ORB (hız)
  • AKAZE (doğruluk)
  • BRISK

Float Yorumlayıcılılar

  • KAZE
  • SIFT (doğruluk)
  • SURF

Eşleştiriciler

BFMatcher

  • Tüm descriptorlar birbirleri ile karşılaştırır.
cv2.BFMatcher(normType=cv2.NORM_HAMMING, crossCheck=True)
         

normtype: Bınary'ler için: cv2.NORMHAMMING, Floatlar için: cv2.NORML2 (öklid) - crosscheck: Doğrulamanın iki yönlü yapılmasını sağlar, A noktası B'ye en yakınsa ve B noktası da A’ya en yakınsa, eşleşme kabul edilir.

FlannBasedMatcher

  • FLANN (Fast Library for Approximate Nearest Neighbors), büyük veri setlerinde descriptor eşleşmesini yaklaşık (approximate) olarak ve çok daha hızlı yapar.
  • indexparams = dict(algorithm=1, trees=5) searchparams = dict(checks=50) flann = cv2.FlannBasedMatcher(indexparams, searchparams)

algorithm = 1 => KDTree algoritması seçilir. Float Descriptorlar için algorithm = 0 => LSH algoritması seçilir.

Binary Descriptorlar için - trees Kaç tane KDTree oluşturulacağı (daha fazla → daha iyi doğruluk ama yavaş) - checks Aramada kaç alternatif değerlendirileceği (daha fazla → daha doğru ama daha yavaş)

  • .match ve .knnMatch(k) Metodları

  • Bu iki metot flann ve bf içinde kullanılabilir. .match her bir desciptor için bir tane eşleşme döndürür. .knnMatch ise her desciptor için k adet eşleşme döndürür. Dolayısıyla knn daha yavaştır fakat daha detaylı sonuç üretmektedir. KNN için Lowe's Ratio Test uygulanabilir. Bu da en iyi eşleşme en iyi ikinci eşleşmeden daha iyi olmalıdır presinsibidir.