<div dir="ltr">Thanks, that helps. Here is my understanding so far:<div><br></div><div>1) The mask is, originally, a polydata contour.</div><div>2) The mask indicates the regions you do not want.</div><div>3) The mask will be converted into a binary image before use.</div><div><br></div><div>What I still need to know is:</div><div><br></div><div>3) Will some regions be partially within and partially outside the mask? Or will they always be entirely within or entirely outside?</div><div><br></div><div>The vtkImageConnectivityFilter takes two inputs: the first input is just an image (of course) and the second input (which is optional) is an image stencil (essentially a binary image). There is a filter called vtkPolyDataToImageStencil which can be used create this second input from a vtkPolyData object.</div><div><br></div><div> - David</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Jan 2, 2016 at 12:32 PM, Imre Goretzki <span dir="ltr"><<a href="mailto:goretzki.imre@gmail.com" target="_blank">goretzki.imre@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
I've drawn another image you could look at. The left image is the
input data from which I would like to extract the regions. Here
every region I would like to keep is painted green. The other two
regions, that are painted red, have points that are located inside a
region in the binary mask.<br>
<br>
<br>
For all points <i>P</i> in all regions <i>R</i> of image 1 with
binary mask <i>B</i><br>
<br>
If B_P == 255<br>
color region <i>R</i> red<br>
else<br>
color region <i>R</i> green<span class="HOEnZb"><font color="#888888"><br>
<br>
- Imre</font></span><div><div class="h5"><br>
<br>
<div>Am 02.01.2016 um 20:16 schrieb David
Gobbi:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Sorry, but I still don't follow your explanation.
I have some vague idea of what you are trying to do, but I don't
understand well enough to give you any concrete advice. Can you
try focussing on just one specific aspect of the problem, and
then once I've understood that one aspect, we can move forward
from there?
<div><br>
</div>
<div> - David</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Sat, Jan 2, 2016 at 11:46 AM, Imre
Goretzki <span dir="ltr"><<a href="mailto:goretzki.imre@gmail.com" target="_blank">goretzki.imre@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div 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.<span><font color="#888888"><br>
<br>
- Imre</font></span>
<div>
<div><br>
<br>
<div>Am 02.01.2016 um 18:54 schrieb David Gobbi:<br>
</div>
<blockquote 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 href="mailto:goretzki.imre@gmail.com" target="_blank"></a><a href="mailto:goretzki.imre@gmail.com" target="_blank">goretzki.imre@gmail.com</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><font color="#888888"><br>
<br>
- Imre</font></span>
<div>
<div><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 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 href="mailto:goretzki.imre@gmail.com" target="_blank"></a><a href="mailto:goretzki.imre@gmail.com" target="_blank">goretzki.imre@gmail.com</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>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</div></div></div>
</blockquote></div><br></div>