中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

朝城做網(wǎng)站公司杭州搜索推廣公司

朝城做網(wǎng)站公司,杭州搜索推廣公司,用win2008做網(wǎng)站,做網(wǎng)站用什么電腦配置PnP問題應(yīng)用與一下場景: 已知三維點(diǎn)和對(duì)應(yīng)二維點(diǎn)以及相機(jī)相機(jī)內(nèi)參數(shù),可以獲取相機(jī)外參。 我們介紹其中的一種算法:ePnP 算法流程 1、ePnP算法首先在世界坐標(biāo)系內(nèi)尋找4個(gè)控制點(diǎn),記作 C 1 w , C 2 w , C 3 w , C 4 w C_1^w,C_2^w,…

PnP問題應(yīng)用與一下場景:
已知三維點(diǎn)和對(duì)應(yīng)二維點(diǎn)以及相機(jī)相機(jī)內(nèi)參數(shù),可以獲取相機(jī)外參。請(qǐng)?zhí)砑訄D片描述
我們介紹其中的一種算法:ePnP

算法流程

1、ePnP算法首先在世界坐標(biāo)系內(nèi)尋找4個(gè)控制點(diǎn),記作 C 1 w , C 2 w , C 3 w , C 4 w C_1^w,C_2^w,C_3^w,C_4^w C1w?,C2w?,C3w?,C4w?,使得:
對(duì)于世界坐標(biāo)系內(nèi)任意一點(diǎn) P 1 w , P_1^w, P1w?,存在對(duì)應(yīng)的 α i = [ α i 1 , α i 2 , α i 3 , α i 4 ] T \alpha_i=[\alpha_{i1},\alpha_{i2},\alpha_{i3},\alpha_{i4}]^T αi?=[αi1?,αi2?,αi3?,αi4?]T,滿足:
P i w = ∑ j = 1 4 α i j C j w , w i t h ∑ j = 1 4 α i j = 1 P_i^w = \sum_{j=1}^4\alpha_{ij}C_j^w, {\kern 20pt} with\sum_{j=1}^4\alpha_{ij}=1 Piw?=j=14?αij?Cjw?,withj=14?αij?=1
世界坐標(biāo)系上的 P w P^w Pw 經(jīng)過 R , t R,t R,t 變換可以得到相機(jī)坐標(biāo)系下的點(diǎn) P c P^c Pc :
P i c = R P i w + t = R ( ∑ j = 1 4 α i j C j w ) + t P_i^c = RP_i^w+t=R\left(\sum_{j=1}^4\alpha_{ij}C_j^w\right) + t Pic?=RPiw?+t=R(j=14?αij?Cjw?)+t
由于 ∑ j = 1 4 α i j = 1 \sum_{j=1}^4\alpha_{ij}=1 j=14?αij?=1,因此 t = ∑ j = 1 4 α i j t t=\sum_{j=1}^4\alpha_{ij}t t=j=14?αij?t 帶入上式得 ( C j w 是世界坐標(biāo)系下的控制點(diǎn), C j c 是世界坐標(biāo)系下的控制點(diǎn) ) (C_j^w是世界坐標(biāo)系下的控制點(diǎn),C_j^c是世界坐標(biāo)系下的控制點(diǎn)) (Cjw?是世界坐標(biāo)系下的控制點(diǎn),Cjc?是世界坐標(biāo)系下的控制點(diǎn)):
P i c = ∑ j ? 1 4 α i j ( R C j w + t ) = ∑ j ? 1 4 α i j C j c , ( C j c = R C j w + t ) P_i^c = \sum_{j-1}^4\alpha_{ij}(RC_j^w + t)= \sum_{j-1}^4\alpha_{ij}C_j^c,{\color{red} \left(C_j^c = RC_j^w+t \right)} Pic?=j?14?αij?(RCjw?+t)=j?14?αij?Cjc?,(Cjc?=RCjw?+t)

