मैंने कैमरे के इंट्रिनिक्स और एक्सट्रिंटिक्स पर छवि अड्डों में 3 डी पॉइंट प्रोजेक्ट करने के लिए एक साधारण स्क्रिप्ट लिखी। लेकिन जब मेरे पास ज़ेड-अक्ष को इंगित करने वाले मूल पर कैमरा होता है और ज़ेड-अक्ष के नीचे एक 3 डी अंक आगे होता है तो यह इसके सामने कैमरे के पीछे होता है। मेरी स्क्रिप्ट यहाँ है, मैंने इसे कई बार चेक किया है।कैमरे के पीछे एक 3 डी बिंदु क्यों दिखता है?
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- अक्ष नीचे ओर इशारा करते हुए के अनुरूप नहीं है है। लेकिन मैं नहीं देख सकता कि यह मामला कैसे नहीं होगा उदाहरण के लिए मैंने ग्लू लुकएट जैसे फ़ंक्शन से आरसी का निर्माण किया था और नकारात्मक जेड-अक्ष को इंगित करने वाले मूल पर कैमरा दिया था, मुझे पहचान मैट्रिक्स मिलेगा।
तुम मुझे व्याख्या कर सकते हैं आप कैसे जानते हैं कि अपने कैमरे नकारात्मक z अक्ष की ओर इशारा करते है? शायद पहचान रोटेशन मैट्रिक्स के साथ स्थान (0,0,0) में एक कैमरा प्लस जेड अक्ष को देख रहा है, न कि ऋणात्मक। –