Kanca
Bir kameranın çektiği görüntüde, aslında dümdüz olan bir masanın kenarı hafifçe kavisli çıkabilir. Kamera bozuk değildir. Lens, ışığı merkezden uzaklaştıkça biraz farklı büker; bu sapma rastgele değil, tahmin edilebilir ve ölçülebilir bir şeydir. Kalibrasyon, bu sapmayı sayılara dökme işidir.
Bağlantı yalnız bu sahnenin durumunu taşır; hesap veya ad içermez.
Ne oldu
Yukarıdaki sahne, bir hücreye tıkladığında piksel konumunu tek bir sabit katsayıyla ("1 piksel = X mm") gerçek dünya konumuna çeviriyor. Bu, gerçek bir kamera kalibrasyonunun kabaca basitleştirilmiş hali. Gerçek pinhole kamera modelinde iki ayrı parametre grubu var.
İç parametreler (intrinsic parameters). Kameraya özgüdür, sahneden bağımsızdır: odak uzaklığı (fx, fy) ve optik merkez (cx, cy). Bir kamera çerçevesindeki 3B nokta (X, Y, Z), bu parametrelerle piksel koordinatına projekte edilir:
u = fx · (X / Z) + cx
v = fy · (Y / Z) + cy
Örnek: fx = 800 piksel, cx = 320 piksel, bir nokta kamera çerçevesinde X = 100 mm, Z = 1000 mm konumundaysa: u = 800 · (100/1000) + 320 = 80 + 320 = 400 piksel.
Buna ek olarak lens gerçek bir pinhole değildir; ışığı hafifçe büker. OpenCV belgeleri bunu beş katsayıyla tanımlar: radyal distorsiyon (k1, k2, k3 — düz çizgileri eğri gösterir) ve tanjansiyel distorsiyon (p1, p2 — lensin tam hizalı olmamasından gelir).
Dış parametreler (extrinsic parameters). Kameranın kendisi değil, kameranın dünyaya (veya robot tabanına) göre nerede durduğunu tanımlar: bir rotasyon matrisi R ve bir öteleme vektörü t. Dünya çerçevesindeki bir nokta, kamera çerçevesine şöyle taşınır:
P_kamera = R · P_dünya + t
Nasıl bulunur. Zhang'ın yöntemi, düz bir satranç tahtası desenini farklı açılardan (pratikte OpenCV belgelerine göre en az ~10 görüntü) çekip, her görüntüdeki desen köşeleri ile bilinen gerçek geometri arasındaki homografiyi kullanır. Farklı görüntülerden gelen kısıtlar birleştirilerek iç parametreler için kapalı form bir başlangıç çözümü bulunur, ardından tüm parametreler toplam yeniden-projeksiyon hatasını en aza indirecek şekilde sayısal olarak (Levenberg-Marquardt) iyileştirilir.
Gerçek dünyada
cv2.calibrateCamera() (OpenCV), yukarıdaki adımların tamamını uygular:
birden çok satranç tahtası görüntüsü verirsin, kamera matrisini,
distorsiyon katsayılarını ve her görüntü için ayrı bir dış parametre
(R, t) çiftini döner. Bir robot hücresinde bir kamera sabit bir konuma
veya robot bileğine monte edildiğinde, kameranın piksel ölçümlerini
gerçek dünya milimetresine çevirebilmek için önce bu iç kalibrasyon
yapılır — bir sonraki derste ele alınan , bunun
üstüne kurulur.
Dene
Sonraki
Yukarıdaki sahne, kamera çerçevesinde bir konum hesaplıyor. Ama robot kontrolörüne "oraya git" diyebilmen için bir bilgi daha eksik: kamera çerçevesi ile robotun hareket ettiği çerçeve arasındaki dönüşüm. Bir sonraki ders bunu — el-göz kalibrasyonunu — ele alıyor.