Open3d: EstimateNormals не работает для плоских участков

Созданный на 27 мар. 2019  ·  3Комментарии  ·  Источник: intel-isl/Open3D

Похоже, что функция EstimateNormals не работает должным образом для полностью плоских участков, также как-то в зависимости от ориентации.

Воспроизвести:

import numpy as np
import open3d

X,Y = np.mgrid[0:1:0.1,0:1:0.1]
X = X.flatten()
Y = Y.flatten()

pts = np.zeros((3, X.size))
pts[0] = X
pts[1] = Y

shape  = open3d.PointCloud()
shape.points = open3d.Vector3dVector(pts.T)
shape.paint_uniform_color([0, 0.651, 0.929]) # blue

open3d.estimate_normals(shape, open3d.KDTreeSearchParamHybrid(radius = 0.5, max_nn = 30))

# show the shape
open3d.draw_geometries([shape])

Если вы напишете

pts[1] = X
pts[2] = Y

вместо этого - работает как положено; если вы используете в качестве индексов 0 и 1 или 0 и 2 - это больше не работает.

Ожидал:
Screenshot from 2019-03-26 23-56-53
Получил:
Screenshot from 2019-03-26 23-57-29

Окружающая среда (просьба заполнить следующую информацию):

  • ОС: Ubuntu 18.04
  • Версия Python: 3.6.7
  • Версия Open3D: выпуск 0.5 (также проверено на коммите 6f493ef149f1360796709127312e1ff692bcf316)
  • Это удаленная рабочая станция ?: нет
  • Как вы установили Open3D ?: pip для выпуска; построить себе более новую версию
possible bug

Все 3 Комментарий

Хороший улов. Похоже на числовую проблему этой функции:
https://github.com/IntelVCL/Open3D/blob/377fc7d6a47ea47681c25a1e07a5383d62a612aa/src/Open3D/Geometry/EstimateNormals.cpp#L40

Я раскопаюсь, когда у меня будет время.

Интересный факт: добавление минимального шума к точкам решает проблему.

Исправлено в # 1011

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

DKandrew picture DKandrew  ·  3Комментарии

mike239x picture mike239x  ·  4Комментарии

Prakash19921206 picture Prakash19921206  ·  4Комментарии

blackccpie picture blackccpie  ·  3Комментарии

samarth-robo picture samarth-robo  ·  3Комментарии