通過內(nèi)參矩陣,建立相機(jī)坐標(biāo)系下的點(diǎn) P c P^c Pc 到像素坐標(biāo)系下的點(diǎn) p p p 的映射:
p i = s i [ u i v i 1 ] = K P i c = [ f u 0 u c 0 f v v c 0 0 1 ] ∑ j = 1 4 α i j [ C x j c C y j c C z j c ] p_i = s_i\begin{bmatrix}u_i \\ v_i \\ 1 \end{bmatrix} = KP^c_i=\begin{bmatrix}f_u &0 & u_c \\0& f_v & v_c \\ 0&0&1 \end{bmatrix}\sum_{j=1}^4\alpha_{ij}\begin{bmatrix}C_{xj}^c \\C_{yj}^c \\ C_{zj}^c \end{bmatrix} pi?=si? ?ui?vi?1? ?=KPic?= ?fu?00?0fv?0?uc?vc?1? ?j=14?αij? ?Cxjc?Cyjc?Czjc?? ?
將公式展開,可得:
∑ j = 1 4 α i j f u C x j c + α i j ( u c ? u i ) C z j c = 0 ∑ j = 1 4 α i j f v C y j c + α i j ( v c ? v i ) C z j c = 0 \sum_{j=1}^4\alpha_{ij}f_uC^c_{xj} + \alpha_{ij}(u_c-u_i)C_{zj}^c = 0 \\ \sum_{j=1}^4\alpha_{ij}f_vC^c_{yj} + \alpha_{ij}(v_c-v_i)C_{zj}^c = 0 j=14?αij?fu?Cxjc?+αij?(uc??ui?)Czjc?=0j=14?αij?fv?Cyjc?+αij?(vc??vi?)Czjc?=0
對(duì)于上述公式 只有相機(jī)坐標(biāo)系下的四個(gè)控制點(diǎn) C j c C_j^c Cjc?? 未知,每個(gè)控制點(diǎn)有三個(gè)參數(shù),因此一共有12個(gè)未知數(shù)。每對(duì)點(diǎn)能建立兩個(gè)方程組,所以,至少要6對(duì)點(diǎn)才能進(jìn)行求解。
f u [ α i 1 α i 2 α i 3 α i 4 ] [ C x 1 c C x 2 c C x 3 c C x 4 c ] + ( u c ? u i ) [ α i 1 α i 2 α i 3 α i 4 ] [ C z 1 c C z 2 c C z 3 c C z 4 c ] = 0 f v [ α i 1 α i 2 α i 3 α i 4 ] [ C y 1 c C y 2 c C y 3 c C y 4 c ] + ( v c ? v i ) [ α i 1 α i 2 α i 3 α i 4 ] [ C z 1 c C z 2 c C z 3 c C z 4 c ] = 0 [ f u α i 1 f u α i 2 f u α i 3 f u α i 4 0 0 0 0 ( u c ? u i ) α i 1 ( u c ? u i ) α i 2 ( u c ? u i ) α i 3 ( u c ? u i ) α i 4 0 0 0 0 f v α i 1 f v α i 2 f v α i 3 f v α i 4 ( v c ? v i ) α i 1 ( v c ? v i ) α i 2 ( v c ? v i ) α i 3 ( v c ? v i ) α i 4 ] [ C x 1 c C x 2 c C x 3 c C x 4 c C y 1 c C y 2 c C y 3 c C y 4 c C z 1 c C z 2 c C z 3 c C z 4 c ] = 0 f_u \begin{bmatrix} \alpha_{i1} & \alpha_{i2} & \alpha_{i3} & \alpha_{i4} \end{bmatrix}\begin{bmatrix} C_{x1}^c \\ C_{x2}^c \\ C_{x3}^c \\ C_{x4}^c\end{bmatrix} + (u_c-u_i) \begin{bmatrix} \alpha_{i1} & \alpha_{i2} & \alpha_{i3} & \alpha_{i4} \end{bmatrix} \begin{bmatrix} C_{z1}^c \\ C_{z2}^c \\ C_{z3}^c \\ C_{z4}^c\end{bmatrix} =0 \\ f_v \begin{bmatrix} \alpha_{i1} & \alpha_{i2} & \alpha_{i3} & \alpha_{i4} \end{bmatrix}\begin{bmatrix} C_{y1}^c \\ C_{y2}^c \\ C_{y3}^c \\ C_{y4}^c\end{bmatrix} + (v_c-v_i) \begin{bmatrix} \alpha_{i1} & \alpha_{i2} & \alpha_{i3} & \alpha_{i4} \end{bmatrix} \begin{bmatrix} C_{z1}^c \\ C_{z2}^c \\ C_{z3}^c \\ C_{z4}^c\end{bmatrix} =0 \\\\\\ \begin{bmatrix} f_u\alpha_{i1} & f_u\alpha_{i2} & f_u\alpha_{i3} & f_u\alpha_{i4} &0&0&0&0&(u_c-u_i) \alpha_{i1} & (u_c-u_i) \alpha_{i2} & (u_c-u_i) \alpha_{i3} & (u_c-u_i) \alpha_{i4} \\0&0&0&0&f_v\alpha_{i1} & f_v\alpha_{i2} & f_v\alpha_{i3} & f_v\alpha_{i4}& (v_c-v_i) \alpha_{i1} & (v_c-v_i) \alpha_{i2} & (v_c-v_i) \alpha_{i3} & (v_c-v_i) \alpha_{i4} \end{bmatrix}\begin{bmatrix}C_{x1}^c \\ C_{x2}^c \\ C_{x3}^c \\ C_{x4}^c\\C_{y1}^c \\ C_{y2}^c \\ C_{y3}^c \\ C_{y4}^c \\ C_{z1}^c \\ C_{z2}^c \\ C_{z3}^c \\ C_{z4}^c\end{bmatrix} =0 fu?[αi1??αi2??αi3??αi4??] ?Cx1c?Cx2c?Cx3c?Cx4c?? ?+(uc??ui?)[αi1??αi2??αi3??αi4??] ?Cz1c?Cz2c?Cz3c?Cz4c?? ?=0fv?[αi1??αi2??αi3??αi4??] ?Cy1c?Cy2c?Cy3c?Cy4c?? ?+(vc??vi?)[αi1??αi2??αi3??αi4??] ?Cz1c?Cz2c?Cz3c?Cz4c?? ?=0[fu?αi1?0?fu?αi2?0?fu?αi3?0?fu?αi4?0?0fv?αi1??0fv?αi2??0fv?αi3??0fv?αi4??(uc??ui?)αi1?(vc??vi?)αi1??(uc??ui?)αi2?(vc??vi?)αi2??(uc??ui?)αi3?(vc??vi?)αi3??(uc??ui?)αi4?(vc??vi?)αi4??] ?Cx1c?Cx2c?Cx3c?Cx4c?Cy1c?Cy2c?Cy3c?Cy4c?Cz1c?Cz2c?Cz3c?Cz4c?? ?=0
找到相機(jī)坐標(biāo)系下的控制點(diǎn)后,就能夠求得相機(jī)外參:
C j c = R C j w + t [ C x j c C y j c C z j c ] = [ r 1 r 2 r 3 r 4 r 5 r 6 r 7 r 8 r 9 ] [ C x j w C y j w C z j w ] + [ t 1 t 2 t 3 ] C x j c = r 1 C x j w + r 2 C y j w + r 3 C z j w + t 1 C y j c = r 4 C x j w + r 5 C y j w + r 6 C z j w + t 2 C z j c = r 7 C x j w + r 8 C y j w + r 9 C z j w + t 3 [ C x 1 c C y 1 c C z 1 c C x 2 c C y 2 c C z 2 c C x 3 c C y 3 c C z 3 c C x 4 c C y 4 c C z 4 c ] = [ C x 1 w C y 1 w C z 1 w 0 0 0 0 0 0 1 0 0 0 0 0 C x 1 w C y 1 w C z 1 w 0 0 0 0 1 0 0 0 0 0 0 0 C x 1 w C y 1 w C z 1 w 0 0 1 C x 2 w C y 2 w C z 2 w 0 0 0 0 0 0 1 0 0 0 0 0 C x 2 w C y 2 w C z 2 w 0 0 0 0 1 0 0 0 0 0 0 0 C x 2 w C y 2 w C z 2 w 0 0 1 C x 3 w C y 3 w C z 3 w 0 0 0 0 0 0 1 0 0 0 0 0 C x 3 w C y 3 w C z 3 w 0 0 0 0 1 0 0 0 0 0 0 0 C x 3 w C y 3 w C z 3 w 0 0 1 C x 4 w C y 4 w C z 4 w 0 0 0 0 0 0 1 0 0 0 0 0 C x 4 w C y 4 w C z 4 w 0 0 0 0 1 0 0 0 0 0 0 0 C x 4 w C y 4 w C z 4 w 0 0 1 ] [ r 1 r 2 r 3 r 4 r 5 r 6 r 7 r 8 r 9 t 1 t 2 t 3 ] \begin{aligned} &C_j^c = RC_j^w+t\\\\ &\begin{bmatrix}C_{xj}^c \\ C_{yj}^c \\ C_{zj}^c \end{bmatrix} = \begin{bmatrix} r_1 & r_2 & r_3 \\ r_4 & r_5 & r_6 \\r_7 & r_8 & r_9 \end{bmatrix}\begin{bmatrix}C_{xj}^w \\ C_{yj}^w \\ C_{zj}^w \end{bmatrix} + \begin{bmatrix} t_1 \\ t_2 \\ t_3\end{bmatrix} \\\\ &C_{xj}^c = r_1C_{xj}^w + r_2C_{yj}^w + r_3C_{zj}^w + t_1\\ &C_{yj}^c = r_4C_{xj}^w + r_5C_{yj}^w + r_6C_{zj}^w + t_2\\ &C_{zj}^c = r_7C_{xj}^w + r_8C_{yj}^w + r_9C_{zj}^w + t_3\\ \\\\ &\begin{bmatrix}C_{x1}^c \\ C_{y1}^c \\C_{z1}^c \\C_{x2}^c \\ C_{y2}^c \\C_{z2}^c \\C_{x3}^c \\ C_{y3}^c \\C_{z3}^c \\C_{x4}^c \\ C_{y4}^c \\C_{z4}^c\end{bmatrix} = \begin{bmatrix} C_{x1}^w & C_{y1}^w & C_{z1}^w&0&0&0&0&0&0&1&0&0 \\ 0&0&0&C_{x1}^w & C_{y1}^w & C_{z1}^w &0&0&0&0&1&0\\ 0&0&0&0&0&0& C_{x1}^w & C_{y1}^w & C_{z1}^w &0&0&1\\ C_{x2}^w & C_{y2}^w & C_{z2}^w&0&0&0&0&0&0&1&0&0 \\ 0&0&0&C_{x2}^w & C_{y2}^w & C_{z2}^w &0&0&0&0&1&0\\ 0&0&0&0&0&0& C_{x2}^w & C_{y2}^w & C_{z2}^w &0&0&1 \\ C_{x3}^w & C_{y3}^w & C_{z3}^w&0&0&0&0&0&0&1&0&0 \\ 0&0&0&C_{x3}^w & C_{y3}^w & C_{z3}^w &0&0&0&0&1&0\\ 0&0&0&0&0&0& C_{x3}^w & C_{y3}^w & C_{z3}^w &0&0&1\\ C_{x4}^w & C_{y4}^w & C_{z4}^w&0&0&0&0&0&0&1&0&0 \\ 0&0&0&C_{x4}^w & C_{y4}^w & C_{z4}^w &0&0&0&0&1&0\\ 0&0&0&0&0&0& C_{x4}^w & C_{y4}^w & C_{z4}^w &0&0&1 \end{bmatrix} \begin{bmatrix}r_1 \\ r_2 \\ r_3 \\ r_4 \\ r_5 \\ r_6 \\ r_7 \\ r_8 \\ r_9 \\t_1\\t_2\\t_3 \end{bmatrix} \end{aligned} ?Cjc?=RCjw?+t ?Cxjc?Cyjc?Czjc?? ?= ?r1?r4?r7??r2?r5?r8??r3?r6?r9?? ? ?Cxjw?Cyjw?Czjw?? ?+ ?t1?t2?t3?? ?Cxjc?=r1?Cxjw?+r2?Cyjw?+r3?Czjw?+t1?Cyjc?=r4?Cxjw?+r5?Cyjw?+r6?Czjw?+t2?Czjc?=r7?Cxjw?+r8?Cyjw?+r9?Czjw?+t3? ?Cx1c?Cy1c?Cz1c?Cx2c?Cy2c?Cz2c?Cx3c?Cy3c?Cz3c?Cx4c?Cy4c?Cz4c?? ?= ?Cx1w?00Cx2w?00Cx3w?00Cx4w?00?Cy1w?00Cy2w?00Cy3w?00Cy4w?00?Cz1w?00Cz2w?00Cz3w?00Cz4w?00?0Cx1w?00Cx2w?00Cx3w?00Cx4w?0?0Cy1w?00Cy2w?00Cy3w?00Cy4w?0?0Cz1w?00Cz2w?00Cz3w?00Cz4w?0?00Cx1w?00Cx2w?00Cx3w?00Cx4w??00Cy1w?00Cy2w?00Cy3w?00Cy4w??00Cz1w?00Cz2w?00Cz3w?00Cz4w??100100100100?010010010010?001001001001? ? ?r1?r2?r3?r4?r5?r6?r7?r8?r9?t1?t2?t3?? ??

