[vtk-developers] vtkPointCloud remote module

Geoff Wright gpwright at gmail.com
Mon Feb 29 17:25:42 EST 2016


Hi Will,

I took a look at the new capabilities in vtkPointCloud, it looks very nice,
definitely adding some much needed capabilities.  I have a PCL
pre-processing step that does a bunch of octree-based filtering prior to
populating a vtkImageData and evaluating a subsequent vtk pipeline.
Unfortunately I wasn't able to eliminate PCL from my hybrid PCL/vtk setup
just yet.  The problem is not really specific to vtkPointCloud, but I have
found that the vtkStaticPointLocator is just very slow compared to
pcl::octree::OctreePointCloudSearch.  I have some algorithms that do a lot
of octree searching and when I switch them over to use
vtkStaticPointLocator an algorithm update takes around 200ms compared with
2ms using the octree from pcl.

Fyi for my particular use case, I did some profiling and the vtk locator
tends to get pretty bogged down in the following call stack:
vtkDataArrayTemplate<float>::GetTuple
BucketList<int>::FindClosestPointWithinRadius
vtkStaticPointLocator::FindClosestPointWithinRadius

If I were to guess I would suspect that its just busy doing a lot of memory
allocation and deallocation.  I think the pcl implementation benefits from
a more low level API, avoiding memory allocation inside loops, and probably
gets a boost from inline / precompiled headers too.

Like I said, it's not specific to your vtkPointCloud module but the
performance hit is very significant so I will stick with PCL for the moment.

Regards,
Geoff




On Sat, Feb 27, 2016 at 10:28 AM Will Schroeder <will.schroeder at kitware.com>
wrote:

> Here's a quick update on point cloud processing in VTK. We've got an
> initial base of decent capability going now, including (and I am absolutely
> delighted about this) a surface extraction capability based on TSDF
> (truncated signed distance functions).
>
> *Classes now running (in VTK/Remote/vtkPointCloud):*
> vtkEuclideanClusterExtraction.h
> vtkExtractHierarchicalBins.h
> vtkExtractPointCloudPiece.h
> vtkExtractPoints.h
> vtkExtractSurface.h
> vtkFitImplicitFunction.h
> vtkHierarchicalBinningFilter.h
> vtkPCACurvatureEstimation.h
> vtkPCANormalEstimation.h
> vtkPointCloudFilter.h
> vtkRadiusOutlierRemoval.h
> vtkSignedDistance.h
> vtkStatisticalOutlierRemoval.h
> vtkVoxelGrid.h
>
> *Surface extraction (in VTK/Remote/vtkPointCloud):*
> We've build a pipeline of objects that perform rudimentary surface
> extraction from a point cloud. There are three major parts:
> 1. Generating normals - currently use vtkPCANormalEstimation, including
> graph traversal to create consistently oriented normals.
> 2. Compute the TSDF using vtkSignedDistance.
> 3. Extract zero-crossing isocontour to generate surface
> (vtkExtractSurface).
>
> Note that each of these parts will eventually be expanded by writing new
> filters, for example I want to use in #1 Brad King's tensor voting (from
> his PhD thesis <http://www.kitware.com/publications/item/view/1253>) to
> compute better normals. For #2, based loosely on the Curless & Levoy
> <https://graphics.stanford.edu/papers/volrange/volrange.pdf> paper, we
> can do better by using different interpolation kernels (see
> PointInterpolation framework below) rather than the ad hoc probability
> weights they use (to be added soon). Also for #2 we need to support
> incremental updating. Finally, #3 is based on a modified Flying Edges
> <https://www.researchgate.net/publication/282975362_Flying_Edges_A_High-Performance_Scalable_Isocontouring_Algorithm>
> algorithm so it is very fast :-)
>
> *Point Interpolation (in VTK/Filters/Points)*
> We just pushed this in, it looks to be a very powerful, quite general
> framework for performing data interpolation across point samples. It's
> threaded, uses fast threaded locators, and has an abstraction for a family
> of interpolation kernels (e.g., linear, gaussian, shepard, voronoi,
> hopefully SPH) at some point soon, with more on the way.
>
> As usual any feedback is appreciated. Make sure you update both VTK and
> the vtkPointCloud remote module. Please don't be shy, this is happening
> really fast and I want to catch the inevitable stupid stuff as soon as
> possible.
>
> Best,
> W
>
>
> On Thu, Jan 28, 2016 at 9:12 AM, Will Schroeder <
> will.schroeder at kitware.com> wrote:
>
>> FYI- I have committed an initial set of filters for performing point
>> cloud processing. Any feedback or suggestions are welcome as this is an
>> initial prototype. The work is currently available as a remote module to
>> VTK (vtkPointCloud) via this repository:
>> https://gitlab.kitware.com/vtk/point-cloud.git
>>
>> A couple of notes:
>> + Right now I am using vtkPolyData to represent the point cloud via a
>> vtkPoints instance. There are no vtkVertex, vtkPolyVertex cells created to
>> save on memory.
>> + The classes will process as input any vtkPointSet dataset
>> + There is a general framework for filtering point clouds via the class
>> vtkPointCloudFilter. Besides their filtered cloud output, these filters
>> also have an optional, second output which contains any points removed from
>> the input.
>> + Current filters include vtkRadiusOutlierRemoval,
>> vtkStatisticalOutlierRemoval, vtkExtractPoints (extract points using an
>> implicit function). Some of  these names are inspired by PCL
>> <http://pointclouds.org/> names.
>> + All filters are threaded using vtkSMPTools using a threaded locator
>> (vtkStaticPointLocator) so I believe that this is relatively fast, although
>> I have not done much testing.
>> + I'm using vtkPointGaussianMapper in the tests, a class that Ken wrote
>> that is very fast.
>>
>> As usual comments and suggestions are requested. In particular any
>> suggestions for other filters to write are welcome (to round out some of
>> the core functionality). The repository is in flux as I try crazy ideas and
>> try to educate myself, so be forewarned.
>>
>> Best,
>> W
>>
>>
>>
>
>
> --
> William J. Schroeder, PhD
> Kitware, Inc. - Building the World's Technical Computing Software
> 28 Corporate Drive
> Clifton Park, NY 12065
> will.schroeder at kitware.com
> http://www.kitware.com
> (518) 881-4902
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Search the list archives at: http://markmail.org/search/?q=vtk-developers
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/vtk-developers
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20160229/3ac955e7/attachment.html>


More information about the vtk-developers mailing list