Нахождение формулы трехмерной плоскости с использованием точек - PullRequest
0 голосов
/ 26 марта 2020

У меня есть набор трехмерных точек, и я использую метод наименьших квадратов, чтобы найти параметры A, B, C и D формулы Ax + By + Cz + D = 0, которая должна описывать самая подходящая плоскость для этих трехмерных точек.

Я использовал этот код на синтетическом c наборе данных с включенным в него синтетическим c шумом, поэтому точки не образуют идеальную плоскость. Этот шум был задан таким же отклонением, что и шум, который будет присутствовать в реальном наборе данных. Алгоритм прекрасно работает с каждой плоскостью.

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

Итак, вопрос в том, почему это не работает и как я могу это исправить? Существуют ли альтернативные методы поиска этой формулы, которые могут быть более надежными для моего случая?

Вот код, который я сейчас использую:

def calcBestNormal_v4(points, origin, p0=np.array([0.506645455682, -0.185724560275, -1.43998120646, 1.37626378129])):
  p = np.subtract(points, origin)

  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

leastsq является частью пакета scipy. оптимизируют

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...