控制點(diǎn)選取

原則上,就是只要選擇3個(gè)線性無關(guān)的點(diǎn),就可以表示任意一個(gè)三維點(diǎn),但由于方程組是4,如何是3個(gè)控制點(diǎn)只能求得最小二乘解。論文中給出了具體的選擇方法。 3D參考點(diǎn)集為 { P i w , i = 1 , ? , n } \left\{P^w_i,i=1,\cdots,n \right \} {Piw?,i=1,?,n}, 選擇3D點(diǎn)的中心為第一個(gè)控制點(diǎn):
C 1 w = 1 n ∑ i = 1 n P i w C^w_1=\frac{1}{n}\sum_{i=1}^nP^w_i C1w?=n1?i=1n?Piw?
進(jìn)而得到矩陣:
A = [ ( P 1 w ) T ? ( C 1 w ) T ? ( P n w ) T ? ( C n w ) T ] A=\begin{bmatrix}{(P_{1}^{w})}^{T} - {(C_{1}^{w})}^{T} \\ \cdots \\ {(P_{n}^{w})}^{T} - {(C_{n}^{w})}^{T} \end{bmatrix} A= ?(P1w?)T?(C1w?)T?(Pnw?)T?(Cnw?)T? ?
A T A A^TA ATA的特征值為 λ i \lambda_i λi?, 特征向量為 V i V_i Vi? ,那么剩下的三個(gè)點(diǎn)為:
C w = C 1 w + λ i 1 2 V i , i = 1 , 2 , 3 C^w = C_1^w +\lambda^{\frac{1}{2}}_iV_i,\ i = 1,2,3 Cw=C1w?+λi21??Vi?,?i=1,2,3

