<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 class="HOEnZb"><font color="#888888"><br>
    <br>
    - Imre</font></span><div><div class="h5"><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>