Tôi đã viết một kịch bản đơn giản để chiếu các điểm 3D vào một cơ sở hình ảnh trên máy ảnh nội tại và bản in. Nhưng khi tôi có một máy ảnh tại điểm gốc chỉ xuống trục z và một điểm 3D xa hơn trục z nó xuất hiện phía sau máy ảnh thay vì ở phía trước nó. Đây là kịch bản của tôi, tôi đã kiểm tra nó rất nhiều lần.Tại sao điểm 3D xuất hiện phía sau máy ảnh?
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)
Điều duy nhất tôi có thể nghĩ là ma trận xoay xác định không tương ứng với camera hướng xuống trục z âm với vector lên theo hướng trục dương. Nhưng tôi không thể thấy như thế nào không phải là trường hợp là ví dụ tôi đã xây dựng Rc từ một chức năng như gluLookAt và cho nó một máy ảnh tại nguồn gốc chỉ xuống trục z tiêu cực tôi sẽ nhận được ma trận nhận dạng.
Bạn có thể giải thích cho tôi làm thế nào để bạn biết rằng máy ảnh của bạn được trỏ đến trục z tiêu cực? Có lẽ một camera ở vị trí (0,0,0) với ma trận xoay danh tính đang nhìn vào trục z cộng và không phải là điểm âm. –