相机模型内参推导
相機模型
符號定義:CPa^CP_aCPa?表示PaP_aPa?點在坐標系CCC中的坐標,ICT^C_ITIC?T表示坐標系III相對于坐標系CCC的坐標變換。設B點為主軸與相平面之間的交點,相機坐標系CCC中點PoP_oPo?坐標為:(Pox,Poy,Poz)T(P_{ox}, P_{oy}, P_{oz})^T(Pox?,Poy?,Poz?)T,P點為線段PoCP_oCPo?C與相平面的交點,則易得PB⊥BCPB \perp BCPB⊥BC,ΔPoAC\Delta P_oACΔPo?AC與ΔPBC\Delta PBCΔPBC相似,得P點在相機坐標系C中的坐標CP^CPCP為fPoz(Pox,Poy,Poz)T\frac{f}{P_{oz}}(P_{ox}, P_{oy}, P_{oz})^TPoz?f?(Pox?,Poy?,Poz?)T,設IP=(u,v,0)^IP=(u, v, 0)IP=(u,v,0)。
推導1. 當相平面原點在主軸上
相平面原點在主軸上即,相平面原點在相機坐標為(0,0,f)T(0, 0, f)^T(0,0,f)T,容易得到:
 CTI=(10000100001f0001)CTI?1=(10000100001?f0001)^CT_I = \left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & f \\ 0 & 0 & 0 & 1 \end{array} \right) \\ ^CT_I^{-1} = \left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & -f \\ 0 & 0 & 0 & 1 \end{array} \right) CTI?=?????1000?0100?0010?00f1??????CTI?1?=?????1000?0100?0010?00?f1??????
 則由坐標變換得:IP=CITCP^IP=^I_CT^CPIP=CI?TCP,計算得:
 (uv0)=fPoz(PoxPoy0)\left( \begin{array}{c} u \\ v \\ 0 \end{array} \right) = \frac{f}{P_{oz}} \left( \begin{array}{c} P_{ox} \\ P_{oy} \\ 0 \end{array} \right) ???uv0????=Poz?f????Pox?Poy?0????
