· Hakan Çelik · OpenCV / Özellik Tespiti · 2 dk okuma
BRIEF — İkili Sağlam Bağımsız Temel Özellikler

OpenCV Serisi 39/64
- 1. Boya Fırçası Olarak Fare
- 2. Canny Kenar Algılama
- 3. Görüntü Geçişleri
- 4. Görüntü Piramitleri
- 5. Görüntülerde Aritmetik İşlemler
- 6. Görüntülerle İlgili Temel İşlemler
- 7. Görüntünün Geometrik Dönüşümleri
- 8. Görüntüyü Yumuşatma - ( Smoothing Images )
- 9. Histogramlar
- 10. Konturler ( Contours )
- 11. Morfolojik Dönüşümler
- 12. Opencv Nedir Ve Kurulumu
- 13. Opencv Resim Işlemleri
- 14. Opencv Video Işlemleri
- 15. Opencv'de Çizim Fonksiyonları
- 16. Performans Ölçüm Ve Geliştirme Teknikleri
- 17. Renk Alanlarını Değiştirme
- 18. Renk Paleti Olarak Parça Çubuğu ( Trackbar )
- 19. Resim Eşikleme
- 20. Şablon Eşleştirme
- 21. Hough Doğru Dönüşümü
- 22. Hough Daire Dönüşümü
- 23. Fourier Dönüşümü
- 24. Histogram Eşitleme
- 25. 2B Histogramlar
- 26. Histogram Geri Projeksiyonu
- 27. Kontur Özellikleri
- 28. Kontur Nitelikleri
- 29. Konturlerle Daha Fazla İşlev
- 30. Kontur Hiyerarşisi
- 31. GrabCut ile Etkileşimli Ön Plan Çıkarma
- 32. Watershed Algoritması ile Görüntü Segmentasyonu
- 33. Özellikleri Anlamak
- 34. Harris Köşe Tespiti
- 35. Shi-Tomasi Köşe Dedektörü ve İzlenecek İyi Özellikler
- 36. SIFT'e Giriş (Ölçek Değişmez Özellik Dönüşümü)
- 37. SURF'e Giriş (Hızlandırılmış Sağlam Özellikler)
- 38. Köşe Tespiti için FAST Algoritması
- 39. BRIEF — İkili Sağlam Bağımsız Temel Özellikler
- 40. ORB (Yönlü FAST ve Döndürülmüş BRIEF)
- 41. Özellik Eşleştirme
- 42. Özellik Eşleştirme + Nesneleri Bulmak için Homografi
- 43. Meanshift ve Camshift ile Nesne Takibi
- 44. Optik Akış
- 45. Arka Plan Çıkarma
- 46. Kamera Kalibrasyonu
- 47. Poz Tahmini
- 48. Epipolar Geometri
- 49. Stereo Görüntülerden Derinlik Haritası
- 50. k-En Yakın Komşuyu Anlamak
- 51. kNN ile El Yazısı OCR
- 52. SVM'yi Anlamak
- 53. SVM ile El Yazısı OCR
- 54. K-Ortalamalar Kümeleme'yi Anlamak
- 55. OpenCV'de K-Ortalamalar Kümeleme
- 56. Görüntü Gürültü Giderme
- 57. Görüntü Onarımı (Inpainting)
- 58. Yüksek Dinamik Aralık (HDR) Görüntüleme
- 59. Haar Cascade ile Yüz Tespiti
- 60. pip ile OpenCV Kurulumu
- 61. Ubuntu'da OpenCV-Python Kurulumu
- 62. Fedora'da OpenCV-Python Kurulumu
- 63. Windows'ta OpenCV-Python Kurulumu
- 64. OpenCV-Python Bağlayıcıları Nasıl Çalışır?
BRIEF — İkili Sağlam Bağımsız Temel Özellikler
Hedefler
Bu bölümde BRIEF algoritmasının temellerini göreceğiz.
Teori
SIFT’in tanımlayıcılar için 128 boyutlu bir vektör kullandığını biliyoruz. Kayan nokta sayıları kullandığından temel olarak 512 bayt alır. Benzer şekilde SURF de minimum 256 bayt alır (64 boyut için). Binlerce özellik için böyle bir vektör oluşturmak, özellikle gömülü sistemler gibi kaynak kısıtlı uygulamalar için uygulanabilir olmayan çok fazla bellek alır.
Ama bu boyutların tümü gerçek eşleştirme için gerekli olmayabilir. PCA, LDA gibi çeşitli yöntemler kullanılarak sıkıştırılabilir. Hatta bu SIFT tanımlayıcılarını kayan nokta sayılarından ikili dizilere dönüştürmek için LSH (Yerel Duyarlı Hashing) kullanan karma yöntemler gibi diğer yöntemler de kullanılır. Bu ikili diziler, Hamming mesafesini kullanarak özellikleri eşleştirmek için kullanılır. Bu çok daha hızlıdır.
BRIEF tam bu noktada devreye girer. Tanımlayıcılar bulmadan doğrudan ikili dizileri bulmak için bir kısayol sağlar. Düzleştirilmiş görüntü yamasını alır ve benzersiz bir şekilde nd (x,y) konum çiftleri seçer. Ardından bu konum çiftlerinde bazı piksel yoğunluğu karşılaştırmaları yapılır. Örneğin, birinci konum çifti p ve q olsun. I(p) < I(q) ise sonuç 1, aksi takdirde 0’dır. Bu, nd boyutlu bir bit dizisi elde etmek için tüm nd konum çiftlerine uygulanır.
Bu nd 128, 256 veya 512 olabilir. OpenCV bunların hepsini destekler, ancak varsayılan olarak 256’dır (OpenCV bayt cinsinden temsil eder, yani değerler 16, 32 ve 64 olur).
Bir önemli nokta: BRIEF bir özellik tanımlayıcısıdır, özellik bulmak için herhangi bir yöntem sağlamaz. Bu nedenle SIFT, SURF gibi başka özellik dedektörlerini kullanmanız gerekir. Makale, hızlı bir dedektör olan CenSurE kullanılmasını tavsiye eder.
Kısaca BRIEF, daha hızlı bir özellik tanımlayıcı hesaplama ve eşleştirme yöntemidir. Büyük bir düzlemde döndürme olmadıkça yüksek tanıma oranı da sağlar.
OpenCV’de BRIEF
Aşağıdaki kod, CenSurE dedektörü yardımıyla BRIEF tanımlayıcılarının hesaplanmasını göstermektedir.
Not: Bunun için opencv contrib gereklidir.
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('simple.jpg', cv.IMREAD_GRAYSCALE)
# STAR dedektörünü başlat
star = cv.xfeatures2d.StarDetector_create()
# BRIEF çıkarıcısını başlat
brief = cv.xfeatures2d.BriefDescriptorExtractor_create()
# STAR ile anahtar noktaları bul
kp = star.detect(img, None)
# BRIEF ile tanımlayıcıları hesapla
kp, des = brief.compute(img, kp)
print(brief.descriptorSize())
print(des.shape)brief.getDescriptorSize() fonksiyonu, bayt cinsinden nd boyutunu verir. Varsayılan olarak 32’dir.
Ek Kaynaklar
- Michael Calonder, Vincent Lepetit, Christoph Strecha, and Pascal Fua, “BRIEF: Binary Robust Independent Elementary Features”, 11th European Conference on Computer Vision (ECCV), Heraklion, Crete. LNCS Springer, September 2010.
- LSH (Locality Sensitive Hashing)
Hakan Çelik


