<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Mh ok, I guess I did not explained my problem well enough.<br>
<br>
The vtkPolyDataConnectivityFilter returns regions, either the
largest, specified, seeded or all regions (your filter returns
largest, seeded or all). I'm interessted in the following:<br>
<br>
- all regions<br>
- specified regions.<br>
<br>
The problem is not the filter, the performance or possible memory
leaks, I need the region's polydata representation because I have a
second object (vtkImageData or vtkPolyData, binary mask) that has
some additional information, that are not represented by the data
(the input for the vtkImageConnectivityFilter).<br>
<br>
Imagine the input for the filter as image 1 and the mask as image 2.
Both images have the same dimensions in all 3 directions (x, y, z)
but contain different information.<br>
<br>
image 2 will be transformed to a binary image mask<br>
<br>
from image 1 i need to extract regions, but if some (unknown)
regions have points that are located in the binary image mask, I do
not want these regions to be contained in the extracted region list.<br>
<br>
So it's not about your filter or the performance, but I have some
problems using this filter for my issue, because I cannot reach the
region's polydata.<br>
<br>
I hope this helps.<br>
<br>
- Imre<br>
<br>
<div class="moz-cite-prefix">Am 02.01.2016 um 18:54 schrieb David
Gobbi:<br>
</div>
<blockquote
cite="mid:CANwS1=FjqcL7UZu=vvUZG-DZ4ZxOvQQUgub8fcn6uNJPvGfPFw@mail.gmail.com"
type="cite">
<div dir="ltr">Hi Imre, Happy New Year!
<div><br>
</div>
<div>I've read your email few times, and I feel that I must be
missing some important because there are several things that I
don't understand about it.</div>
<div><br>
</div>
<div>The vtkImageConnectivityFilter is essentially just a
connected component filter. In the output of this filter, all
pixels outside the mask will be colored black (they will have
a value of zero). So what I don't understand about your email
is why you say that non-rectangular regions are a problem.
Are you just worried about the wasted memory?</div>
<div><br>
</div>
<div> - David</div>
<div><br>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Sat, Jan 2, 2016 at 9:00 AM,
Imre Goretzki <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:goretzki.imre@gmail.com" target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:goretzki.imre@gmail.com">goretzki.imre@gmail.com</a></a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"> Hey David,<br>
<br>
first of all: Happy new year :)<br>
<br>
I have some questions about your filter. First of all
in part A of the attached image, is my understanding
of extents, so if you have a region, you will get the
x_min/x_max, y_min/y_max (and z_min/z_max for 3D). If
you do not have rectangular regions than you could
have some problems (see part A and B). In part B you
see my mask. The red rectangle shows the case that the
4 corners of a 2D region cannot be directly checked,
because the region that lies within this rectangle has
little matches with the mask (none of the 4 corners
are within the mask). The green rectangle has 3 out of
4 edges that lie within the mask.<br>
<br>
Part C shows one of the worst cases of this approach
(using extents) because there is so much space that
does not belong to the actual region.<br>
<br>
My question: Is it possible to extend your filter to
directly store the region data (for each region, for
example as vtkImageData) if the extraction mode is set
to "All"?<span class=""><font color="#888888"><br>
<br>
- Imre</font></span>
<div>
<div class="h5"><br>
<br>
<div>Am 29.12.2015 um 13:27 schrieb Imre Goretzki:<br>
</div>
<blockquote type="cite"> Hi David,<br>
<br>
thank you. I'll take a look at your class.<br>
<br>
Regards<br>
Imre<br>
<br>
<div>Am 29.12.2015 um 13:07 schrieb David Gobbi:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hi Imre,
<div><br>
</div>
<div>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:</div>
<div><a moz-do-not-send="true"
href="https://github.com/dgobbi/AIRS/blob/master/ImageSegmentation/vtkImageConnectivityFilter.h"
target="_blank">https://github.com/dgobbi/AIRS/blob/master/ImageSegmentation/vtkImageConnectivityFilter.h</a></div>
<div>I'll probably be contributing this
filter to VTK sometime in the near future.</div>
<div><br>
</div>
<div> - David</div>
<div><br>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Tue, Dec 29,
2015 at 4:02 AM, Imre Goretzki <span
dir="ltr"><<a
moz-do-not-send="true"
href="mailto:goretzki.imre@gmail.com"
target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:goretzki.imre@gmail.com">goretzki.imre@gmail.com</a></a>></span>
wrote:<br>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div bgcolor="#FFFFFF"
text="#000000"> Is there an easier
way in ITK?<br>
<br>
Thanks<span><font color="#888888"><br>
Imre</font></span>
<div>
<div><br>
<br>
<div>Am 28.12.2015 um 23:38
schrieb Imre Goretzki:<br>
</div>
<blockquote type="cite"> Hey
guys,<br>
<br>
I use the
vtkPolyDataConnectivityFilter
from polydata to extract
several different and more
or less unknown regions. <br>
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:<br>
<br>
filter->SetExtractionModeToAllRegions();<br>
filter->Update();<br>
...<br>
<br>
for (int i = 0; i <
filter->GetNumberOfExtractedRegions();
i++)<br>
{<br>
extractFilter->InitializeSpecifiedRegionList();<br>
extractFilter->AddSpecifiedRegion(i);<br>
extractFilter->Modified();<br>
extractFilter->Update();<br>
extractRegionData->DeepCopy(extractFilter->GetOutput());<br>
}<br>
extractFilter->InitializeSpecifiedRegionList();<br>
<br>
Background for this: I want
to use the points of each
region to check whether they
lie within an object in my
binary<br>
mask image. So the pipeline
would be like this:<br>
<br>
1) Get all Regions <br>
2) get region <i>i</i><br>
3) get points of
region <i>i</i><br>
4) check if
point <i>j</i> lies within
the binary mask <i>B</i>
(<i>B</i>_<i>j</i> == 255)<br>
4a) if true
then add region to the
extractFilter and break
(-> next region <i>i</i>)<br>
4b) if
false then continue with
next point <i>j</i><br>
5) Mark all regions red
(done easily)<br>
6) Mark some regions green
that are above a specific
size (can be accessed with
filter->GetRegionSizes()
)<br>
7) Mark some regions yellow
(the regions that are
extracted during step 1-4a)
<br>
<br>
I do not know if the
PolyDataConnectivityFilter
is the right class for this,
I think it is. <br>
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).<br>
<br>
I would now try to get the
points from the cells and
check the binary mask,
because the <br>
<br>
vtkPolyData->GetNumberOfPoints()<br>
<br>
and<br>
<br>
vtkPolyData->GetPoint(pointCounter,
point); <br>
<br>
are not working correctly in
this scenario (all regions
are extracted because every
single region has every
point?<br>
i did not verify my guess
but I think there would be
the problem)<br>
<br>
The binary mask is a
vtkImageData, that could be
transformed to vtkPolyData.<br>
The input image (already
filtered with
vtkMarchingCubes) and the
binary mask have the same
dimensions (x,y,z).<br>
<br>
I hope you can imagine what
I'm trying to do and have
some tips for me, if my
approach is correct.<br>
<br>
Regards<br>
Imre</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</blockquote>
<br>
</body>
</html>