Update: oznitelik-cikarimi
Open markdown file
Update
Edit Content
## **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.NORM_HAMMING, Floatlar için: cv2.NORM_L2 (ö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. - index_params = dict(algorithm=1, trees=5) search_params = dict(checks=50) flann = cv2.FlannBasedMatcher(index_params, search_params) `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.
Save
Remove: oznitelik-cikarimi
Delete Note