<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>