相机模型内参推导
相機(jī)模型
符號(hào)定義:CPa^CP_aCPa?表示PaP_aPa?點(diǎn)在坐標(biāo)系CCC中的坐標(biāo),ICT^C_ITIC?T表示坐標(biāo)系III相對(duì)于坐標(biāo)系CCC的坐標(biāo)變換。設(shè)B點(diǎn)為主軸與相平面之間的交點(diǎn),相機(jī)坐標(biāo)系CCC中點(diǎn)PoP_oPo?坐標(biāo)為:(Pox,Poy,Poz)T(P_{ox}, P_{oy}, P_{oz})^T(Pox?,Poy?,Poz?)T,P點(diǎn)為線段PoCP_oCPo?C與相平面的交點(diǎn),則易得PB⊥BCPB \perp BCPB⊥BC,ΔPoAC\Delta P_oACΔPo?AC與ΔPBC\Delta PBCΔPBC相似,得P點(diǎn)在相機(jī)坐標(biāo)系C中的坐標(biāo)CP^CPCP為fPoz(Pox,Poy,Poz)T\frac{f}{P_{oz}}(P_{ox}, P_{oy}, P_{oz})^TPoz?f?(Pox?,Poy?,Poz?)T,設(shè)IP=(u,v,0)^IP=(u, v, 0)IP=(u,v,0)。
推導(dǎo)1. 當(dāng)相平面原點(diǎn)在主軸上
相平面原點(diǎn)在主軸上即,相平面原點(diǎn)在相機(jī)坐標(biāo)為(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??????
則由坐標(biāo)變換得:IP=CITCP^IP=^I_CT^CPIP=CI?TCP,計(jì)算得:
(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????
推導(dǎo)2. 當(dāng)相平面原點(diǎn)不在主軸上
設(shè)相平面原點(diǎn)在相機(jī)坐標(biāo)為(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??????
同理推導(dǎo)得到:
(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????
反之由坐標(biāo)變換得:CP=ICTIP^CP=^C_IT^IPCP=IC?TIP,計(jì)算得:
(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稱為相機(jī)內(nèi)參矩陣。若考慮世界坐標(biāo)與相機(jī)坐標(biāo)的坐標(biāo)變換WCT^C_WTWC?T,則世界坐標(biāo)的點(diǎn)WP=(X,Y,Z,1)T^WP=(X, Y, Z, 1)^TWP=(X,Y,Z,1)T與相平面點(diǎn)坐標(biāo)的關(guān)系可表示為:
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為相機(jī)坐標(biāo)系的坐標(biāo)表示。到這里所有的坐標(biāo)系都表征物理單位,如果將像平面的坐標(biāo)變換到像素平面,設(shè)像平面坐標(biāo)系與像素平面坐標(biāo)系重合,需要做再做一次尺度變換。設(shè)每行/每列像素對(duì)應(yīng)的像坐標(biāo)系的物理間隔分別為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????
綜上,最終的像素坐標(biāo)與世界坐標(biāo)間的變換關(guān)系為:
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??????
若與其他推導(dǎo)出現(xiàn)公式上的差異,請(qǐng)注意這里的cx,cyc_x, c_ycx?,cy?定義。
相機(jī)標(biāo)定之張正友標(biāo)定法數(shù)學(xué)原理詳解
手眼標(biāo)定之基本原理
pybullet中camera實(shí)現(xiàn)
camera在世界坐標(biāo)系中放置位置如下圖所示
代碼參考:panda_grasp_sim_2
總結(jié)
- 上一篇: 赴日本常见问题QA (2转 不明原处)
- 下一篇: 去除最新版WinRAR的弹窗广告