Минимизировать расстояния до самолета - PullRequest
0 голосов
/ 11 марта 2020

У меня есть набор точек в трехмерном пространстве, и я знаю, что все эти точки принадлежат плоскости. Однако в этих точках присутствует некоторый шум, поэтому я не могу просто извлечь плоскость непосредственно из нее. Я хотел бы найти формулу плоскости (a x + b y + c* z + d = 0), которая наилучшим образом соответствует этим точкам. Другими словами, сумма (квадратов) расстояний от точек до плоскости должна быть сведена к минимуму.

Я делаю все это, используя python и numpy, но не могу понять как именно это реализовать.

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Если вы вычислите разложение по сингулярным числам распределения точек, вектор, соответствующий наименьшему собственному значению, будет нормальным к плоскости, скорректированной по распределению.

Предполагая, points - это матрица точек, содержащая точку за строку:

centroid = np.mean(points, axis=0)               # point on the plane
normal = np.linalg.svd(points - centroid)[2][2]  # plane normal (a,b,c)
d = -centroid.dot(normal)                        # distance to the origin (d)
plane = np.append(normal, d)                     # plane coefficients (a,b,c,d)
0 голосов
/ 11 марта 2020

Я провел еще несколько исследований о том, что python, scipy и numpy могли предложить для решения этой проблемы, и я наткнулся на этот фрагмент кода, который, как оказалось, делает именно то, что мне нужно:

def calcBestNormal(points, origin):
p = np.subtract(points, origin)

# Inital guess of the plane
p0 = np.array([0.506645455682, -0.185724560275, -1.43998120646, 1.37626378129])

def f_min(X, p):
    plane_xyz = p[0:3]
    distance = (plane_xyz * X.T).sum(axis=1) + p[3]
    return distance / np.linalg.norm(plane_xyz)

def residuals(params, signal, X):
    return f_min(X, params)

sol = leastsq(residuals, p0, args=(None, p.T))[0]
normal = np.divide(sol[0:3], np.linalg.norm(sol[0:3]))
return normal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...