「CameraCalibration」传感器(相机、激光雷达、其他传感器)标定笔记
沒寫完,但可看
------------------分割線----------------------
序
看了很多次相機標(biāo)定,但都是看個模模糊糊,希望這次能夠通過寫blog掌握并精通與相機標(biāo)定相關(guān)的知識。
備注:本篇文章適合復(fù)習(xí)/快速上手,不適合想弄懂相機標(biāo)定原理的人
相機標(biāo)定
背景
自從相機發(fā)明了后,我們能夠使用相機將三維世界的場景以二維圖像的形式保存下來,相機將三維場景中的信息轉(zhuǎn)成二維圖像的過程,引出了一個問題:能否通過計算模擬3D到2D的逆向過程。一旦這個問題解決了,那么就可以干很多事情了:圖像畸變矯正、圖像深度估計、三維重建等。而事實證明,該逆向過程是可以通過計算模擬的,計算的過程叫做相機標(biāo)定
相機標(biāo)定用數(shù)學(xué)模型模擬了三維場景到二維圖像的逆向過程,為什么是模擬呢,因為我們只能將高維數(shù)據(jù)降維成低維數(shù)據(jù),而無法用低維數(shù)據(jù)恢復(fù)高維數(shù)據(jù)。相機標(biāo)定使用的技巧就是,利用視覺上的三維信息,計算二維圖像轉(zhuǎn)換成三維物體的參數(shù)
相機成像原理
坐標(biāo)系說明
相機成像涉及到四個坐標(biāo)系:世界坐標(biāo)系、相機坐標(biāo)系、成像坐標(biāo)系、像素坐標(biāo)系
-
世界坐標(biāo)系
在世界坐標(biāo)系中,只要世界中的物體沒有發(fā)生移動,那么該物體在世界坐標(biāo)系中的坐標(biāo)是不會改變的。舉個例子,前面空地有一個人和一臺相機,人和相機都在世界坐標(biāo)系下,只要人和相機沒有發(fā)生位置移動,那么人和相機在世界坐標(biāo)系下的坐標(biāo)是不會發(fā)生改變的 -
相機坐標(biāo)系
相機坐標(biāo)系由相機的位置唯一確定,相機坐標(biāo)系的三個維度由光心(相機坐標(biāo)系原心)和過光心與投影平面平行的三個維度構(gòu)成。還是上面的例子,假如前面空地有一個人和一臺相機,如果人在世界中發(fā)生了位置的移動,那么在相機坐標(biāo)系中,人的坐標(biāo)發(fā)生變化,相機的位置是相機坐標(biāo)系的原點;如果相機在世界中發(fā)生了位置的移動,但人沒有動,那么在相機坐標(biāo)系中,人的坐標(biāo)仍然發(fā)生了變化,相機的位置(盡管是相機移動了)仍然是相機坐標(biāo)系的原點。 -
成像坐標(biāo)系
成像坐標(biāo)系的原點是光軸與成像平面的交點,成像坐標(biāo)系的x, y在成像平面上。這里的成像平面,已經(jīng)是在相機內(nèi)部了,但與像素坐標(biāo)系有一定區(qū)別;并且成像坐標(biāo)系的原點,在光軸上,也是相機透鏡的物理中心。
光軸垂直于相機坐標(biāo)系xy平面和成像坐標(biāo)系xy平面,因此兩個坐標(biāo)系的z軸均在光軸上
- 像素坐標(biāo)系
像素坐標(biāo)系的原點即我們平時看到的圖像的左上角。像素坐標(biāo)系和成像坐標(biāo)系的區(qū)別是,像素坐標(biāo)系的原點在左上角,成像坐標(biāo)系的原點在圖像中心
成像流程
世界坐標(biāo)系下的物體 —> 相機坐標(biāo)系下的物體 —> 成像坐標(biāo)系下的物體 —> 像素坐標(biāo)系下的物體(即我們看到的圖像中的物體)
世界坐標(biāo)系→相機坐標(biāo)系
世界坐標(biāo)系和相機坐標(biāo)是三維坐標(biāo)系,一個物體在兩個坐標(biāo)系中均有長寬高的度量。
假定物體在世界坐標(biāo)系下的坐標(biāo)為(Wx,Wy,Wz)({W}_{x}, {W}_{y}, {W}_{z})(Wx?,Wy?,Wz?),物體在相機坐標(biāo)系下的坐標(biāo)為(Cx,Cy,Cz)({C}_{x}, {C}_{y}, {C}_{z})(Cx?,Cy?,Cz?),旋轉(zhuǎn)矩陣為R3×3{R}_{3\times3}R3×3?,平移矩陣為T3×1{T}_{3\times1}T3×1?
那么物體從世界坐標(biāo)映射到相機坐標(biāo)系的過程應(yīng)該是先平移,后旋轉(zhuǎn)。
先將物體在世界坐標(biāo)系下的坐標(biāo)減去相機在世界坐標(biāo)系下的坐標(biāo),獲取到物體與相機的相對距離(如果能直接得到物體和相機的相對距離向量更好),然后再對物體的相對距離做旋轉(zhuǎn)(如果物體是一個點,則直接用點的相對坐標(biāo)乘以旋轉(zhuǎn)矩陣;如果物體是由多個點構(gòu)成的剛體,那么則用每個點的相對坐標(biāo)乘以旋轉(zhuǎn)矩陣)。整個先平移,后旋轉(zhuǎn)的過程用數(shù)學(xué)公式表達可以寫成:
[CxCyCz1]=[R001]×[E?T01]×[WxWyWz1]\begin{bmatrix} {C}_{x} \\ {C}_{y} \\ {C}_{z} \\ 1 \end{bmatrix} = \begin{bmatrix} R & 0 \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} E & -T \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} {W}_{x} \\ {W}_{y} \\ {W}_{z} \\ 1 \end{bmatrix}?????Cx?Cy?Cz?1??????=[R0?01?]×[E0??T1?]×?????Wx?Wy?Wz?1??????
其中RRR和TTT構(gòu)成的分塊矩陣[RT01]\begin{bmatrix} R & T \\ 0 & 1 \end{bmatrix}[R0?T1?]是相機標(biāo)定中提到的外參;暫時不用管矩陣值是什么,記住這個公式接著往下看
相機坐標(biāo)系→成像坐標(biāo)系
成像坐標(biāo)系,顧名思義成像二字,很容易知道成像平面坐標(biāo)系是二維的;此外,成像平面可以抽象地理解為相機內(nèi)部的一個物理平面,該平面有相機觀測到的外部三維世界的二維成像。
假定物體在相機坐標(biāo)系下的坐標(biāo)為(Cx,Cy,Cz)({C}_{x}, {C}_{y}, {C}_{z})(Cx?,Cy?,Cz?),成像后的物體在成像平面坐標(biāo)系下的坐標(biāo)為(Gx,Gy)({G}_{x}, {G}_{y})(Gx?,Gy?),成像過程中涉及的相機焦距為fff,那么物體在三維世界中的坐標(biāo)映射到相機成像平面的數(shù)學(xué)變換,可寫作:
[GxGy1]=[f0000f000010]×[CxCyCz1]\begin{bmatrix} {G}_{x} \\ {G}_{y} \\ 1 \end{bmatrix} = \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \times \begin{bmatrix} {C}_{x} \\ {C}_{y} \\ {C}_{z} \\ 1 \end{bmatrix}???Gx?Gy?1????=???f00?0f0?001?000????×?????Cx?Cy?Cz?1??????
其中矩陣[f0000f000010]\begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix}???f00?0f0?001?000????是相機標(biāo)定中提到的內(nèi)參之一;這里的矩陣計算用到的原理包括小孔成像和相似三角形,具體細節(jié)見參考鏈接中的《相機成像原理》
成像坐標(biāo)系→像素坐標(biāo)系
假定物體在成像平面/成像坐標(biāo)系下的坐標(biāo)為(Gx,Gy)({G}_{x}, {G}_{y})(Gx?,Gy?),物體在像素坐標(biāo)系下的坐標(biāo)為(Px,Py)({P}_{x}, {P}_{y})(Px?,Py?),成像平面原點與像素平面原點之間在x方向和y方向的尺度距離為(ox,oy)({o}_{x}, {o}_{y})(ox?,oy?),對應(yīng)的尺度因子為(sx,sy)({s}_{x}, {s}_{y})(sx?,sy?)
因為成像平面可以抽象理解為相機內(nèi)部的一個物理平面,那么從物理平面的尺度轉(zhuǎn)換到像素平面/圖像尺度,所使用到的尺度縮放參數(shù)假定為(sx,sy)({s}_{x}, {s}_{y})(sx?,sy?)
成像坐標(biāo)系轉(zhuǎn)換到像素坐標(biāo)系,轉(zhuǎn)換過程類似于一個點在二維平面上的平移,因此,這個平移過程可以寫成:
Px=1sxGx+ox{P}_{x} = \frac {1} {{s}_{x}} {G}_{x} + {o}_{x}Px?=sx?1?Gx?+ox? Py=1syGy+oy{P}_{y} = \frac {1} {{s}_{y}} {G}_{y} + {o}_{y}Py?=sy?1?Gy?+oy?
寫成矩陣運算的形式:
其中尺度距離sss與尺度因子ooo是相機標(biāo)定中提到的內(nèi)參之一
總結(jié)
[PxPy1]=1Cz[1sx0001sy0001]×[10ox01oy001]×[f0000f000010]×[R001]×[E?T01]×[WxWyWz1]\begin{bmatrix} {P}_{x} \\ {P}_{y} \\ 1 \end{bmatrix} = \frac {1} {{C}_{z}} \begin{bmatrix} \frac {1} {{s}_{x}} & 0 & 0 \\ 0 & \frac {1} {{s}_{y}} & 0 \\ 0 & 0 & 1 \end{bmatrix} \times \begin{bmatrix} 1 & 0 & {o}_{x} \\ 0 & 1 & {o}_{y} \\ 0 & 0 & 1 \end{bmatrix} \times \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \times \begin{bmatrix} R & 0 \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} E & -T \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} {W}_{x} \\ {W}_{y} \\ {W}_{z} \\ 1 \end{bmatrix}???Px?Py?1????=Cz?1????sx?1?00?0sy?1?0?001????×???100?010?ox?oy?1????×???f00?0f0?001?000????×[R0?01?]×[E0??T1?]×?????Wx?Wy?Wz?1??????
即:
[PxPy1]=1Cz[1sx0001sy0001]×[f0ox00foy00010]×[R001]×[E?T01]×[WxWyWz1]\begin{bmatrix} {P}_{x} \\ {P}_{y} \\ 1 \end{bmatrix} = \frac {1} {{C}_{z}} \begin{bmatrix} \frac {1} {{s}_{x}} & 0 & 0 \\ 0 & \frac {1} {{s}_{y}} & 0 \\ 0 & 0 & 1 \end{bmatrix} \times \begin{bmatrix} f & 0 & {o}_{x} & 0 \\ 0 & f &{o}_{y} & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \times \begin{bmatrix} R & 0 \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} E & -T \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} {W}_{x} \\ {W}_{y} \\ {W}_{z} \\ 1 \end{bmatrix}???Px?Py?1????=Cz?1????sx?1?00?0sy?1?0?001????×???f00?0f0?ox?oy?1?000????×[R0?01?]×[E0??T1?]×?????Wx?Wy?Wz?1??????
[PxPy1]=M×[WxWyWz1]\begin{bmatrix} {P}_{x} \\ {P}_{y} \\ 1 \end{bmatrix} = M \times \begin{bmatrix} {W}_{x} \\ {W}_{y} \\ {W}_{z} \\ 1 \end{bmatrix}???Px?Py?1????=M×?????Wx?Wy?Wz?1??????
因此不管是在什么投影過程中,只需要弄懂從哪里到哪里的投影,直接使用上面對應(yīng)的矩陣即可
相機畸變
背景
相機成像是通過透鏡成像,而由于透鏡的制造精度和組裝工藝,成像會存在畸變,導(dǎo)致成像圖片與我們視覺上看到的不同,存在扭曲
畸變類型主要分為兩類:徑向畸變和切向畸變。
徑向畸變
徑向畸變是沿著透鏡中心向透鏡平面展開的畸變,它產(chǎn)生的原因是光纖在透鏡中心的地方比靠近中心的地方更加彎曲。徑向畸變可分為枕型畸變和桶型畸變兩種
切向畸變
切向畸變是由于透鏡與成像平面不平行產(chǎn)生的,是有組裝工藝導(dǎo)致的畸變誤差
總之,我們一共需要五個畸變參數(shù)(k1,k2,k3,p1,p2)({k}_{1}, {k}_{2}, {k}_{3}, {p}_{1}, {p}_{2})(k1?,k2?,k3?,p1?,p2?)來描述相機產(chǎn)生的畸變,其中k1,k2,k3{k}_{1}, {k}_{2}, {k}_{3}k1?,k2?,k3?描述的是徑向畸變的泰勒多項式參數(shù),在這里取了前三階;(p1,p2)({p}_{1}, {p}_{2})(p1?,p2?)描述的是切向畸變的修正。
相機標(biāo)定方法
傳統(tǒng)相機標(biāo)定法
主要有:
- 基于3D立體靶標(biāo)定法
- 基于2D平面靶標(biāo)定法(張正友標(biāo)定法)
- 基于徑向約束的兩步標(biāo)定法(Tsai標(biāo)定法)
主動視覺相機標(biāo)定法
相機自標(biāo)定法
參考鏈接
相機標(biāo)定究竟在標(biāo)定什么?
相機成像原理
鏡頭產(chǎn)生畸變的原因
張正友標(biāo)定法原論文
總結(jié)
以上是生活随笔為你收集整理的「CameraCalibration」传感器(相机、激光雷达、其他传感器)标定笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么一吃饭就想大便?
- 下一篇: 熊猫的食物是什么?