gpt4 book ai didi

computer-vision - 为什么 3D 点似乎在相机后面?

转载 作者:行者123 更新时间:2023-12-04 15:40:05 25 4
gpt4 key购买 nike

我写了一个简单的脚本,将 3D 点投影到基于相机内部和外部的图像中。但是,当我在原点有一个指向 z 轴下方的相机并且一个 3D 指向 z 轴下方时,它似乎在相机后面而不是在它前面。这是我的脚本,我已经检查了很多次。

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)

我唯一能想到的是,识别旋转矩阵不对应于相机指向负 z 轴,向上向量在正 y 轴方向。但我不明白这怎么会不会是这样的,例如我从一个像 gluLookAt 这样的函数构造了 Rc 并在原点给它一个相机,指向负 z 轴,我会得到单位矩阵。

最佳答案

我认为困惑仅在这一行:

if Hp[-1] < 0:
print 'Point is behind camera'

因为这些公式假设正 Z 轴进入屏幕,所以实际上具有正 Z 值的点将在相机后面:
if Hp[-1] > 0:
print 'Point is behind camera'

我似乎记得这个选择是任意的,以使 3D 表示与我们的 2D 成见很好地配合:如果您假设您的相机是在 -Z 方向上看,那么当正 Y 指向上方时,负 X 将向左。在这种情况下,只有负 Z 的东西才会出现在镜头前。

关于computer-vision - 为什么 3D 点似乎在相机后面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46250979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com