3B noktaları, kamera iç öğeleri ve ek baskılar üzerine bir resim tabanına yansıtmak için basit bir komut dosyası yazdım. Ancak, z eksenini ve z eksenini aşağıya doğru bir 3B noktaya işaret eden bir fotoğraf makinesine sahip olduğumda, kameranın önünde değil, arkasında görünüyor. İşte senaryolarım, çok defa kontrol ettim. AklımaFotoğraf makinesinin arkasında neden bir 3D nokta var?
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)
tek şey tespit rotasyon matrisi pozitif y ekseni yönünde yukarı vektörü ile negatif z-eksenini aşağı bakacak kameraya karşılık gelmez olmasıdır. Ama bunun nasıl bir durum olamayacağını göremiyorum, örneğin, RL'yi gluLookAt gibi bir fonksiyondan oluşturdum ve orijininde matrisin negatif z eksenini gösteren bir kamera verildi. Bu formüllerden kamera arkasında olacak, pozitif Z ekseni ekranına girer pozitif Z değeri ile yani aslında bir noktayı varsayalım çünkü
if Hp[-1] < 0:
print 'Point is behind camera'
:
size kamera negatif z eksenine işaret ettiğini biliyoruz bana nasıl açıklayabilir misiniz? Belki kimlik rotasyon matrisi ile konumdaki bir kamera (0,0,0) artı z eksenine bakar ve negatif olanı değil. –