Contents — find the section you need

Görsel SLAM, Görsel Odometri, epipolar geometri ve PnP yöntemlerinin tümü, piksel koordinatlarından 3 boyutlu uzaya doğru bir eşlemeyi varsayar. Ancak bir mercekten geçen ışık, ders kitaplarındaki ideal iğne deliği gibi bir görüntü oluşturmaz. Piksel birimlerinde odak uzaklığı nedir? Ana nokta, görüntü merkezinden ne kadar uzaktadır? Düz bir çizgi görüntüde ne kadar bükülür? Kamera kalibrasyonu, bu nicelikleri sayısal olarak çözme işlemidir. Kalibrasyondan tasarruf ederseniz, üzerine ne kadar gelişmiş bir SLAM veya SfM algoritması eklenirse eklensin, temelden dışarı doğru sistematik bir hata yayılır.

0. 30 Saniyelik Özet

  • Kamera kalibrasyonu, 3 boyutlu noktalar ve görüntü noktaları arasındaki bilinen eşleşmelerden içsel parametreleri (odak uzaklığı, ana nokta, eğim) ve bozulma katsayılarını tahmin etme işlemidir. Dışsal parametreler (her çekimdeki kamera pozisyonu) aynı anda elde edilir.

  • Objektifler hem radyal hem de teğetsel geometrik bozulmaya sahiptir. Standart gösterim, radyal bozulmayı k_1,k_2,k_3 ve teğetsel bozulmayı p_1,p_2 olarak ifade eden Brown-Conrady modelidir. Geniş açılı ve balık gözü objektifler farklı bir model gerektirir.

  • Zhang'ın yöntemi — düzlemsel bir deseni (örneğin dama tahtası) birkaç pozisyondan çekmek, her görünümün homografisinden içsel parametreleri doğrusal olarak çözmek ve ardından doğrusal olmayan optimizasyon yoluyla bozulmayı da içerecek şekilde iyileştirmek — pratikte standart kalibrasyon yöntemidir.

  • Kalibrasyon kalitesi, yeniden projeksiyon hatası ile değerlendirilir. Sadece ortalama değere bakmak yeterli değil; görüntü içindeki hata dağılımını ve pozlar arasındaki varyansı da kontrol etmeniz gerekir, aksi takdirde tam olarak yakalanmayan yerel bozulmaları kaçırırsınız.

  • Kalibrasyon, bir kez bulunduğunda sonsuza dek geçerli olan sabit bir değer değildir. Yakınlaştırma, odaklama, sıcaklık, şok ve çözünürlük veya kırpmadaki değişiklikler, içsel parametreleri değiştirebilir. Bu varsayım bozulduğunda, Visual SLAM, VO ve PnP gibi aşağı akış yazılımları sessizce bozulmaya başlar.

1. Koordinatlardan İğne Deliği Modelini Yeniden İncelemek

Bir dünya koordinat noktası \mathbf{X}=(X,Y,Z,1)^\mathsf{T} (homojen koordinatlar), iğne deliği modelinde ölçeğe kadar şu şekilde görüntüye yansıtılır:

\tilde{\mathbf{x}} \sim P\mathbf{X},\qquad P=K[R\mid\mathbf{t}]

R\in SO(3) ve \mathbf{t}, dünya koordinatlarından kamera koordinatlarına olan dönüş ve ötelemedir (dışsal parametreler) ve K içsel matristir.

K=\begin{bmatrix}f_x&s&c_x\\0&f_y&c_y\\0&0&1\end{bmatrix}

Burada f_x,f_y, piksel birimlerindeki odak uzaklıklarıdır, (c_x,c_y), ana noktadır (optik eksenin görüntü düzlemini kestiği yer) ve s, eğimdir (çoğu modern sensörde neredeyse sıfırdır). Kalibrasyon, bu K'i, bozulma katsayılarını ve her atışın R,\mathbf{t}'sini tamamen gözlemlenen verilerden geri kazanmanın ters problemidir.

Diagram 1 · Use the button to switch views
Recovering intrinsic parameters from a checkerboard seen in multiple poses A diagram showing a planar pattern photographed several times at different angles and distances by a fixed camera, and the intrinsic matrix K and distortion coefficients being jointly estimated from each view's homography. Camera (fixed) Pose 1 Pose 2 Pose 3 K, k1,k2,k3 p1,p2 R,t for each pose

