Okullar için Robotik ve Mühendislik · anaokulundan liseye

10. ünite / 12

Öznitelik algılama ve eşleştirme: Harris, ORB, RANSAC

Köşe nedir, Harris yanıtı, anahtar nokta ve betimleyici, ikili betimleyici ve Hamming uzaklığı, oran testi, RANSAC.

Bu ünitenin sonunda

  • Köşenin kenardan ve düz bölgeden farkını yapı tensörüyle açıklamak
  • Anahtar nokta ile betimleyicinin farkını söylemek
  • İkili betimleyicileri Hamming uzaklığı ve oran testiyle eşleştirmek
  • RANSAC ile yanlış eşleşmelere rağmen dönüşümü bulmak

Ders notları

İki görüntüde aynı noktayı bulmak; panorama, nesne tanıma, görsel odometri ve SLAM'in temelidir. Düz bölgeler ve düz kenarlar bunun için kötüdür (kenar boyunca kayınca görüntü değişmez); köşeler her yönde değişir.

Harris

Bir penceredeki gradyanlardan yapı tensörü kurulur: M = Σ w·[Ix² IxIy; IxIy Iy²]. İki özdeğer de büyükse köşe, biri büyükse kenar, ikisi küçükse düz bölge vardır. Özdeğer hesaplamadan:

R = det(M) − k · iz(M)²   (k ≈ 0,04–0,06)

R büyük pozitifse köşe, negatifse kenar. Yerel en büyükler anahtar nokta olur.

Betimleyici ve eşleştirme

Anahtar nokta "nerede" sorusunu, betimleyici "neye benziyor" sorusunu yanıtlar. ORB, FAST köşelerini bulur, yamanın yoğunluk merkezinden bir yön hesaplar ve yamayı o yöne döndürüp 256 piksel çiftini karşılaştırır (BRIEF): 256 bitlik bir parmak izi. İki betimleyici arasındaki uzaklık farklı bit sayısıdır (Hamming), XOR ve bit sayımıyla çok hızlıdır. Belirsiz eşleşmeleri atmak için oran testi: en yakın komşu, ikinci en yakından açıkça yakın olmalı (d₁ < 0,75·d₂).

RANSAC

Eşleşmelerin bir kısmı yine de yanlıştır. RANSAC rastgele 4 eşleşme seçer, homografiyi çözer, kaç eşleşmenin bu modele uyduğunu sayar; en çok "iç nokta" toplayan modeli tutar. Yanlış eşleşmeler en küçük kareler gibi her şeyi bozmaz, yalnız dışarıda kalır.

Oyun alanı

Köşeler ve öznitelik eşleştirme

Harris yanıtı köşelerde büyüktür. Sağdaki görüntü soldakinin döndürülmüş ve ölçeklenmiş kopyası; her köşe için ikili (BRIEF benzeri) betimleyici çıkarılır, Hamming uzaklığı ve oran testiyle eşleştirilir.

Sol: kaynak · Sağ: döndürülmüş kopya. Yeşil: RANSAC iç nokta, kırmızı: aykırı
anahtar nokta: 80 / 80 eşleşme: 33 RANSAC iç nokta: 28 (85%) gerçekten doğru: 28

Kendin dene

Öznitelik aracında sağdaki görüntü soldakinin döndürülmüş kopyası. Açıyı 0, 20 ve 45 derece yap; her birinde eşleşme sayısını ve RANSAC iç nokta oranını yaz. Oran testini 0,6'dan 0,95'e kaydır: eşleşme sayısı ve doğruluk nasıl değişti? Harris k değerini 0,04'ten 0,15'e çıkarınca köşe sayısına ne oldu?

Kod

Python: Harris köşeleri, ORB eşleştirme ve RANSAC
import cv2
import numpy as np

img = cv2.imread('girdi.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
R = cv2.cornerHarris(np.float32(gray), 2, 3, 0.04)   # blok 2, Sobel 3, k = 0,04
print('Harris köşe pikseli:', int((R > 0.01 * R.max()).sum()))

h, w = gray.shape
M = cv2.getRotationMatrix2D((w / 2, h / 2), 25, 0.8)
gray2 = cv2.warpAffine(gray, M, (w, h))           # döndürülmüş ve küçültülmüş kopya

orb = cv2.ORB_create(nfeatures=500)
k1, d1 = orb.detectAndCompute(gray, None)         # d: 32 bayt = 256 bitlik ikili betimleyici
k2, d2 = orb.detectAndCompute(gray2, None)
print('nokta:', len(k1), len(k2))
good = []
if d1 is not None and d2 is not None and len(k2) >= 2:
    bf = cv2.BFMatcher(cv2.NORM_HAMMING)          # ikili betimleyicide Hamming uzaklığı
    for pair in bf.knnMatch(d1, d2, k=2):
        if len(pair) == 2 and pair[0].distance < 0.75 * pair[1].distance:   # Lowe oran testi
            good.append(pair[0])
print('iyi eşleşme:', len(good))
if len(good) >= 4:
    src = np.float32([k1[m.queryIdx].pt for m in good])
    dst = np.float32([k2[m.trainIdx].pt for m in good])
    Hm, inl = cv2.findHomography(src, dst, cv2.RANSAC, 3.0)   # aykırıları ayıkla
    print('RANSAC inlier:', int(inl.sum()) if inl is not None else 0)
out = cv2.drawMatches(gray, k1, gray2, k2, good[:40], None, flags=2)
cv2.imwrite('cikti.png', out)

Sık yapılan hatalar

  • İkili betimleyicileri (ORB, BRIEF) Öklid uzaklığıyla eşleştirmek: NORM_HAMMING gerekir.
  • Oran testini atlamak: tekrarlayan desenlerde (karo, pencere) yanlış eşleşmeler çoğalır.
  • Dönüşümü RANSAC olmadan en küçük karelerle çözmek: tek bir yanlış eşleşme sonucu büyük ölçüde kaydırır.
  • Dokusuz yüzeylerde (beyaz duvar) öznitelik beklemek: köşe yoksa eşleşme de yoktur.

Yazılım mühendisliği bağlantısı

RANSAC rastgeledir; aynı girdi farklı çalıştırmalarda farklı sonuç verebilir. Test edilebilirlik için tohumu sabitle.

  • Rastgele sayı üretecini dışarıdan ver (bağımlılık enjeksiyonu); testte sabit tohum, üretimde gerçek rastgelelik.
  • Sonucu tek bir sayı yerine dağılımla değerlendir: 100 çalıştırmada iç nokta oranının alt yüzdeliği.

Kendini sına

  1. Harris yanıtı R büyük ve negatifse o bölge nedir?

  2. ORB betimleyicileri hangi uzaklıkla karşılaştırılır?

  3. Lowe oran testi neyi eler?

  4. RANSAC neden yanlış eşleşmelere dayanıklıdır?

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç