Epipolar Geometry
Epipolar geometri, bir sahnenin iki görünümünü ilişkilendirir ve her noktanın diğer görüntüdeki eşleşmesini bir çizgiyle sınırlar; stereo derinliğin ve 3B haritalamanın temelini oluşturur.
Bilgisayarlı görü alanında epipolar geometri, aynı sahnenin iki kamera görüntüsü arasındaki geometrik ilişkiyi tanımlar. Bir görüntüdeki piksel, olası 3B noktaların oluşturduğu bir ışına karşılık gelir ve bu ışın ikinci görüntüye, piksel eşleşmesinin üzerinde bulunması gereken epipolar çizgi olarak yansır. Bu kısıt yalnızca kameraların iç parametrelerine ve göreli pozlarına bağlıdır, sahnenin yapısından bağımsızdır ve eşleşme aramasını tüm görüntü yerine tek bir çizgi boyunca yapılacak aramaya dönüştürür. Bu nedenle epipolar geometri, stereo görmenin, hareketten yapı çıkarımının ve robotlara ve başlıklara yön veren görsel SLAM'in temelidir. Richard Hartley ve Andrew Zisserman'ın Computer Vision'da Çoklu Görüntü Geometrisi adlı eseri temel başvuru kaynağıdır.
Epipoller, Epipolar Çizgiler ve Epipolar Düzlem#
İki kamera merkezi ve sahnedeki herhangi bir nokta, epipolar düzlem adı verilen bir düzlem tanımlar. Kamera merkezlerini birleştiren doğru taban çizgisidir; bu doğru her görüntü düzlemini epipolde, yani diğer kameranın merkezinin görüntüsünde keser. Epipol görüntü çerçevesinin dışında veya sonsuzda bulunabilir. Her epipolar düzlem, her görüntüyü epipolar çizgi olarak da adlandırılan bir epilin boyunca keser; dolayısıyla bir görüntüdeki tüm epipolar çizgiler o görüntünün epipolünden geçer. Sahne noktası ilk kameranın görüş ışını boyunca kaydıkça ikinci görüntüdeki izdüşümü epipolar çizgi boyunca kayar.
Temel ve Esas Matrisler#
Sırası iki olan 3 × 3'lük bir matris olan temel matris F, piksel koordinatlarındaki ilişkinin tamamını ifade eder. Homojen biçimde (x, y, 1) yazılan karşılık gelen x ve x′ noktaları için epipolar kısıt x′ᵀ F x = 0'dır ve F x çarpımı, ikinci görüntüde x'in epipolar çizgisinin katsayılarını verir. Kameralar kamera kalibrasyonu ile kalibre edildiğinde, E = K′ᵀ F K esas matrisi aynı kısıtı normalize edilmiş koordinatlarda ifade eder ve E = [t]ₓ R biçiminde göreli dönme R ve öteleme t bileşenlerine ayrılır. Christopher Longuet-Higgins, esas matrisi ve sekiz nokta algoritmasını 1981'de tanıttı; Olivier Faugeras, Quang-Tuan Luong ve Richard Hartley ise kalibre edilmemiş temel matrisi 1990'ların başında geliştirdi. E yalnızca t'nin yönünü belirlediğinden, iki görüntü tek başına sahnenin şeklini bilinmeyen bir ölçeğe kadar verir; bilinen bir taban çizgisi veya nesne boyutu ölçeği belirler.
Her iki matris de anahtar noktalar, örneğin SIFT özellikleri eşleştirilerek, eşleşmelerin asgari bir örneklemine matrisi tekrar tekrar uyduran ve en çok eşleşmenin üzerinde uzlaştığı modeli koruyan RANSAC gibi sağlam bir kestiriciyle tahmin edilir. Bu örnek, 100 noktanın iki görünümünü oluşturur, 20 eşleşmeyi rastgele yanlış eşleşmelerle değiştirir ve OpenCV'nin RANSAC'ın MAGSAC varyantıyla F matrisini tahmin eder:
import cv2
import numpy as np
rng = np.random.default_rng(0)
K = np.array([[800.0, 0, 320], [0, 800.0, 240], [0, 0, 1]]) # intrinsics shared by both cameras
# 100 scene points seen by two cameras; the second sits 0.5 m to the right, turned 5 degrees
points = rng.uniform([-2, -1, 4], [2, 1, 8], (100, 3))
rvec = np.array([0.0, np.radians(5), 0.0])
tvec = -cv2.Rodrigues(rvec)[0] @ np.array([0.5, 0.0, 0.0])
x1 = cv2.projectPoints(points, np.zeros(3), np.zeros(3), K, None)[0].reshape(-1, 2) + rng.normal(0, 0.5, (100, 2))
x2 = cv2.projectPoints(points, rvec, tvec, K, None)[0].reshape(-1, 2) + rng.normal(0, 0.5, (100, 2))
x2[:20] = rng.uniform([0, 0], [640, 480], (20, 2)) # replace 20 matches with wrong ones
# Robust estimation keeps the matches that agree with a single fundamental matrix
F, inliers = cv2.findFundamentalMat(x1, x2, cv2.USAC_MAGSAC, 1.0)
kept = inliers.ravel() == 1
print(f"Kept {kept[20:].sum()} of 80 true matches and {kept[:20].sum()} of 20 wrong ones")
# Each point in image 1 defines a line a*x + b*y + c = 0 in image 2 that its match must lie on
lines = cv2.computeCorrespondEpilines(x1, 1, F).reshape(-1, 3)
dist = np.abs((lines[:, :2] * x2).sum(axis=1) + lines[:, 2])
print(f"Median distance to epipolar line: {np.median(dist[20:]):.2f} px (true), {np.median(dist[:20]):.0f} px (wrong)")
print(f"Wrong match that survived: {dist[:20][kept[:20]].round(2)} px from its line")80 doğru eşleşmenin 75'ini korur ve 20 yanlış eşleşmenin 19'unu eler. Doğru eşleşmeler, yarım piksellik gürültünün belirlediği 0,43 piksellik ortanca uzaklıkla epipolar çizgilerine düşerken yanlış eşleşmeler 144 piksel uzaktadır. Hayatta kalan tek yanlış eşleşme, eşleşmeyi çizgiyle sınırlayan kısıt nedeniyle çizgisinden 0,61 piksel uzakta kalmıştır; çizgi üzerindeki doğru noktayı yalnızca görünüş belirleyebilir.
Saf dönmede taban çizgisi yoktur ve tek bir düzlem birçok temel matrise eşit ölçüde uyum sağlar; bu nedenle her iki durumda da düzlemin görünümleri arasındaki 3 × 3'lük eşleme olan homografi kullanılır. ORB-SLAM, haritasını homografiyle ve temel matrisle eş zamanlı olarak başlatır ve eşleşmeleri daha iyi açıklayanı seçer.
Düzeltme, Ayrım ve Derinlik#
Düzeltme, epipolar çizgileri yatay ve hizalı olacak şekilde bir stereo çiftini dönüştürür; böylece tüm eşleşmeler aynı görüntü satırına yerleşir. Stereo eşleştiriciler daha sonra her satırda arama yapar; eşleşmeler arasındaki sütun farkı olan ayrım d, Z = f × B / d odak uzaklığı f ve taban çizgisi B için derinliği verir ve stereo düzenekleri bu şekilde derinlik kestirimi haritaları üretir. KITTI stereo kıyaslaması, bu eşleştiricileri otonom sürüş sahnelerinin düzeltilmiş görüntülerinde puanlar.
Stereo Dışındaki Uygulamalar#
3B yeniden yapılandırmada COLMAP, temel, esas veya homografi matrislerini uydurarak her görüntü çiftini doğrular ve yeterli geometrik desteği olmayan çiftleri ve eşleşmeleri eler. Görüntü eşleştirme işlem hatları, yanlış karşılıkları reddetmek için aynı denetimi kullanır; görüntü kaydı ise panoramaları birleştirmede olduğu gibi sahne düz olduğunda veya kamera yalnızca döndüğünde yukarıdaki homografi yolunu izler. Hareketli bir kameranın iki karesi arasında epipolar kısıt yalnızca statik yüzeyler için geçerlidir; dolayısıyla bu kısıtı ihlal eden optik akış vektörleri bağımsız hareket eden nesneleri ortaya çıkarır. İnsan pozunun çok kameralı çekiminde, 3B iskelet üçgenlenmeden önce eklemlerin birbirlerinin epipolar çizgilerine ne kadar yakın olduğuna bakılarak aynı kişi görünümler arasında eşleştirilir; Ultralytics YOLO26 poz kestirim modeli, her görünümde kişi başına 17 COCO vücut anahtar noktası sağlar.