Şemada gösterildiği gibi, tek bir çekim içsel parametreleri dışsal parametrelerden ayıramaz. Sadece birkaç çekim toplanarak bu ayrım yapılabilir. Farklı pozisyonlardaki (eğim, mesafe) gözlemler neredeyse benzersiz bir şekilde belirlenebilir — ve bu, Zhang'ın yönteminin temel fikridir ve bu da bir sonraki bölümde ele alınacaktır.

2. Bir Mercek İdeal Bir İğne Deliği Değildir: Bozulma Modeli

Gerçek merceklerde radyal bozulma ve teğetsel bozulma vardır. Normalleştirilmiş görüntü koordinatlarını (x,y)=(X_c/Z_c,\,Y_c/Z_c) ve yarıçapı r^2=x^2+y^2 olarak yazarsak, Brown-Conrady bozulma modeli şu şekilde yazılabilir:

x_d = x\left(1+k_1r^2+k_2r^4+k_3r^6\right) + 2p_1xy+p_2\left(r^2+2x^2\right)

y_d = y\left(1+k_1r^2+k_2r^4+k_3r^6\right) + p_1\left(r^2+2y^2\right)+2p_2xy

k_1,k_2,k_3 radyal bozulma katsayılarıdır ve p_1,p_2 teğetsel bozulma katsayılarıdır. Radyal bozulma, görüntünün mercek merkezinden uzaklığa bağlı olarak küçüldüğü veya şiştiği bir olgudur ve geniş açılı merceklerde görülen belirgin "namlu" bozulması veya Telefoto lenslerde görülen "iğne yastığı" bozulması. Teğetsel bozulma, lens grubu ve görüntü sensörünün mükemmel paralel olmadığı uygulama kusurlarından kaynaklanan daha küçük, asimetrik bir bileşendir. Son piksel koordinatları \tilde{\mathbf{x}}_{px}=K(x_d,y_d,1)^\mathsf{T} olarak elde edilir.

Diagram 2 · Use the button to switch views
Comparing an undistorted grid to barrel-type radial distortion The left side shows an ideal grid whose lines stay straight; the right side shows the same grid appearing as a barrel shape, curving inward more toward the outer edges, due to a lens's radial distortion. Ideal (no distortion) Barrel-type radial distortion

Balık gözü lensler gibi son derece geniş görüş alanına sahip lensler için, Brown-Conrady polinom modeli kenarlara yakın yerlerde sapmaya eğilimlidir ve pratik değildir. Bunun yerine, OpenCV'nin balık gözü modeli gibi açı tabanlı eşit uzaklık projeksiyon yaklaşımı kullanmak yaygındır. "Tek bir bozulma modelini ezberlemek" yerine, modelin lensin görüş alanına ve optik tasarımına göre seçilmesi gerektiğini akılda tutmak önemlidir.

3. Zhang Yöntemi: Düzlemsel Desenle Kalibrasyon

Günümüzde en yaygın olarak uygulanan yöntem, Zhengyou Zhang'ın 2000 yılında yayınladığı düzlemsel desen kalibrasyon yöntemidir. Özel bir 3D kalibrasyon düzeneğine gerek yoktur; tek gereken, basılı bir dama tahtası gibi düzlemsel bir deseni, kamerayı veya desenin kendisini hareket ettirerek, çeşitli pozlardan fotoğraflamaktır.

Desen düzleminden (belirli bir pozda i alınan Z=0) görüntüye eşleme, döndürme matrisinin birinci ve ikinci sütunları \mathbf{r}_1,\mathbf{r}_2 ve öteleme \mathbf{t} kullanılarak bir homografi olarak yazılabilir.

H_i \sim K\begin{bmatrix}\mathbf{r}_1&\mathbf{r}_2&\mathbf{t}\end{bmatrix}

Burada, her pozun H_i değeri, desen üzerindeki bilinen ızgara noktaları ve bunların görüntü karşılıkları kullanılarak, Homografi Temel Kılavuzunda ele alınan DLT yöntemi ile doğrusal olarak tahmin edilebilir. Döndürme matrisinin sütunlarının ortonormal olduğu kısıtlamasını kullanarak — \mathbf{r}_1^\mathsf{T}\mathbf{r}_2=0,\ \|\mathbf{r}_1\|=\|\mathbf{r}_2\| — B=K^{-\mathsf{T}}K^{-1}'da doğrusal bir denklem elde edilir:

\mathbf{h}_1^\mathsf{T}B\mathbf{h}_2=0,\qquad \mathbf{h}_1^\mathsf{T}B\mathbf{h}_1=\mathbf{h}_2^\mathsf{T}B\mathbf{h}_2

