[vtkusers] method to extract regions

Imre Goretzki goretzki.imre at gmail.com
Mon Dec 28 17:38:03 EST 2015


Hey guys,

I use the vtkPolyDataConnectivityFilter from polydata to extract several 
different and more or less unknown regions.
My problem is that I want to extract regions from this filter, but if I 
do this, the update process for all regions takes up to 10minutes:

filter->SetExtractionModeToAllRegions();
filter->Update();
...

for (int i = 0; i < filter->GetNumberOfExtractedRegions(); i++)
{
     extractFilter->InitializeSpecifiedRegionList();
     extractFilter->AddSpecifiedRegion(i);
     extractFilter->Modified();
     extractFilter->Update();
     extractRegionData->DeepCopy(extractFilter->GetOutput());
}
extractFilter->InitializeSpecifiedRegionList();

Background for this: I want to use the points of each region to check 
whether they lie within an object in my binary
mask image. So the pipeline would be like this:

1) Get all Regions
     2) get region /i/
          3) get points of region /i/
              4) check if point /j/ lies within the binary mask /B/     
(/B/_/j/ == 255)
                  4a) if true then add region to the extractFilter and 
break (-> next region /i/)
                  4b) if false then continue with next point /j/
5) Mark all regions red (done easily)
6) Mark some regions green that are above a specific size (can be 
accessed with filter->GetRegionSizes() )
7) Mark some regions yellow (the regions that are extracted during step 
1-4a)

I do not know if the PolyDataConnectivityFilter is the right class for 
this, I think it is.
If I store the extractRegionData in a vector, all regions have the same 
number of points (which is kind of strange) but different number of 
cells (region size == number of cells is correct).

I would now try to get the points from the cells and check the binary 
mask, because the

vtkPolyData->GetNumberOfPoints()

and

vtkPolyData->GetPoint(pointCounter, point);

are not working correctly in this scenario (all regions are extracted 
because every single region has every point?
i did not verify my guess but I think there would be the problem)

The binary mask is a vtkImageData, that could be transformed to vtkPolyData.
The input image (already filtered with vtkMarchingCubes) and the binary 
mask have the same dimensions (x,y,z).

I hope you can imagine what I'm trying to do and have some tips for me, 
if my approach is correct.

Regards
Imre
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20151228/54342e98/attachment.html>


More information about the vtkusers mailing list