[vtkusers] method to extract regions

Imre Goretzki goretzki.imre at gmail.com
Tue Dec 29 06:02:19 EST 2015


Is there an easier way in ITK?

Thanks
Imre

Am 28.12.2015 um 23:38 schrieb Imre Goretzki:
> 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/20151229/9869a720/attachment.html>


More information about the vtkusers mailing list