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.