Computer vision 推广“;中点&x201D;n点三角剖分方法
在计算机视觉中,“中点”方法解决了从两个2D点确定3D点的三角剖分问题(参见)。是否有一个超过两个点的概括,比如说n个点,它叫什么?这篇文章确实提到了直接线性变换,但我不确定这是我想要的…是的,有一个推广到N点的方法。我在一些文章中看到了这一点: p.A.比尔兹利、A.齐瑟曼和D.W.默里。投影函数的顺序更新 运动的仿射结构。国际计算机杂志。《愿景》,23(3):235-25997年6月 Srikumar Ramalingam、Suresh K.Lodha和Peter Sturm。一般结构- 从运动框架。计算机。维斯。下图,103(3):218-228年9月 2006年 你也可以读这本书(参考你的维基百科文章) 理查德·哈特利和安德鲁·齐瑟曼(2003)。计算机视觉中的多视图几何。剑桥大学出版社。ISBN 978-0-521-54051-3 但正如我所记得的,它没有提到N个视图的中点,只提到了两个视图,而这种方法被描述为不精确(严格来说不是我的想法) 我希望这会有所帮助。正如Fleurmond所建议的,中点三角剖分到n视图的一般化如下所示: Srikumar Ramalingam、Suresh K.Lodha和Peter Sturm。通用结构-来自运动框架。计算机。维斯。下图,103(3):218-2282006年9月 以下是Python中的示例代码:Computer vision 推广“;中点&x201D;n点三角剖分方法,computer-vision,triangulation,Computer Vision,Triangulation,在计算机视觉中,“中点”方法解决了从两个2D点确定3D点的三角剖分问题(参见)。是否有一个超过两个点的概括,比如说n个点,它叫什么?这篇文章确实提到了直接线性变换,但我不确定这是我想要的…是的,有一个推广到N点的方法。我在一些文章中看到了这一点: p.A.比尔兹利、A.齐瑟曼和D.W.默里。投影函数的顺序更新 运动的仿射结构。国际计算机杂志。《愿景》,23(3):235-25997年6月 Srikumar Ramalingam、Suresh K.Lodha和Peter Sturm。一般结构- 从
import numpy as np
import numpy.linalg as npla
def midpoint_triangulate(x, cam):
"""
Args:
x: Set of 2D points in homogeneous coords, (3 x n) matrix
cam: Collection of n objects, each containing member variables
cam.P - 3x4 camera matrix
cam.R - 3x3 rotation matrix
cam.T - 3x1 translation matrix
Returns:
midpoint: 3D point in homogeneous coords, (4 x 1) matrix
"""
n = len(cam) # No. of cameras
I = np.eye(3) # 3x3 identity matrix
A = np.zeros((3,n))
B = np.zeros((3,n))
sigma2 = np.zeros((3,1))
for i in range(n):
a = -np.transpose(cam[i].R).dot(cam[i].T) # ith camera position
A[:,i,None] = a
b = npla.pinv(cam[i].P).dot(x[:,i]) # Directional vector
b = b / b[3]
b = b[:3,None] - a
b = b / npla.norm(b)
B[:,i,None] = b
sigma2 = sigma2 + b.dot(b.T.dot(a))
C = (n * I) - B.dot(B.T)
Cinv = npla.inv(C)
sigma1 = np.sum(A, axis=1)[:,None]
m1 = I + B.dot(np.transpose(B).dot(Cinv))
m2 = Cinv.dot(sigma2)
midpoint = (1/n) * m1.dot(sigma1) - m2
return np.vstack((midpoint, 1))
非常感谢。最后我自己算出了方程式,解决了这个问题。