求解 α \alpha α

聯(lián)立方程組:
P i w = α i 1 C 1 w + α i 2 C 2 w + α i 3 C 3 w + α i 4 C 4 w [ x i y i z i ] = α i 1 [ C x 1 w C y 1 w C z 1 w ] + α i 2 [ C x 2 w C y 2 w C z 2 w ] + α i 3 [ C x 3 w C y 3 w C z 3 w ] + α i 4 [ C x 4 w C y 4 w C z 4 w ] \begin{aligned} &P_i^w = \alpha_{i1}C_1^w+\alpha_{i2}C_2^w+\alpha_{i3}C_3^w+\alpha_{i4}C_4^w \\\\ &\begin{bmatrix} x_i \\y_i\\z_i\end{bmatrix} = \alpha_{i1}\begin{bmatrix} C_{x1}^w \\C_{y1}^w\\C_{z1}^w\end{bmatrix}+\alpha_{i2}\begin{bmatrix} C_{x2}^w \\C_{y2}^w\\C_{z2}^w\end{bmatrix}+\alpha_{i3}\begin{bmatrix} C_{x3}^w \\C_{y3}^w\\C_{z3}^w\end{bmatrix}+\alpha_{i4}\begin{bmatrix} C_{x4}^w \\C_{y4}^w\\C_{z4}^w\end{bmatrix} \end{aligned} ?Piw?=αi1?C1w?+αi2?C2w?+αi3?C3w?+αi4?C4w? ?xi?yi?zi?? ?=αi1? ?Cx1w?Cy1w?Cz1w?? ?+αi2? ?Cx2w?Cy2w?Cz2w?? ?+αi3? ?Cx3w?Cy3w?Cz3w?? ?+αi4? ?Cx4w?Cy4w?Cz4w?? ??
每個(gè)點(diǎn)可以得到4個(gè)方程組:
x i = α i 1 C x 1 w + α i 2 C x 2 w + α i 3 C x 3 w + α i 4 C x 4 w y i = α i 1 C y 1 w + α i 2 C y 2 w + α i 3 C y 3 w + α i 4 C y 4 w z i = α i 1 C z 1 w + α i 2 C z 2 w + α i 3 C z 3 w + α i 4 C z 4 w 1 = α i 1 + α i 2 + α i 3 + α i 4 x_i=\alpha_{i1}C_{x1}^w+\alpha_{i2}C_{x2}^w+\alpha_{i3}C_{x3}^w+\alpha_{i4}C_{x4}^w\\ y_i=\alpha_{i1}C_{y1}^w+\alpha_{i2}C_{y2}^w+\alpha_{i3}C_{y3}^w+\alpha_{i4}C_{y4}^w\\ z_i=\alpha_{i1}C_{z1}^w+\alpha_{i2}C_{z2}^w+\alpha_{i3}C_{z3}^w+\alpha_{i4}C_{z4}^w\\ 1= \alpha_{i1}+\alpha_{i2}+\alpha_{i3}+\alpha_{i4} xi?=αi1?Cx1w?+αi2?Cx2w?+αi3?Cx3w?+αi4?Cx4w?yi?=αi1?Cy1w?+αi2?Cy2w?+αi3?Cy3w?+αi4?Cy4w?zi?=αi1?Cz1w?+αi2?Cz2w?+αi3?Cz3w?+αi4?Cz4w?1=αi1?+αi2?+αi3?+αi4?
用矩陣的方式可表示為:
[ x i y i z i 1 ] = [ C x 1 w C x 2 w C x 3 w C x 4 w C y 1 w C y 2 w C y 3 w C y 4 w C z 1 w C z 2 w C z 3 w C z 4 w 1 1 1 1 ] [ α i 1 α i 2 α i 3 α i 4 ] ? [ C x 1 w C x 2 w C x 3 w C x 4 w C y 1 w C y 2 w C y 3 w C y 4 w C z 1 w C z 2 w C z 3 w C z 4 w 1 1 1 1 ] ? 1 [ x i y i z i 1 ] = [ α i 1 α i 2 α i 3 α i 4 ] \begin{bmatrix} x_i \\ y_i \\ z_i \\ 1 \end{bmatrix} = \begin{bmatrix} C_{x1}^w &C_{x2}^w &C_{x3}^w &C_{x4}^w \\ C_{y1}^w &C_{y2}^w &C_{y3}^w &C_{y4}^w \\ C_{z1}^w &C_{z2}^w &C_{z3}^w &C_{z4}^w \\ 1&1&1&1 \end{bmatrix} \begin{bmatrix} \alpha_{i1} \\ \alpha_{i2} \\ \alpha_{i3} \\ \alpha_{i4}\end{bmatrix} \longrightarrow \begin{bmatrix} C_{x1}^w &C_{x2}^w &C_{x3}^w &C_{x4}^w \\ C_{y1}^w &C_{y2}^w &C_{y3}^w &C_{y4}^w \\ C_{z1}^w &C_{z2}^w &C_{z3}^w &C_{z4}^w \\ 1&1&1&1 \end{bmatrix} ^{-1}\begin{bmatrix} x_i \\ y_i \\ z_i \\ 1 \end{bmatrix} = \begin{bmatrix} \alpha_{i1} \\ \alpha_{i2} \\ \alpha_{i3} \\ \alpha_{i4}\end{bmatrix} ?xi?yi?zi?1? ?= ?Cx1w?Cy1w?Cz1w?1?Cx2w?Cy2w?Cz2w?1?Cx3w?Cy3w?Cz3w?1?Cx4w?Cy4w?Cz4w?1? ? ?αi1?αi2?αi3?αi4?? ?? ?Cx1w?Cy1w?Cz1w?1?Cx2w?Cy2w?Cz2w?1?Cx3w?Cy3w?Cz3w?1?Cx4w?Cy4w?Cz4w?1? ??1 ?xi?yi?zi?1? ?= ?αi1?αi2?αi3?αi4?? ?

