私は、カメラのイントリンシクスと外見上のイメージベースに3Dポイントを投影するための簡単なスクリプトを書いた。しかし、私が原点にカメラを置いてz軸を指し、さらに3D点をz軸の下に置くと、カメラの前ではなくカメラの後ろにあるように見えます。ここに私のスクリプトがあります。私は何度もそれをチェックしました。3Dポイントがカメラの背後にあるように見えるのはなぜですか?
import numpy as np
def project(point, P):
Hp = P.dot(point)
if Hp[-1] < 0:
print 'Point is behind camera'
Hp = Hp/Hp[-1]
print Hp[0][0], 'x', Hp[1][0]
return Hp[0][0], Hp[1][0]
if __name__ == '__main__':
# Rc and C are the camera orientation and location in world coordinates
# Camera posed at origin pointed down the negative z-axis
Rc = np.eye(3)
C = np.array([0, 0, 0])
# Camera extrinsics
R = Rc.T
t = -R.dot(C).reshape(3, 1)
# The camera projection matrix is then:
# P = K [ R | t] which projects 3D world points
# to 2D homogenous image coordinates.
# Example intrinsics dont really matter ...
K = np.array([
[2000, 0, 2000],
[0, 2000, 1500],
[0, 0, 1],
])
# Sample point in front of camera
# i.e. further down the negative x-axis
# should project into center of image
point = np.array([[0, 0, -10, 1]]).T
# Project point into the camera
P = K.dot(np.hstack((R, t)))
# But when projecting it appears to be behind the camera?
project(point,P)
私が考えることができる唯一のことは、特定の回転行列は、カメラが正のy軸方向の最大ベクトルと負のz軸を下向きに対応していないことです。しかし、私はgluLookAtのような関数からRcを構築し、元の位置に負のz軸を指し示すカメラを与えた場合、恒等行列を得ることができない場合がどうなるかわかりません。これらの式は、カメラの後ろになり、正のZ軸がスクリーンに入る正のZ値を持つので、実際にポイントを取るため
if Hp[-1] < 0:
print 'Point is behind camera'
:
あなたはあなたのカメラが負のz軸を指していることを知っていますか私に説明できますか?たぶん、アイデンティティ回転行列を持つ位置(0,0,0)のカメラが、負の値ではなく正のz軸を見ている可能性があります。 –