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