畫素座標轉到世界座標時相機座標系中的Zc值求解

2021-10-01 23:41:39 字數 1814 閱讀 6224

世界座標系、相機座標系、影象座標系、畫素座標系之間的轉換公式參考:世界座標系、相機座標系、影象座標系、畫素座標系之間的轉換

其中影象座標到世界座標的轉化公式作者講解的也比較清楚,但是對於zc的值,作者並沒有給出進一步講解

上述公式可以簡寫為:

進一步:

其中 r,k,t均為已知值。將上述等式中的變數做以下改寫,方便描述:

只觀察世界座標計算公式中等式兩邊的第三項,則:

其中,mat2(2,0)表示3×1矩陣的第三項。如果目標物體在地面則zw=0;如果目標物體有一定高度,則zw=實際物體高度,求出zc後即可根據畫素座標求得世界座標。

def 2dto3dpts(point2d, rvec, tvec, cameramat, height)

:"""

function used to convert given 2d points back to real-world 3d points

point2d : an array of 2d points

rvec : rotation vector

tvec : translation vector

cameramat: camera matrix used in solvepnp

height : height in real-world 3d space

return : output_array: output array of 3d points

"""point3d =

point2d =

(np.array(point2d, dtype=

'float32'))

.reshape(-1

,2) numpts = point2d.shape[0]

point2d_op = np.hstack(

(point2d, np.ones(

(numpts,1)

))) rmat = cv2.rodrigues(rvec)[0

] rmat_inv = np.linalg.inv(rmat)

kmat_inv = np.linalg.inv(cameramat)

for point in

range

(numpts)

: uvpoint = point2d_op[point,:]

.reshape(3,

1)tempmat = np.matmul(rmat_inv, kmat_inv)

tempmat1 = np.matmul(tempmat, uvpoint)

tempmat2 = np.matmul(rmat_inv, tvec)

s =(height + tempmat2[2]

)/ tempmat1[2]

p = tempmat1 * s - tempmat2

point3d =

(np.array(point3d, dtype=

'float32'))

.reshape([-

1,1,

3])return point3d

SLAM學習筆記 世界座標系到相機座標系的變換

其中,zc表示單目相機的尺度不確定性 單目相機無法確定尺度,所以orb slam等最後都對單目做了sim3優化 等號右邊第 一 二個矩陣經常乘在一起作為相機內參,其中dx dy是像面上每個畫素點在x軸y軸上的尺寸,u0和v0用來把影象座標原點從影象中心挪到左上角,f表示焦距。r t 也叫相機外參,是...

osg 相機座標系

先看這個例子 include include include include int main int argc,char argv return 0 1 程式執行結果 將相機設定到世界座標系 0,0,12 的位置,向下看牛。同時,牛繞著x軸自傳。2 解說 相機座標系,和opengl的相機座標系一致...

多相機座標轉換 相機標定及座標系變換

slam系統需要多種感測器支援,通常市場上常見的就是camera感測器,例如單目攝像頭,雙目攝像頭,rgb d相機等等。不論是深度相機,紅外相機,還是rgb相機,都是需要標定的,每乙個相機的內參都是固定的,相機標定也是產品落地必須做的乙個工程化步驟。多個相機需要對每個相機分別標定。相機矯正上,比較常...