Contents — find the section you need
Bir kamerayla çekilen bir görüntünün, haritada karşılık gelen birkaç bilinen 3 boyutlu noktası olduğunu varsayalım. Kameranın nereye yerleştirildiğini ve hangi yöne baktığını bulma problemi PnP (Perspektif-n-Nokta) problemidir. Görsel SLAM harita takibi, AR'da sanal nesnelerin üst üste bindirilmesi, robotlar için el-göz kalibrasyonu ve ölçüm kameraları için poz tahmini gibi birçok alanda yaygın olarak kullanılır.
0. 30 Saniyelik Özet
-
Giriş, kamera içsel matrisi K, bilinen 3 boyutlu noktalar \mathbf X_i ve bunlara karşılık gelen görüntü noktaları \mathbf u_i'dir. Çıkış, bir döndürme R ve öteleme t'tür.
-
Projeksiyon denkleminin yeniden projeksiyon hatasını en aza indirir \mathbf u_i\sim K(R\mathbf X_i+t). 3 nokta ile P3P, aday çözümler verir; 4 veya daha fazla nokta ile, fazlalık, aykırı değerleri tespit etmenizi sağlar.
-
EPnP, her noktayı 4 sanal kontrol noktasının doğrusal bir kombinasyonu olarak ifade eder ve birçok nokta için hızlı bir şekilde çözüm üretir. Daha sonra Levenberg-Marquardt gibi son bir doğrusal olmayan optimizasyon sonucu iyileştirir.
-
Aykırı değerler eşleşmelere karışırsa, tüm poz tahmini çökebilir, bu nedenle RANSAC-PnP, pozitif derinlik kontrolleri ve kareler arası tutarlılık ile doğrulanır.
-
Noktalar neredeyse eş düzlemli olduğunda, paralaks küçük olduğunda, içsel değerler yanlış olduğunda veya sahnede hareketli deklanşör veya dinamik nesneler olduğunda dejenerasyon ve ıraksama yaygındır.
1. Projeksiyon Modeli
Şekil 1 — Eşleşen kimlikler 3B-2B yazışmalarını tanımlar. PnP bir poz hipotezi oluşturur, yeniden projeksiyon artıklarıyla aykırı değerleri reddeder ve dünya koordinatlarını kamera koordinatlarına eşleyen R,t'yi iyileştirir.
Kamera koordinat çerçevesindeki bir nokta \mathbf X_c=R\mathbf X_w+t olsun. İğne deliği modelinde, normalleştirilmiş görüntü koordinatları
ve piksel koordinatları içsel matris aracılığıyla elde edilir
\mathbf u\sim K\mathbf X_c olarak. R\in SO(3) döndürme ve t ötelemedir. Mercek bozulması varsa, projeksiyondan önce ve sonra bozulma düzeltmesi gereklidir.
Bilinmeyenler, 3 dönme artı 3 öteleme olmak üzere 6 serbestlik derecesidir. 3B noktalar \mathbf X_i ve gözlemler \mathbf u_i arasındaki n eşleşmeleri verildiğinde, yeniden projeksiyon hatası
en aza indirilir. \pi perspektif bölme ve \rho Huber gibi sağlam bir kayıptır.
Dönüşümü kamera konumuyla karıştırmayın
OpenCV'nin solvePnP'si, nesne/dünya noktalarını kameraya eşleyen dönüşüm için rvec, tvec döndürür. Çerçeve. Kamera merkezini dünya koordinatlarında elde etmek için \mathbf C_w=-R^Tt kullanın; kamera pozisyonu için T_{cw}'ü ters çevirerek T_{wc}'ü elde edin. tvec'i kameranın dünya pozisyonu olarak ele almak yaygın bir hatadır. Ayrıca, giriş görüntü noktaları zaten bozulmadan arındırılmışsa, bozulmayı iki kez uygulamaktan kaçının.
2. P3P, AP3P ve EPnP
P3P (Perspective-3-Point), 3 noktanın görüntü açılarını ve 3 boyutlu noktalar arasındaki mesafeleri kullanarak kamera merkezinden uzaklığı geri kazanır ve 4'e kadar çözüme sahiptir. Doğru çözüm, 4. bir noktaya veya haritanın bilinen pozisyonuna göre kontrol edilerek seçilir. AP3P, çözümü cebirsel olarak yeniden düzenleyen hızlı bir varyanttır.
Birçok nokta olduğunda, EPnP (Efficient PnP), her 3 boyutlu noktayı 4'ün ağırlıklı toplamı olarak ifade eder. Sanal kontrol noktaları.
Kontrol noktalarının kamera koordinatları doğrusal denklemlerden bulunur ve dönüş ve öteleme bunlardan elde edilir. Hesaplama maliyeti nokta sayısına göre neredeyse doğrusal olduğundan, SLAM'in birçok işaret noktasından bir başlangıç pozisyonu oluşturmak için çok uygundur. Başlangıç çözümünden sonra, yeniden projeksiyon hatası Levenberg-Marquardt ile yinelemeli olarak iyileştirilir.
3. RANSAC-PnP
Özellik noktası eşleşmeleri, benzer görünümlü desenler, hareketli nesneler ve yanlış harita kimlikleriyle karışır. Standart yaklaşım RANSAC'tır: minimum bir nokta kümesinden geçici bir pozisyon oluşturun, her eşleşmeyi yeniden projelendirin ve kaç tane iç noktanın bir eşik içinde kaldığını sayın. Aykırı değer oranı \epsilon, minimum örneklem boyutu s ve başarı olasılığı p göz önüne alındığında, gereken yineleme sayısı N , şunlar tarafından belirlenir:
Gerekli yineleme sayısı aykırı değer oranıyla birlikte hızla arttığı için, özellik noktası oranı testi, ızgara tabanlı dağılım veya dinamik nesne maskesi kullanarak önceden \epsilon değerini düşürün. OpenCV'nin solvePnPRansac yöntemi, nokta sayısını, bayrakları (EPNP, P3P, SQPNP, vb.), yeniden projeksiyon eşiğini ve güveni açıkça belirterek kullanılır.
4. Dejenereliği Tespit Etme
Eşdüzlemli nokta kümeleri
Tüm 3B noktalar aynı düzlemde yer alıyorsa, PnP'den gelen derinlik ve pozisyon belirsiz hale gelir ve geometri aynı şekilde homografi ile de açıklanabilir. Satranç tahtası kalibrasyonu kasıtlı olarak bir düzlem kullanır, ancak pozisyonun serbestlik derecelerini yeterince kısıtlayan bakış açıları ve nokta düzenleri seçmeniz gerekir. Doğrudan bakıldığında derinlikte kararsız hale gelen tek bir AR işaretçisi de aynı şekildedir. fenomen.
Dar görüntü kapsamı ve uzun menzil
PnP, doğrudan tek bir görüntü ve bilinen 3B noktaları kullanır, bu nedenle kareler arası paralaks kendi başına gerekli bir girdi değildir. Bununla birlikte, eşleşmeler yalnızca küçük bir görüntü bölgesini kapladığında, hedef uzakta ve küçük göründüğünde veya 3B noktaların derinlik varyasyonu az olduğunda, kötü koşullandırılmıştır. Yalnızca iç nokta sayısına göre bir sonucu kabul etmeyin: görüntü kapsamını, yeniden projeksiyon RMSE'sini ve poz kovaryansını veya bozulmalara duyarlılığını inceleyin, ardından gerektiğinde bir IMU veya derinlik sensörü ekleyin.
Kalibrasyon ve zamanlama
Odak uzaklığı, ana nokta ve bozulmadaki hatalar, her noktada sistematik bir yeniden projeksiyon hatasına dönüşür. İç matrisi yakınlaştırma, sıcaklık veya odakla değişen bir lensin yeniden kalibre edilmesi gerekir. Araçlarda ve dronlarda, yuvarlanan deklanşörün sıra zamanlaması IMU ile senkronize edilmezse, PnP "eğilmiş" bir kamera pozu döndürür.
5. PnP'nin Rolü Görsel SLAM
Görsel SLAM'de, önceden üçgenleştirilmiş harita noktalarının sayısı arttıkça, PnP ile kamera pozisyonu kare kare takip edilebilir. Pozisyon sabit tutulurken, yeni noktalar üçgenleştirilir ve yeterli sayıda anahtar kare biriktiğinde, Paket Ayarlaması pozisyonu ve haritayı birlikte optimize eder. Bunu bir iş bölümü olarak anlamak en kolayıdır: PnP hafif ön uçtur ve Paket Ayarlaması küresel tutarlılığı sağlar.
6. Uygulama Kontrol Listesi
-
K ve bozulmayı bir dama tahtası veya benzeri bir yöntemle kalibre edin ve yeniden projeksiyon hatasını kaydedin.
-
3B noktalarının birimlerini (m/mm) ve koordinat çerçevesini, görüntü noktalarının bozulma düzeltme durumuyla hizalayın.
-
Oran testi, karşılıklı en yakın komşular ve zamansal izleme ile eşleşmeleri daraltın.
-
Aykırı değerleri RANSAC-PnP ile kaldırın ve içsel dağılımı ve yeniden projeksiyonu kaydedin. hata.
-
Derinliğin pozitif olduğunu, poz değişikliğinin fiziksel olarak makul olduğunu ve önceki kareden farkın makul olduğunu kontrol edin.
-
Koşullar kötüyse, IMU'ya, derinliğe, homografiye veya yeniden başlatmaya geri dönün.
Minimum uygulama sırası
OpenCV ile önce solvePnPRansac'dan rvec, tvec, inliers'i alın, yalnızca iç noktaları solvePnPRefineLM'ye iletin ve son olarak iç nokta RMSE'sini ve hata dağılımını kendiniz hesaplamak için projectPoints'i kullanın. Yalnızca başarılı bir API dönüşü, aşırı uyumsuzlukları, kümelenmiş noktaları veya fiziksel olarak imkansız bir pozu tespit etmez.
ok, rvec, tvec, inliers = cv2.solvePnPRansac(
object_points, image_points, K, dist,
flags=cv2.SOLVEPNP_EPNP,
reprojectionError=3.0, confidence=0.999, iterationsCount=200,
)
if not ok or inliers is None or len(inliers) < 6:
raise RuntimeError("PnP failed or has too few inliers")
idx = inliers.ravel()
rvec, tvec = cv2.solvePnPRefineLM(
object_points[idx], image_points[idx], K, dist, rvec, tvec
)
projected, _ = cv2.projectPoints(object_points[idx], rvec, tvec, K, dist)
rmse = np.sqrt(np.mean(np.sum(
(projected.reshape(-1, 2) - image_points[idx].reshape(-1, 2)) ** 2,
axis=1,
)))
R, _ = cv2.Rodrigues(rvec)
camera_center_world = -R.T @ tvec.reshape(3, 1)
Ne 3.0 px ne de altı iç nokta evrensel bir kabul eşiği değildir; bunlar yalnızca bu örnek için başlangıç değerleridir. Eşikleri görüntü çözünürlüğünden, özellik hassasiyetinden ve uygulamanın izin verilen poz hatasından türetin. Ayrıca iç noktaların doğruluğunu da doğrulayın. Noktaların tek bir görüntü köşesinde kümelenmediğini ve her noktanın kamera çerçevesi derinliğinin Z_c>0 olduğunu varsayar.
7. Özet
PnP, 3 boyutlu bir harita ile 2 boyutlu bir görüntü arasındaki eşleşmeleri 6 serbestlik derecesine sahip bir kamera pozisyonuna dönüştüren köprüdür. P3P/EPnP ile başlangıç çözümü oluşturun, RANSAC ile aykırı değerleri kaldırın ve doğrusal olmayan optimizasyonla iyileştirin. Sadece nokta düzeni, kalibrasyon, paralaks ve zaman senkronizasyonunu birlikte yöneterek bu, Görsel SLAM veya AR için istikrarlı bir pozisyon tahmini haline gelir.
PnP sadece iki görüntüye mi ihtiyaç duyuyor?
Temel girdileri bilinen 3 boyutlu noktalar, bunların 2 boyutlu görüntü eşleşmeleri ve kamera içsel parametreleridir. Bu, 2 boyutludan 2 boyutluya hareket tahmininden farklıdır. eşleşmeler.
Yorumlar
Lütfen önce giriş yapın.
Henüz veri yok.