gpt4 book ai didi

3d - 世界中给定 Z 的 2D 到 3D 投影

转载 作者:行者123 更新时间:2023-12-05 07:28:21 26 4
gpt4 key购买 nike

很抱歉,如果之前有人问过,但我找不到正确的答案。

为了更好地理解,让我简要解释一下我的问题的背景

上下文

我有两张图片(A 和 B),上面有非平面物体。我希望能够从 A 获取像素 pA 的坐标并将其投影到 B。因为我的场景不是平面的,所以我不能使用单应性。我要做的是先将我的像素pA投影到3D世界,然后将结果投影到图像B中得到pB。pA (2D) -> pWorld (3D) -> pB (2D)。幸运的是,我知道pworld的坐标z。我的问题涉及第一步 pA (2D) -> pWorld (3D)。

问题

如何将我的 2D 点 pA (u,v) 投影到世界 (pWorld=(X,Y,Z)),Z 被给定?我还有相机的外部矩阵 Rt (3x4) 和内部矩阵 K (3x3)。

我尝试过的

我知道:s*(u v 1)' = K * Rt * (X Y Z)' [1]

s 是尺度。但我想有相反的过程,Z 被给出。像这样的东西:

(X Y) = SOMETHING * (u v)

我可以重写 [1] 得到s*(u v 1/s 1/s)' = G * (X Y Z 1)'

用 G = (l1 l2 l3 l4) (l 表示线)

l1 = (K*Rt) 的第一行

l2 = (K*Rt) 的第二行

l3 = 0 0 1/Z 0

l4 = 0 0 0 1

G 是可逆的,然后我可以有(X Y Z 1)' = inv(G) * (us vs 1 1)'

但我不能使用它,因为我不知道比例。我想我对这个规模的事情有点困惑。我知道我们通常会规范化以摆脱它,但在这里,我不能。

也许这不是继续的好方法。如果有人能以好的方式向我解释,我会很高兴听到。

提前谢谢你。

最佳答案

我找到了一个解决方案,但它太丑了。

让我们考虑 3x4 矩阵 M:

M = K*Rt = (mij) 1<i<3, 1<j<4

为了简化,我们还考虑系数 A 和 B:

A = (m12-m32*u)/(m22-m32v)
B = (m31*u-m11)/(m31*v-m21)

符号说明,让我们继续系统。正如我所说,系统是:

s*(u v 1)' = M*(X Y Z 1)'

我们有3 个方程3 个未知数:s、XY。我们可以注意到:

s = m31*X + m32*Y + m33*Z + m34

请注意,如果您想投影到相机坐标系而不是世界坐标系(类似于没有旋转和平移的情况),您可以使用 s = Z,这是一种更简单的系统解决(这里的例子 To calculate world coordinates from screen coordinates with OpenCV )

考虑到这一点,我们可以将原始系统简化为具有2 个未知数(X Y):

然后,经过一番计算,我们最终得到:

X = [Z*((m23-M33*v)*A-m13+m33*u) + (m24-m34*v)*A-m14+m34*u ] / [A*(m31*v-m21)-m31*u+m11]

Y = [Z*((m13-m33*u)-B*(m23-m33*v)) + m14-m34*u-B*(m24-m34*v)] / [B*(m22-m32*v)-m12+m32*u]

是X、Y在u、v、Z函数中的表示。我在我的项目中对此进行了测试,它正在运行。

不知道是否有更简洁的方法来计算它(使用矩阵和其他东西),但这就是我现在能想到的。

关于3d - 世界中给定 Z 的 2D 到 3D 投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394418/

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