由q矩陣轉換到相機座標系
q [u
vd1]
=[xy
zw
]q \begin u\\ v \\ d \\ 1 \end = \begin x\\ y\\ z\\ w \end
q⎣⎢⎢⎡
uvd1
⎦⎥⎥
⎤=⎣
⎢⎢⎡
xyzw
⎦⎥⎥
⎤最終將到的向量(x,
y,z,
w)
t(x, y, z, w)^t
(x,y,z
,w)t
用w
ww歸一化就得到三維的點。
opecv中可以直接呼叫reprojectimageto3d函式:
void
reprojectimageto3d
(inputarray disparity,
outputarray _3dimage,
inputarray q,
bool handlemissin**alues=false,
int ddepth=-1
)
void
stereorectify
(inputarray cameramatrix1,
inputarray distcoeffs1,
inputarray cameramatrix2,
inputarray distcoeffs2,
size imagesize,
inputarray r,
inputarray t,
outputarray r1,
outputarray r2,
outputarray p1,
outputarray p2,
outputarray q,
int flags=calib_zero_disparity,
double alpha=-1
, size newimagesize=
size()
, rect* validpixroi1=0,
rect* validpixroi2=
0)
解釋一下,對於雙目相機,由左相機到右相機有乙個旋轉r
rr和乙個平移t
tt,opencv標定後的坐相機座標系中,左相機和右相機各自旋轉一半使得內參一致。這樣在rectify的時候就可以使用同一套內參引數。
rectify生成remap矩陣的過程如下(針對左攝像頭):
( u,
v)
(u, v)
(u,v
)是rectify後畫素座標系中的點
( x,
y,z)
t=r1.
inv(
)∗p1.
colr
ange
(0,3
).in
v()∗
(u,v
,1)t
(x, y, z)^t = r1.inv() * p1.colrange(0,3).inv() * (u, v, 1)^t
(x,y,z
)t=r
1.in
v()∗
p1.c
olra
nge(
0,3)
.inv
()∗(
u,v,
1)t 將畫素座標系中的點重對映到世界座標系中,現由旋轉矩陣的逆轉到以前的位置。
由distcoeffs1矩陣對(x,
y,z)
t(x, y, z)^t
(x,y,z
)t進行undistortion得到 (x′
,y′,
z′)t
(x', y', z')^t
(x′,y′
,z′)
t由cameramatrix1將(x′
,y′,
z′)t
(x', y', z')^t
(x′,y′
,z′)
t對映到畫素座標系中,得到(u′
,v′)
(u', v')
(u′,v′
)所以(u,
v)
(u,v)
(u,v
)對應(u′
,v′)
(u',v')
(u′,v′
), 這裡得到的u′u'
u′和v ′v'
v′都是float, 並非整畫素點,rectify後的值可以用bilinear插值得到。
雙目視覺 1
雙目視覺廣泛應用在機械人導航,精密工業測量 物體識別 虛擬實境 場景重建,勘測領域。什麼是雙目視覺?雙目視覺是模擬人類視覺原理,使用計算機被動感知距離的方法。從兩個或者多個點觀察乙個物體,獲取在不同視角下的影象,根據影象之間畫素的匹配關係,通過三角測量原理計算出畫素之間的偏移來獲取物體的三維資訊。得...
openGL系列 1 座標變換
理解物體座標系 世界座標系 相機座標系 裁剪座標系不難,關鍵是要知道對這些座標系的操作分別對應哪些函式。1 gltranslatef glscalef glrotatef 在模型 視角座標系內進行平移 縮放 旋轉 2 glulookat 對眼睛 相機 座標系進行變換 3 通用型 glmatrixmo...
「北京54 座標系」轉「西安80座標系」
北京54 座標系 轉 西安80座標系 詳細教程 北京54座標系和西安80座標系其實是一種橢球引數的轉換,作為這種轉換在同乙個橢球裡的轉換都是嚴密的,而在不同的橢球之間的轉換是不嚴密,因此不存在一套轉換引數可以全國通用的,在每個地方會不一樣,因為他們是兩個不同的橢球基準。那麼,兩個橢球間的座標轉換,一...