void Rebuild::ePnP(const std::vector<Eigen::Vector3d> &p3ds, const std::vector<Eigen::Vector2d> &p2ds, Camera &camera) {auto blog = _blog;blog->write("ePnP:");/**尋找4個(gè)控制點(diǎn)**///求取重心Eigen::Vector3d center = Eigen::Vector3d::Zero();std::vector<Eigen::Vector3d> control_points_w(4);for (int i = 0; i < p3ds.size(); i++) {center(0) += p3ds[i](0);center(1) += p3ds[i](1);center(2) += p3ds[i](2);}center(0) /= p3ds.size();center(1) /= p3ds.size();center(2) /= p3ds.size();control_points_w[0] = center;blog->write("center:");blog->write(center);blog->write("");//構(gòu)建矩陣Eigen::MatrixXd A = Eigen::MatrixXd::Zero(p3ds.size(), 3);for (int i = 0; i < p3ds.size(); i++) {A(i, 0) = p3ds[i](0) - center(0);A(i, 1) = p3ds[i](1) - center(1);A(i, 2) = p3ds[i](2) - center(2);}Eigen::MatrixXd M = A.transpose() * A;Eigen::EigenSolver<Eigen::MatrixXd> solver(M);Eigen::VectorXd eigenValues = solver.eigenvalues().real();Eigen::MatrixXd eigenVectors = solver.eigenvectors().real();blog->write("eigenValues:");blog->write(eigenValues);blog->write("");blog->write("eigenVectors:");blog->write(eigenVectors);blog->write("");for (int i = 1; i < 4; i++) {control_points_w[i] = control_points_w[0] + sqrt(eigenValues(i - 1)) * eigenVectors.col(i - 1);}blog->write("control_points_w:");for (int i = 0; i < 4; i++) {blog->write(control_points_w[i]);}blog->write("");/**求解alpha**/Eigen::MatrixXd C_w = Eigen::MatrixXd::Zero(4, 4);for (int i = 0; i < 4; i++) {double x = control_points_w[i](0);double y = control_points_w[i](1);double z = control_points_w[i](2);C_w(0, i) = x;C_w(1, i) = y;C_w(2, i) = z;C_w(3, i) = 1;}Eigen::MatrixXd C_w_inv = C_w.inverse();blog->write("C_w:");blog->write(C_w);blog->write("");blog->write("C_w_inv:");blog->write(C_w_inv);blog->write("");double fu = camera._K(0, 0);double fv = camera._K(1, 1);double uc = camera._K(0, 2);double vc = camera._K(1, 2);Eigen::MatrixXd D =Eigen::MatrixXd::Zero(int(2 * p3ds.size()), 12);for (int i = 0; i < p3ds.size(); i++) {Eigen::Vector3d p3d = p3ds[i];Eigen::Vector2d p2d = p2ds[i];Eigen::Vector4d b;b << p3d(0), p3d(1), p3d(2), 1;Eigen::Vector4d alpha = C_w_inv * b;D(i * 2, 0) = fu * alpha(0);D(i * 2, 1) = fu * alpha(1);D(i * 2, 2) = fu * alpha(2);D(i * 2, 3) = fu * alpha(3);D(i * 2, 8) = (uc - p2d(0)) * alpha(0);D(i * 2, 9) = (uc - p2d(0)) * alpha(1);D(i * 2, 10) = (uc - p2d(0)) * alpha(2);D(i * 2, 11) = (uc - p2d(0)) * alpha(3);D(i * 2 + 1, 4) = fv * alpha(0);D(i * 2 + 1, 5) = fv * alpha(1);D(i * 2 + 1, 6) = fv * alpha(2);D(i * 2 + 1, 7) = fv * alpha(3);D(i * 2 + 1, 8) = (vc - p2d(1)) * alpha(0);D(i * 2 + 1, 9) = (vc - p2d(1)) * alpha(1);D(i * 2 + 1, 10) = (vc - p2d(1)) * alpha(2);D(i * 2 + 1, 11) = (vc - p2d(1)) * alpha(3);if(i == 0){blog->write("alpha:");blog->write(alpha);blog->write("");}}blog->write("D:");blog->write(D);blog->write("");Eigen::JacobiSVD<Eigen::MatrixXd> svd(D, Eigen::ComputeFullV | Eigen::ComputeFullU);auto V = svd.matrixV();std::vector<Eigen::Vector3d> control_points_c(4);blog->write("control_points_c:");for (int i = 0; i < 4; i++) {double x = V(i);double y = V(i + 4);double z = V(i + 8);Eigen::Vector3d p3d(x, y, z);control_points_c[i] = p3d;blog->write(p3d);}blog->write("");Eigen::MatrixXd Q = Eigen::MatrixXd::Zero(12, 12);Eigen::VectorXd C_c = Eigen::VectorXd::Zero(12);for (int i = 0; i < 4; i++) {C_c(i * 3) = control_points_c[i](0);C_c(i * 3 + 1) = control_points_c[i](1);C_c(i * 3 + 2) = control_points_c[i](2);Q(i * 3, 0) = control_points_w[i](0);Q(i * 3, 1) = control_points_w[i](1);Q(i * 3, 2) = control_points_w[i](2);Q(i * 3, 9) = 1;Q(i * 3 + 1, 3) = control_points_w[i](0);Q(i * 3 + 1, 4) = control_points_w[i](1);Q(i * 3 + 1, 5) = control_points_w[i](2);Q(i * 3 + 1, 10) = 1;Q(i * 3 + 2, 6) = control_points_w[i](0);Q(i * 3 + 2, 7) = control_points_w[i](1);Q(i * 3 + 2, 8) = control_points_w[i](2);Q(i * 3 + 2, 11) = 1;}blog->write("Q:");blog->write(Q);blog->write("");blog->write("C_c:");blog->write(C_c);blog->write("");Eigen::MatrixXd Q_inv = Q.inverse();blog->write("Q_inv:");blog->write(Q_inv);blog->write("");Eigen::VectorXd ans = Eigen::VectorXd::Zero(12);ans = Q_inv * C_c;blog->write("ans:");blog->write(ans);blog->write("");camera._R(0, 0) = ans(0);camera._R(0, 1) = ans(1);camera._R(0, 2) = ans(2);camera._R(1, 0) = ans(3);camera._R(1, 1) = ans(4);camera._R(1, 2) = ans(5);camera._R(2, 0) = ans(6);camera._R(2, 1) = ans(7);camera._R(2, 2) = ans(8);camera._t(0) = ans(9);camera._t(1) = ans(10);camera._t(2) = ans(11);
}
http://www.risenshineclean.com/news/46476.html