推導2. 當相平面原點不在主軸上
設相平面原點在相機坐標為(cx,cy,f)T(c_x, c_y, f)^T(cx?,cy?,f)T,注意cx,cyc_x, c_ycx?,cy?的定義,容易得到:
 CTI=(100cx010cy001f0001)CTI?1=(100?cx010?cy001?f0001)^CT_I = \left( \begin{array}{cccc} 1 & 0 & 0 & c_x \\ 0 & 1 & 0 & c_y \\ 0 & 0 & 1 & f \\ 0 & 0 & 0 & 1 \end{array} \right) \\ ^CT_I^{-1} = \left( \begin{array}{cccc} 1 & 0 & 0 & -c_x \\ 0 & 1 & 0 & -c_y \\ 0 & 0 & 1 & -f \\ 0 & 0 & 0 & 1 \end{array} \right) CTI?=?????1000?0100?0010?cx?cy?f1??????CTI?1?=?????1000?0100?0010??cx??cy??f1??????
 同理推導得到:
 (uv0)=fPoz(PoxPoy0)+(?cx?cy0)\left( \begin{array}{c} u \\ v \\ 0 \end{array} \right) = \frac{f}{P_{oz}} \left( \begin{array}{c} P_{ox} \\ P_{oy} \\ 0 \end{array} \right) + \left( \begin{array}{c} -c_x \\ -c_y \\ 0 \end{array} \right) ???uv0????=Poz?f????Pox?Poy?0????+????cx??cy?0????
 反之由坐標變換得:CP=ICTIP^CP=^C_IT^IPCP=IC?TIP,計算得:
 (PoxPoyPoz)=Pozf(u+cxv+cyf)\left( \begin{array}{c} P_{ox} \\ P_{oy} \\ P_{oz} \end{array} \right) = \frac{P_{oz}}{f} \left( \begin{array}{c} u + c_x\\ v + c_y \\ f \end{array} \right) ???Pox?Poy?Poz?????=fPoz?????u+cx?v+cy?f????
 整理為矩陣形式得:
 Poz(uv1)=(f0?cx0f?cy001)?K(100001000010)?(I∣0)(PoxPoyPoz1)P_{oz}\left( \begin{array}{c} u \\ v \\ 1 \end{array} \right) = \underbrace{\left(\begin{array}{ccc} f & 0 & -c_{x} \\ 0 & f & -c_{y} \\ 0 & 0 & 1 \end{array}\right)}_{K} \underbrace{\left(\begin{array}{llll} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right)}_{(I \mid 0)} \left( \begin{array}{c} P_{ox} \\ P_{oy} \\ P_{oz} \\ 1 \end{array} \right) Poz????uv1????=K???f00?0f0??cx??cy?1??????(I∣0)???100?010?001?000???????????Pox?Poy?Poz?1??????
 矩陣K稱為相機內參矩陣。若考慮世界坐標與相機坐標的坐標變換WCT^C_WTWC?T,則世界坐標的點WP=(X,Y,Z,1)T^WP=(X, Y, Z, 1)^TWP=(X,Y,Z,1)T與相平面點坐標的關系可表示為:
 CZ(uv1)=[f0?cx0f?cy001][WCR∣WCt](XYZ1)^CZ \left( \begin{array}{c} u \\ v \\ 1 \end{array} \right) = \left[\begin{array}{ccc} f & 0 & -c_{x} \\ 0 & f & -c_{y} \\ 0 & 0 & 1 \end{array}\right][^C_WR \mid ^C_Wt]\left(\begin{array}{l} X \\ Y \\ Z \\ 1 \end{array}\right) CZ???uv1????=???f00?0f0??cx??cy?1????[WC?R∣WC?t]?????XYZ1??????
 CZ^CZCZ為相機坐標系的坐標表示。到這里所有的坐標系都表征物理單位,如果將像平面的坐標變換到像素平面,設像平面坐標系與像素平面坐標系重合,需要做再做一次尺度變換。設每行/每列像素對應的像坐標系的物理間隔分別為su,svs_u, s_vsu?,sv?,則存在以下變換:
 (ij1)=[1su0001sv0001](uv1)\left( \begin{array}{c} i \\ j \\ 1 \end{array} \right) = \left[\begin{array}{ccc} \frac{1}{s_u} & 0 & 0 \\ 0 & \frac{1}{s_v} & 0 \\ 0 & 0 & 1 \end{array}\right] \left( \begin{array}{c} u \\ v \\ 1 \end{array} \right) ???ij1????=???su?1?00?0sv?1?0?001???????uv1????
 綜上,最終的像素坐標與世界坐標間的變換關系為:
 CZ(ij1)=[1su0001sv0001][f0?cx0f?cy001][WCR∣WCt](XYZ1)^CZ \left( \begin{array}{c} i \\ j \\ 1 \end{array} \right) = \left[\begin{array}{ccc} \frac{1}{s_u} & 0 & 0 \\ 0 & \frac{1}{s_v} & 0 \\ 0 & 0 & 1 \end{array}\right] \left[\begin{array}{ccc} f & 0 & -c_{x} \\ 0 & f & -c_{y} \\ 0 & 0 & 1 \end{array}\right][^C_WR \mid ^C_Wt]\left(\begin{array}{l} X \\ Y \\ Z \\ 1 \end{array}\right) CZ???ij1????=???su?1?00?0sv?1?0?001???????f00?0f0??cx??cy?1????[WC?R∣WC?t]?????XYZ1??????
若與其他推導出現公式上的差異,請注意這里的cx,cyc_x, c_ycx?,cy?定義。
相機標定之張正友標定法數學原理詳解
 手眼標定之基本原理
pybullet中camera實現
camera在世界坐標系中放置位置如下圖所示
 
 代碼參考:panda_grasp_sim_2
總結
 
                            
                        - 上一篇: 赴日本常见问题QA (2转 不明原处)
- 下一篇: 去除最新版WinRAR的弹窗广告
