[vtkusers] method to extract regions
Imre Goretzki
goretzki.imre at gmail.com
Tue Dec 29 07:27:47 EST 2015
Hi David,
thank you. I'll take a look at your class.
Regards
Imre
Am 29.12.2015 um 13:07 schrieb David Gobbi:
> Hi Imre,
>
> I have a connectivity filter that works directly on images, it can
> label connected regions according to size and it should be much faster
> (probably 1000x) than doing voxel checks via polydata:
> https://github.com/dgobbi/AIRS/blob/master/ImageSegmentation/vtkImageConnectivityFilter.h
> I'll probably be contributing this filter to VTK sometime in the near
> future.
>
> - David
>
>
> On Tue, Dec 29, 2015 at 4:02 AM, Imre Goretzki
> <goretzki.imre at gmail.com <mailto:goretzki.imre at gmail.com>> wrote:
>
> 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/e14caacb/attachment.html>
More information about the vtkusers
mailing list