相關(guān)文章:

  • 桂林網(wǎng)站制作培訓(xùn)班簡單網(wǎng)站建設(shè)優(yōu)化推廣
  • 網(wǎng)站開發(fā)功能合同線上營銷渠道主要有哪些
  • 搭建網(wǎng)站原理精準(zhǔn)客源
  • 購物網(wǎng)站的前臺(tái)功能網(wǎng)絡(luò)服務(wù)合同
  • .net 網(wǎng)站開發(fā)實(shí)例黃岡網(wǎng)站推廣策略
  • 做評(píng)測好的視頻網(wǎng)站有哪些北京seo關(guān)鍵詞優(yōu)化收費(fèi)
  • 做設(shè)計(jì)一般用什么素材網(wǎng)站會(huì)計(jì)培訓(xùn)班要多少錢
  • 建設(shè)銀行網(wǎng)站是多少錢成都網(wǎng)站優(yōu)化排名
  • 游戲類網(wǎng)站怎么做長春模板建站代理
  • 廣州網(wǎng)站制作有什么平臺(tái)可以推廣
  • 一個(gè)網(wǎng)站按鈕怎么做今日頭條號(hào)官網(wǎng)
  • 什么網(wǎng)站可以用視頻做背景域名收錄查詢工具
  • 全國軟件公司排名seo還有用嗎
  • 做一個(gè)b2c網(wǎng)站網(wǎng)址關(guān)鍵詞查詢
  • 電信電信網(wǎng)站備案系統(tǒng)在線網(wǎng)站建設(shè)平臺(tái)
  • 北京產(chǎn)品網(wǎng)站設(shè)計(jì)哪家專業(yè)超級(jí)外鏈工具
  • 做網(wǎng)站的公司風(fēng)險(xiǎn)大不大濟(jì)南seo小黑seo
  • 網(wǎng)站回答問題app怎么做頭條發(fā)布視頻成功顯示404
  • 四川省紀(jì)委網(wǎng)站建設(shè)今日武漢最新消息
  • 西安網(wǎng)站建設(shè)云闊網(wǎng)絡(luò)熊掌號(hào)東莞seo報(bào)價(jià)
  • 便利的響應(yīng)式網(wǎng)站建設(shè)百度競價(jià)什么意思
  • 長治招聘網(wǎng)站建設(shè)百度推廣登錄平臺(tái)網(wǎng)址
  • 網(wǎng)站做記錄訪客百度貼吧網(wǎng)頁版
  • 網(wǎng)站子域名查詢?cè)趺醋?cè)中視頻賬號(hào)
  • 做網(wǎng)站購買備案域名app怎么推廣運(yùn)營
  • 天津公司建設(shè)網(wǎng)站外貿(mào)獨(dú)立站怎么做
  • 東營做網(wǎng)站公司東莞做網(wǎng)站公司首選
  • 網(wǎng)站建設(shè)教程培訓(xùn)做網(wǎng)站用什么軟件
  • 動(dòng)易醫(yī)院網(wǎng)站管理系統(tǒng)市場調(diào)研分析報(bào)告
  • 可以賺錢做任務(wù)的網(wǎng)站怎么投放廣告是最有效的