2013-05-03 12 views
6

Używam mayavi.mlab do wyświetlania danych 3D wyodrębnionych z obrazów. Dane przedstawia się następująco:Renderowanie sceny z Mayavi z większą potokiem szybciej

  1. parametry kamery 3D jak 3 linii w kierunku x, y, x wokół środka aparatu, zwykle około 20 kamer wykorzystujących mlab.plot3d().
  2. 3D kolorowe punkty w przestrzeni dla około 4000 punktów za pomocą mlab.points3d().

Dla (1) Mam funkcję rysowania każdej linii dla każdej kamery osobno. Jeśli mam rację, wszystkie te linie są dodawane do potoku mayavi dla bieżącej sceny. Po mlab.show() scena zajmuje około 10 sekund, aby renderować wszystkie te linie.

For (2) Nie mogłem znaleźć sposobu na wykreślenie wszystkich punktów naraz z każdym punktem o innym kolorze, więc w tej chwili Iteruję z mlab.points3d(x,y,z, color = color). Mam nowszy czekał na zakończenie tej rutyny, jak to trwa długo. Jeśli wykreślę wszystkie punkty naraz tym samym kolorem, zajmuje to około 2 sekundy.

Próbowałem już uruchomić skrypt fig.scene.disable_render = True i zresetować fig.scene.disable_render = False przed wyświetleniem sceny za pomocą mlab.show().

Jak mogę wyświetlać moje dane za pomocą mayavi w rozsądnym czasie oczekiwania?

+0

Znalazłem inny post z podobnym pytaniem [http://stackoverflow.com/questions/16364311/render-a-mayavi-scene-witha-a-large-pipeline-faster](http://stackoverflow. com/questions/12935231/adnotacja-wiele-punktów-z-tekst-w-mayavi-using-mlab). Zbadam i zaktualizuję moje wnioski. –

+0

Znalazłem rozwiązanie (2) na http://stackoverflow.com/questions/22253298/mayavi-points3d-with-different-size-and-colors –

Odpowiedz

1

Ogólna zasada jest taka, że ​​obiekty vtk mają dużo narzutów, a więc do renderowania wydajności chcesz spakować jak najwięcej rzeczy do jednego obiektu, jak to możliwe. Podczas wywoływania funkcji wygody mlab, takich jak points3d, tworzy on nowy obiekt vtk do obsługi tych danych. Tak więc iteracja i tworzenie tysięcy pojedynczych punktów jako obiektów vtk jest bardzo złym pomysłem.

Sztuczka tymczasowego wyłączenia renderowania jak w tym drugim pytaniu - "właściwym" sposobem na zrobienie tego jest posiadanie jednego obiektu VTK, który przechowuje wszystkie różne punkty.

Aby ustawić różne punkty jako różne kolory, podaj wartości skalarne obiektowi vtk.

X, Y, Z = np.random.random ((3100)) some_data = mlab.points3d (x, y, z, colormap = 'cool') = some_data.mlab_source.dataset.point_data.scalars np.random.random ((100,))

Działa to tylko wtedy, gdy możesz odpowiednio przedstawić wartości kolorów, których potrzebujesz w colormapie. Jest to łatwe, jeśli potrzebujesz małej skończonej liczby kolorów lub małej skończonej liczby prostych map kolorów, ale bardzo trudne, jeśli potrzebujesz całkowicie dowolnych kolorów.

+0

czy możesz wyjaśnić, w jaki sposób mogę "spakować" wiele Mayavi/TVTK obiektów w jednym obiekcie? O tym pytaniu pisałem tutaj: http://stackoverflow.com/questions/22241499/how-to-join-connect-group-multiple-objects-in-mayavi2 Dziękuję bardzo. –

Powiązane problemy