Scalable Point Processing in VTK
For many years now, the Visualization Toolkit VTK and ParaView have been used to visualize point clouds. More recently, the community has made huge steps forward in high-performance points rendering; see, for example, the recent OpenGL2 rendering subsystem overhaul [1]. Along the same lines, ParaView has been extended to support point processing, and specialized versions of the application have been created such as VeloView [2].
Customer feedback is now leading the community beyond rendering and visualization tasks. Increasingly, VTK is being used to perform large-scale data analysis and processing of points clouds. Part of the motivation is simply convenience and reduced application integration effort (e.g., less libraries to link and package); probably more importantly, however, VTK provides large-scale computing capabilities that lend themselves to processing massive data sets at the gigapoints and larger scale. Whether a multi-threaded, shared-memory approach [3]; distributed heterogenous computing [4,5]; or the VTK-m system for emerging processor architectures [6,7], VTK is being used in many novel point processing applications [8,9,10,11]. Customers also like VTK’s open source licensing terms which prevent vendor lock-in and leverage the talents of a wider community.
In response to these requests, we are adding new algorithms and capabilities to VTK. We’re also building better bridges into popular systems such as PCL [12]. Just recently, we contributed the following algorithms to VTK in the Filters/Points module as briefly described below:
- vtkBoundedPointSource – create a random cloud of points within a specified bounding box
- vtkEuclideanClusterExtraction – perform segmentation based on geometric proximity and optional scalar threshold
- vtkExtractPoints – extract points that are either inside or outside of an vtkImplicitFunction
- vtkExtractSurface – generate a zero-crossing isosurface from truncated signed distance volume (TSDV)
- vtkFitImplicitFunction – extract points on or near to the surface of an implicit function
- vtkHierarchicalBinningFilter – perform binning of points into a hierarchical structure
- vtkExtractHierarchicalBins – extract indicated data from the vtkHierarchicalBinningFilter
- vtkExtractPointCloudPiece – Return a piece of a point cloud (from the vtkHierarchicalBinningFilter)
- vtkPCACurvatureEstimation – generate curvature estimates using principal component analysis
- vtkPCANormalEstimation – generate point normals using local tangent planes from principal component analysis
- vtkPointCloudFilter – abstract class for filtering a point cloud
- vtkRadiusOutlierRemoval – remove isolated points, i.e., those points that have few neighbors within a specified radius
- vtkSignedDistance – compute signed distances from an input point cloud
- vtkStatisticalOutlierRemoval – remove sparse outlier points through statistical analysis
- vtkVoxelGrid – subsample points using uniform binning
Large-scale processing of point clouds in VTK and ParaView is an emerging and active area of development. If you are interested in these technologies and systems, follow ongoing progress in the community mailing lists [13] and code repositories [14]. Better yet, contribute to the VTK and ParaView open-source communities. Or, contact Kitware for support, consulting, or application integration needs [15].
[1] https://blog.kitware.com/rendering-engine-improvements-in-vtk/
[2] https://blog.kitware.com/announcing-veloview-2-0/
[3] https://blog.kitware.com/simple-parallel-computing-with-vtksmptools/
[4] Ahrens J.P., Brislawn K., Martin K., Geveci B., Law C.C., Papka M.E. Large-Scale Data Visualization Using Parallel Data Streaming. IEEE Computer Graphics & Applications, 21:34-41, Jul-2001.
[5] http://www.paraview.org/Wiki/ParaView/Catalyst/Overview
[6] https://blog.kitware.com/vtk-ms-first-code-sprint/
[7] http://m.vtk.org/index.php/Main_Page
[8] https://blog.kitware.com/interactive-visualization-of-google-project-tango-data-with-paraview/
[9] https://blog.kitware.com/paraview-and-project-tango-loading-data/
[10] https://blog.kitware.com/tracking-a-swinging-crane-load-with-veloview/
[11] https://blog.kitware.com/kitware-demonstrates-paraviews-point-cloud-processing-capabilities/
[12] PCL and ParaView — Connecting the Dots.
[13] http://www.vtk.org/mailing-lists/
[14] https://gitlab.kitware.com/vtk/vtk
[15] http://www.kitware.com/products/consulting.html
There is now a new PCL plugin for ParaView: https://blog.kitware.com/pcl-plugin-for-paraview/