相機校準的目的是找到相機的內在和外在引數。
總覽
為了校準相機,我們對3D物件(例如圖案立方體)成像,並使用3D物件與其2d影象之間的3D-2D點對應關係來查詢相機引數。
我們需要找到兩組引數:內在引數和外在引數。固有引數是攝像機內部的那些引數,例如焦距,主要點等,而固有引數是規定攝像機相對於攝像機的位置t(平移向量)和方向R(旋轉矩陣)的引數。外部座標系(通常稱為世界座標系)。在第一部分中,我們將僅計算內部引數(假設外部引數是已知的),而在第二部分中,我們將共同計算內部引數和外部引數。
內部引數計算
我們使用的校準物件是魔方。
我們對立方體進行成像,如下圖所示。然後,我們獲得許多3D-2D點對應關係。在這一部分中,我們已經計算了點對應關係,您要做的就是從它們中計算出固有引數。3D-2D對應關係在資料檔案“ pt_corres.mat”中給出。該檔案包含“ pts_2D”,2D點和“ cam_pts_3D”以及所有對應的3D點。現在,我們必須找到K矩陣
K矩陣
使3D與2D點相關的矩陣K是具有以下形狀的上三角矩陣。
其中αx,αy表示以x和y畫素尺寸表示的焦距,px和py是主要點,s是偏斜引數。
2D點(x,y)與相應3D點(X,Y,Z)之間的關係由下式給出
1. x =αx(X / Z)+ s(Y / Z)+ px
2. y =αy(Y / Z)+ py
內部和外部引數計算
在上一部分中,我們假設已知外部引數,然後計算了內部引數,即假設我們知道了相機座標系中的3D點對應關係。但是這種情況很少發生。幾乎總是我們僅在世界座標系中知道3D點的對應關係,因此我們需要估算內在和外在引數。但是在此之前,我們需要獲取3D-2D點對應關係。如圖1所示,相對於世界座標系描述了3D點。該圖顯示了世界座標系的x,y和z軸以及一些示例3D點,它們是正方形的角。有28點。
1. 世界座標系中的3D點在rubik_3D_pts.mat中提供,影象上相應的2D點在rubik_2D_pts.mat中提供
2. 接下來,我們要計算相機投影矩陣P = K [R t],其中K是內部/本徵校準矩陣,R是旋轉矩陣,用於指定相機座標系與世界座標系的方向,而t是轉換向量,可以確定攝影機中心在世界座標系中的位置。
3. 為了計算P,我們使用“直接線性變換(DLT)”。DLT是要理解的重要演算法,下面將對其進行詳細說明。
離散線性變換(DLT)
離散線性變換(DLT)是一種簡單的線性演算法,用於從相應的3空間和影象實體估計攝像機投影矩陣P。相機矩陣的這種計算稱為切除。最簡單的這種對應關係是在未知相機對映下的3D點X及其影象x之間。給定足夠多的這種對應關係,可以確定相機矩陣。
演算法
假設給出了3D點和2D影象點之間的許多點對應關係。相機矩陣是一個3x4矩陣,它透過xi = P.Xi將點關聯起來。對於每個對應關係Xi xi xi,我們得到三個方程,其中兩個線性獨立,在下面進行描述
步驟
1. 從一組n個點對應關係中,我們透過為每個對應關係堆疊以上形式的方程式來獲得2nx12矩陣A
2. 獲得A的SVD。對應於最小奇異值的單位奇異向量是解p。具體來說,如果A = UDVT,D對角線帶有對角線正項,並按對角線降序排列,則p是V的最後一列
3. 獲得p並以矩陣形式寫入以獲得矩陣P
透過解方程組Ap = 0來計算投影矩陣P,其中p是包含矩陣P項的向量。
計算P所需的最小點對應數量
3×4矩陣P具有12個元素,但比例是任意的,因此具有11個自由度。由於每個點的對應關係都有2個方程,因此至少需要5.5個對應關係才能求解P。0.5表示從第六個點開始僅使用一個方程,即我們選擇x座標或y-第六個影象點的座標。
在此最小數量的對應關係下,該解決方案是精確的,並且可以透過求解Ap = 0來獲得,其中A在這種情況下為11x12矩陣。
如果資料不精確,則給出n≥6個點對應關係,那麼將沒有精確的解決方案,我們透過最小化代數或幾何誤差來解決。
從投影矩陣P獲得引數K,R和t
透過RQ分解將P分解為K,R,t。它涉及計算分解A = RQ,其中Q為unit /正交,R為上三角。
驗證計算引數的準確性
為此,我們將計算重新投影誤差,該誤差是對2D點與透過使用計算出的相機引數投影3D點而獲得的2D點之間距離的度量。
該圖以橙色顯示了原始2D點,並以綠色顯示了重新投影的點。可以看出,重新投影的點與實際點非常匹配。
參考文獻
[1] R. Hartley and A. Zissermann, Multiview geometry, 2nd edition, Cambridge University Press.
[2] Z. Zhang. A flexible new technique for camera calibration. IEEE Transactions on Pattern Analysis and Machine Intelligence, 22(11):1330–1334, 2000.
有關詳細程式碼,請訪問https://github.com/sreenithy/Camera-Calibration。