카메라 내장 및 외각 인쇄의 이미지 기반에 3D 포인트를 투사하는 간단한 스크립트를 작성했습니다. 그러나 원점에있는 카메라가 z 축을 가리키고 3D 점이 z 축 아래로 내려 가면 카메라 앞에있는 대신 카메라 뒤에있는 것처럼 보입니다. 여기 제 스크립트가 있습니다. 여러 번 확인했습니다. I 생각할 수왜 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 축을보고있는 것일 수 있습니다. –