bu da her poz için iki denklem verir (\mathbf{h}_1,\mathbf{h}_2, H_i'ün birinci ve ikinci sütunlarıdır). B 6 serbestlik derecesine sahip simetrik bir matris olduğundan, 3 veya daha fazla poz verildiğinde, B doğrusal en küçük kareler yöntemiyle bulunabilir ve ardından K Cholesky ayrıştırmasına eşdeğer bir prosedürle kapalı formda bulunabilir. Bu nedenle Zhang'ın yöntemi yalnızca "bir düzlemin birkaç çekimine" ihtiyaç duyar. Bununla birlikte, tüm pozlar görüntü düzlemine neredeyse paralel ise (ön-paralel), denklemler dejenere olur, bu nedenle birkaç farklı eğimde pozlar gereklidir.

Kapalı form çözümü, bozulmayı göz ardı eden yalnızca bir başlangıç değeridir. Buradan itibaren, pratikteki standart iki aşamalı yaklaşım, bir sonraki bölümde açıklanan yeniden projeksiyon hatasını amaç fonksiyonu olarak kullanarak, bozulma katsayıları da dahil olmak üzere tüm parametreleri doğrusal olmayan optimizasyon (genellikle Levenberg-Marquardt) yoluyla iyileştirir.

4. Yeniden Projeksiyon Hatası ve Parametre Optimizasyonu

Kalibrasyonun amaç fonksiyonu, her pozisyon ve her ızgara noktası için, gözlemlenen piksel ile tahmin edilen parametrelerle hesaplanan projeksiyon pozisyonu arasındaki farkı en aza indirmektir. i pozisyonundaki gözlemi, j noktasını \mathbf{u}_{ij} olarak ve düzlemdeki karşılık gelen bilinen 3B noktayı \mathbf{X}_j olarak yazarsak,

E(K,\boldsymbol{\kappa},\{R_i,\mathbf{t}_i\})= \sum_{i=1}^{n}\sum_{j=1}^{m} \left\|\mathbf{u}_{ij}-\pi_d\!\left(K,\boldsymbol{\kappa},R_i\mathbf{X}_j+\mathbf{t}_i\right)\right\|^2

en aza indirilen değerdir. \boldsymbol{\kappa}=(k_1,k_2,k_3,p_1,p_2) bozulma katsayısı vektörüdür ve \pi_d bozulmayı da içeren projeksiyon fonksiyonudur. Bilinmeyenler büyüktür — K (4–5 serbestlik derecesi), \boldsymbol{\kappa} (3–5 serbestlik derecesi) ve poz başına R_i,\mathbf{t}_i (6 serbestlik derecesi × poz sayısı) — ancak yeterli sayıda gözlemlenen nokta ile problem iyi bir şekilde sınırlandırılmıştır. Bu formülasyon, Paket Ayarlaması Temel Kılavuzu'nda ele alınan "kamera pozunu ve 3B yapıyı birlikte optimize etme" çerçevesinin özel bir durumu olarak görülebilir. 3B nokta koordinatları bilindiği ve kalibrasyonda sabitlendiği için, sıradan paket ayarlamasından daha kolay bir alt problemdir.

Yeniden projeksiyon hatasının kök ortalama karesini (RMS) \left\|\mathbf{u}_{ij}-\hat{\mathbf{u}}_{ij}\right\| "kalibrasyon doğruluğu" olarak bildirmek yaygındır, ancak sadece ortalama değere bakarak kalibrasyonun tamamlandığını söylemek risklidir. Aşağıdakileri de her zaman kontrol edin:

  • Her pozun ortalama hatasında varyans olup olmadığı (belirli bir açıda özellikle büyük bir hataya sahip bir poz, desen bozulmasını, hareket bulanıklığını veya düzensiz aydınlatmayı gösterir)
  • Görüntü içindeki hatanın uzamsal dağılımı (kenarlarda kalan sistematik hata, bozulma modelinin sırasının veya türünün yetersiz olabileceğini gösterir)
  • Izgara noktası tespitinin alt piksel doğruluğu (köşe tespitinin kendisi kararsızsa, hiçbir optimizasyon miktarı bunu model hatasından ayırt edemez)

5. OpenCV'de Uygulama İskeleti

Tipik tek kameralı kalibrasyon prosedürü şöyle görünür. Çekim koşullarını (çözünürlük, yakınlaştırma, odak) sabitlemek ve görüntünün dört köşesinde, merkezinde ve birkaç eğiminde deseni fotoğraflamak, iyi bir kalibrasyonun %90'ını oluşturur.

import cv2 as cv
import numpy as np

pattern_size = (9, 6)  # number of internal corners
objp = np.zeros((pattern_size[0]*pattern_size[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2)
objp *= square_size_m  # measured side length of one square [m]

obj_points, img_points = [], []
for gray in calibration_images:  # multiple frames shot at different poses
    found, corners = cv.findChessboardCorners(gray, pattern_size)
    if found:
        corners = cv.cornerSubPix(gray, corners, (11, 11), (-1, -1),
                                   (cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 30, 0.001))
        obj_points.append(objp)
        img_points.append(corners)

ret, K, dist, rvecs, tvecs = cv.calibrateCamera(
    obj_points, img_points, gray.shape[::-1], None, None)
# ret is the RMS reprojection error [px]. Also compute per-pose error separately to check.

Geniş açılı veya balık gözü lensler için, normal calibrateCamera yerine cv.fisheye.calibrate API ailesini kullanın. Stereo bir sistem için, her iki kameranın içsel parametrelerine ek olarak göreceli pozisyonu bulmak için cv.stereoCalibrate'i ve sol ve sağ görüntüleri yatay epipolar çizgilere hizalamak için cv.stereoRectify'yi kullanın. Bu prosedür, Stereo Kameralar Nasıl Çalışır ve Derinlik Kameraları Nasıl Çalışır bölümlerinde ele alınan temel tasarımla doğrudan bağlantılıdır.

6. Kalibrasyon Kayması Neden Sonraki Sistemleri Bozuyor?

Visual SLAM, VO ve PnP'deki matematiğin çoğu, çekim koşulları değişmediği sürece kalibrasyon değerlerinin sabit kaldığı varsayımı altında yazılmıştır. Epipolar Geometri Temel Kılavuzu'ndaki Temel Matris tahmini, normalleştirilmiş koordinatları K^{-1}\tilde{\mathbf{x}} varsayar; PnP Temel Kılavuzu'ndaki yeniden projeksiyon hatası minimizasyonu da K'ü bilinen olarak ele alır. Eğer K veya bozulma katsayıları artık gerçek optik sistemle eşleşmiyorsa, bu hesaplamaların her biri aslında "yanlış cetvelle" yapılıyor demektir.

Özellikle, kalibrasyon değerleri aşağıdaki gibi nedenlerle sessizce bozulur:

  • Yakınlaştırma/odaklama değişiklikleri: Odak uzunluğu değişen bir lensle, f_x,f_y çekimden çekime değişir. Otomatik odaklamanın çalışmasına izin vermek, kalibrasyon zamanındaki ve çalışma zamanındaki içsel parametrelerin eşleşmeyeceği anlamına gelir.

  • Sıcaklık ve mekanik şok: Lens gövdesinde veya sensör montajında meydana gelen hafif bir konum değişikliği, ana noktayı ve bozulma katsayılarını etkiler. Bu durum özellikle dış mekan, otomotiv ve drone uygulamaları için göz ardı edilemez.

  • Çözünürlük, kırpma veya dijital yakınlaştırmadaki değişiklikler: K piksel birimi parametresi olduğundan, görüntü yeniden boyutlandırılırsa veya kırpılırsa, f_x,f_y,c_x,c_y de ölçeğe göre güncellenmelidir. Bunu yapmayı unutmak son derece yaygın bir hatadır.

  • Sol/sağ kamera donanımının deformasyonu: Stereo kurulumlarda, göreceli poz (dışsal kalibrasyon) -sadece içsel parametreler değil- zaman içinde hafifçe kayarsa, eşitsizlikten hesaplanan derinlikte sistematik bir hata oluşur.

Bu hataları tek, izole bir poz tahmininde fark etmek zordur. Ancak VO veya SLAM gibi zaman içinde pozu ardışık olarak entegre eden sistemlerde, sistematik yeniden projeksiyon hatası kayma olarak birikir ve döngü kapatma tarafından tamamen düzeltilemeyen bozuk bir harita üretir. Üretim sistemlerinde, sabit, bilinen 3B özellikler (bir binadaki düz çizgiler, bilinen boyuttaki işaretler) kullanarak kalibrasyon kaymasını çevrimiçi olarak izlemek veya periyodik yeniden kalibrasyon rutini oluşturmak önerilir.

7. Yaygın Hatalar ve Karşı Önlemler

Hata Modeli Ne Olur Karşı Önlem
Yetersiz poz çeşitliliği (sadece önden çekimler) K ve bozulma, özellikle k_3 ve ana nokta yetersiz belirlenir Görüntünün dört köşesine, merkezine ve çeşitli eğim açılarına çekim yapın

Düzlem düzlemden bozulmuş | Kalibrasyonun temel prensibi bozuluyor ve sistematik bir hata yayılıyor | Sert bir düz panele monte edin; baskı ölçeği hatalarını fiziksel ölçümle düzeltin |

Kaba köşe algılama doğruluğu | Modelin ifade gücünden bağımsız olarak yeniden projeksiyon hatasının tabanını yükseltir | Alt piksel düzeltmesi, yeterli çözünürlük, odak ve pozlama yönetimi |

Sıradan bir iğne deliği bozulma modelinin geniş açılı bir lense uygulanması | Görüntü kenarlarında ıraksak hata, kararsız optimizasyon | Balık gözü modeli gibi görüş alanına uygun bir model seçin |

Yeniden boyutlandırma/kırpma işleminden sonra K güncellenmiyor | Ana nokta ve odak uzaklığı ölçekle senkronize olmuyor, bu da poz tahmininde sistematik hataya neden oluyor | Her görüntü dönüşümünde K'yi karşılık gelen ölçeğe dönüştürün |

Hareketli deklanşörü göz ardı etme | Gerçek projeksiyon merkezi, tek bir kare içinde bile satır satır farklılık gösterir | Küresel deklanşör kullanın veya satır zamanlama modeliyle düzeltin |

8. Özet

Kamera kalibrasyonu, bir görüntüyü "sadece 2 boyutlu bir dizi"den "geometrik olarak yorumlanabilir bir gözlem"e dönüştüren ilk adımdır. İğne deliği modelinin içsel ve dışsal parametreleri, radyal ve teğetsel bozulma katsayılarıyla birlikte, Zhang'ın düzlemsel desen yönteminde olduğu gibi, çeşitli pozisyonlardaki gözlemlerden elde edilir ve yeniden projeksiyon hatasının doğrusal olmayan optimizasyonu ile tamamlanır. Bu kalibrasyonun kalitesi, herhangi bir algoritmanın kendi doğruluk ölçütünde görünmez, ancak her bir sonraki aşamadaki her denklemin temelini oluşturur - epipolar geometri, PnP, Görsel SLAM, SfM, demet ayarlaması. Kalibrasyon tek seferlik bir ritüel değildir - çekim koşulları değiştikçe sürekli olarak izlenmesi gereken bir işlem hattının parçasıdır.

Anlayışınızı kontrol edin
Bir kalibrasyon görüntüsündeki küçük bir hata yeterli mi?

Uyum bu görüşü destekleyebilir.

Çeşitli eğimleri, görüntü kenarlarını kontrol edin ve ayrı doğrulama görüntülerini ayırın. ## Referanslar - [Zhang, Kamera Kalibrasyonu için Esnek Yeni Bir Teknik (IEEE TPAMI, 2000)](https://doi.org/10.1109/34.888718) - [Heikkilä & Silvén, Örtük Görüntü Düzeltmesi ile Dört Adımlı Kamera Kalibrasyon Prosedürü (CVPR 1997)](https://dl.acm.org/doi/10.5555/794189.794489) - [Hartley & Zisserman, Bilgisayar Görüşünde Çoklu Görünüm Geometrisi (yazarların resmi sayfası)](https://www.robots.ox.ac.uk/~vgg/hzbook/) - [OpenCV — Kamera Kalibrasyonu ve 3B Yeniden Yapılandırma](https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html) - [OpenCV — Kamera Kalibrasyonu eğitimi](https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html) - [OpenCV — balık gözü kalibrasyon modülü](https://docs.opencv.org/4.x/db/d58/group__calib3d__fisheye.html) - [Kalibr (kamera/IMU kalibrasyon aracı, resmi depo)](https://github.com/ethz-asl/kalibr)

What to read next

Continue the seriesÖzellik Algılama Temel BilgileriExplore another aspect of this fieldGörüntü parlaklığı ve luminans Lab — pozlama, gama ve kırpmaExplore another aspect of this fieldÖzellik noktası çıkarma laboratuvarı — Harris ve Shi–Tomasi karşılaştırması