3D相機模型
面掃描針孔相機:面掃描相機使用一個鏡頭來進行中心投影,圖像可能會出現徑向和切向畸變。
面掃描遠心相機:面掃描相機使用一個遠心鏡頭來進行平行投影,圖像可能會出現徑向和切向畸變。
線掃描針孔相機:線掃描相機使用一個鏡頭來進行中心投影,圖像可能會出現徑向畸變。
對於面掃描相機,點P(C)的投影給出了相機坐標系到亞像素圖像的過程,它包括了以下幾個步驟:1.點投影到圖像平面,i.e:相機的傳感器平面。如果是面掃描針孔相機模型,如果焦距在CamParam(相機參數)中大於0,這個投影就可以描述成以下問題:
P(C) = {X, Y, Z}
U = Focus * X / Z;
V = Focus * Y / Z;
如果是面掃描遠心相機模型,如果焦距在CamParam(相機參數)中為0,假設攝像機鏡頭進行的平行投影,在這種情況下,這個投影就被描述成下面的問題:
P(C) = {X, Y, Z}
U = X ;
V = Y ;
對於面掃描相機的兩種類型,鏡頭畸變模型被划分成division(分工)模型和polynomial(多項式)模型。division(分工)模型使用一個參數(Kappa)來表示徑向畸變。
如果是division(分工)模型,從畸變圖像平面坐標系轉換到非畸變圖像平面坐標系使用如下公式:
U = u / (1 + Kappa*(u*u + v*v))
V = v/(1+ Kappa*(u*u + v*v))
從非畸變圖像平面坐標系到畸變圖像平面坐標系的反變換使用如下公式:
u = (2*U)/(1 + sqrt(1 - 4*Kappa*(U*U + V*V)))
v = (2*V)/(1 + sqrt(1 - 4*Kappa*(U*U + V*V)))
如果是polynomial(多項式)模型,使用3個參數K1,K2,K3來表示徑向畸變,兩個參數P1,P2來表示切向畸變,從畸變圖像平面坐標系轉換到非畸變圖像平面坐標系使用如下公式:
U = u + u*(K1*r*r + K2*r*r*r*r + K3*r*r*r*r*r*r)+ 2*P1*u*v + P2*(r*r + 2*u*u)
V = v + v*(K1*r*r + K2*r*r*r*r + K3*r*r*r*r*r*r)+ P1*(r*r + 2*v*v)+ 2*P2*u*v
r = sqrt(u*u + v*v)
這個問題不能進行反變換,因此,畸變圖像平面坐標必須被計算出從非畸變圖像平面坐標。
兩種畸變模型的使用,在StartCamParam中通過變量的數目來識別,如果StartCamParam包含8個值,說明是division(分工)模型。如果StartCamParam包含12個值,說明是polynomial(多項式)模型。
最后,點從圖像平面坐標系轉換到圖像坐標系即像素坐標系:
c = u / Sx + Cx;
r = v / Sy + Cy;
對於線掃描相機,在相機與目標物體的相對運動建立模型。在HALCON中,假設這個運動是由以下幾個條件構成的:
1.相機沿一條直線以恆定的速度移動。
2.相機的方向是固定的。
3.所有的圖像都是相對運動的結果。
這個運動被描述成一個運動矢量V=(Vx, Vy, Vz),在[meter/scanline]相機坐標系中,假設一個固定的物體,運動矢量描述相機的運動。實際上,這個過程相當於一個運動的物體沿-V方向相對於固定相機的運動。
這個線掃面相機的坐標系的定義如下:這個坐標系的中心就是投影的中心。Z軸和光軸同向,因此可見點就有一個Z坐標;Y軸同時垂直於傳感器線和Z軸,因此這個運動矢量會有一個Y坐標;X軸同時垂直於Y軸和Z軸,從而,X軸,Y軸和Z軸形成了一個坐標系。
在圖像采集過程中,相機相對於物體的移動,相機坐標系也會相對於物體運動。圖像的每條線是從不同角度拍攝的,這意味着每條線都有不同的姿勢。為了使事情更簡單,在HALCON中,所有的轉換從世界坐標系到相機坐標系,是基於第一條圖像線的姿勢。在點投影到圖像過程中,這個運動矢量V信息就被包含了。因此,基於第一條圖像線的姿勢可以有函數
find_marks_and_pose 和 camera_calibration來計算返回。
對於線掃描相機,點的投影從相機坐標系到圖像平面坐標系的定義如下:
假設:P(c) = {X, Y , Z}
求解m,u,t:
m*D*u = x - t*Vx;
- m*D*pv = y - t*Vy;
m*Focus = z - t*Vz;
D = 1 / (1 + Kappa*(u*u + pv*pv))
pv=Sy*Cy
這已經包含了徑向畸變的補償,注意:這個線掃描相機只能用於division(分工)模型。
最終,點被轉換到圖像坐標系:
c = u/Sx + Cx
r = t