<div dir="ltr"><div>vtkDiscreteMarchingCubes should be used for segmented data. vtkMarchingCubes for &quot;continuous&quot; data.<br><br></div>In your case, a medical dataset, it is unusual to have 8 bit data. Most medical data (e.g. DICOM) is 16 bit.<br>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Aug 2, 2013 at 4:59 PM, Dr. Roman Grothausmann <span dir="ltr">&lt;<a href="mailto:grothausmann.roman@mh-hannover.de" target="_blank">grothausmann.roman@mh-hannover.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On 02/08/13 22:50, Bill Lorensen wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Since your data is unsigned char, and you used an isovalue of 127, I suspect<br>
there must be some degenerate triangles produced. I did produce two nonmanifold<br>
edges with isovalue 127 (I&#39;m surprised).<br>
<br>
Try specifying a non-integral value (e.g. 127.001). I do not see non-manifold<br>
edges with that value.<br>
</blockquote>
<br>
<br></div>
I will. Many thanks for the solution.<br>
What should I read to understand that a non-integral value circumvents the problem (and that an integral value causes it)?<br>
Also I&#39;ve searched long for an explanation what causes the difference concerning surface smoothness using vtkMarchingCubes on a binary image or one that has a gradient (understanding that that allows to calculate normals pointing in more than 26 directions) simply created with a mean-filer on the binary image. Is there a kind of additional internal filter that only is applied if the input has gradients?<br>

<br>
Many thanks Bill for looking into this.<br>
Roman<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
On Fri, Aug 2, 2013 at 4:30 PM, Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a><br></div><div class="im">
&lt;mailto:<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.<u></u>com</a>&gt;&gt; wrote:<br>
<br>
    Great. I generated a surface. It will take be a few minutes to generate<br>
    feature edges.<br>
<br>
<br>
<br>
    On Fri, Aug 2, 2013 at 4:25 PM, Dr. Roman Grothausmann<br>
    &lt;<a href="mailto:grothausmann.roman@mh-hannover.de" target="_blank">grothausmann.roman@mh-<u></u>hannover.de</a><br></div><div class="im">
    &lt;mailto:<a href="mailto:grothausmann.roman@mh-hannover.de" target="_blank">grothausmann.roman@mh-<u></u>hannover.de</a>&gt;&gt; wrote:<br>
<br>
        On 02/08/13 22:20, Bill Lorensen wrote:<br>
<br>
            what level do you use?<br>
<br>
<br>
        Sorry, forgot to mention that: level 127<br>
<br>
<br>
<br>
<br>
            On Fri, Aug 2, 2013 at 4:07 PM, Dr. Roman Grothausmann<br></div><div class="im">
            &lt;<a href="mailto:grothausmann.roman@mh-__hannover.de" target="_blank">grothausmann.roman@mh-__<u></u>hannover.de</a><br>
            &lt;mailto:<a href="mailto:grothausmann.roman@mh-hannover.de" target="_blank">grothausmann.roman@mh-<u></u>hannover.de</a>&gt;<br>
            &lt;mailto:<a href="mailto:grothausmann.roman@mh-__hannover.de" target="_blank">grothausmann.roman@mh-<u></u>__hannover.de</a><br>
            &lt;mailto:<a href="mailto:grothausmann.roman@mh-hannover.de" target="_blank">grothausmann.roman@mh-<u></u>hannover.de</a>&gt;&gt;&gt;<br>
<br>
            wrote:<br>
<br></div><div><div class="h5">
                 On 02/08/13 16:06, Bill Lorensen wrote:<br>
<br>
                     Marching Cubes should not generate non-manifold surfaces.<br>
            The offending<br>
                     triangle<br>
                     looks suspicious. What does the rest of your pipeline look<br>
            like?<br>
<br>
<br>
                 Thanks Bill for looking into this. I get the very same output<br>
            using paraview<br>
                 and its contour filter when ticking &quot;Generate Triangles&quot; or using<br>
                 vmtkmarchingcubes (which seems to use only vtkMarchingCubes in<br>
                 vmtkmarchingcubes.py). To check it trice I used the simple<br>
            program below and<br>
                 got the same output again. Only paraview and its contour filter<br>
            without<br>
                 ticking &quot;Generate Triangles&quot; yields a different result.<br>
<br>
                 _____________________________<br>
<br>
                 #include &lt;vtkSmartPointer.h&gt;<br>
                 #include &lt;vtkMetaImageReader.h&gt;<br>
                 //#include &lt;vtkImageConstantPad.h&gt;<br>
                 #include &lt;vtkMarchingCubes.h&gt;<br>
                 #include &lt;vtkXMLPolyDataWriter.h&gt;//for vtp-files<br>
<br>
                 #include &lt;vtkCallbackCommand.h&gt;<br>
                 #include &lt;vtkCommand.h&gt;<br>
<br>
<br>
                 void ProgressFunction ( vtkObject* caller, long unsigned int<br>
            eventId, void*<br>
                 clientData, void* callData )<br>
                       {<br>
<br></div></div>
                       vtkAlgorithm *d= static_cast&lt;vtkAlgorithm*&gt;(___<u></u>_caller);<div class="im"><br>
<br>
                       fprintf(stderr, &quot;\rFilter progress: %5.1f%%&quot;, 100.0 *<br>
            d-&gt;GetProgress());<br>
                       std::cerr.flush();<br>
<br>
                       }<br>
<br>
                 int main(int argc, char* argv[]){<br>
                       if( argc != 5 )<br>
                          {<br>
                          std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; argv[0];<br>
                          std::cerr &lt;&lt; &quot; inputImage&quot;;<br>
                          std::cerr &lt;&lt; &quot; outputMesh&quot;;<br>
                          std::cerr &lt;&lt; &quot; level normals&quot;;<br>
                          std::cerr &lt;&lt; std::endl;<br>
                          return EXIT_FAILURE;<br>
                          }<br>
<br></div>
                       if(!(strcasestr(argv[1],&quot;.mhd&quot;<u></u>____))) {<div class="im"><br>
<br>
                          std::cout &lt;&lt; &quot;The input should end with .mhd&quot; &lt;&lt;<br>
            std::endl;<br>
                          return -1;<br>
                          }<br>
<br></div>
                       if(!(strcasestr(argv[2],&quot;.vtp&quot;<u></u>____))) {<div class="im"><br>
<br>
                          std::cout &lt;&lt; &quot;The input should end with .vtp&quot; &lt;&lt;<br>
            std::endl;<br>
                          return -1;<br>
                          }<br>
<br></div>
                       vtkSmartPointer&lt;____<u></u>vtkCallbackCommand&gt; progressCallback =<br>
                 vtkSmartPointer&lt;____<u></u>vtkCallbackCommand&gt;::New();<br>
                       progressCallback-&gt;SetCallback(<u></u>____ProgressFunction);<br>
<br>
                       vtkSmartPointer&lt;____<u></u>vtkMetaImageReader&gt; reader =<br>
                           vtkSmartPointer&lt;____<u></u>vtkMetaImageReader&gt;::New();<div class="im"><br>
<br>
<br>
                       reader-&gt;SetFileName(argv[1]);<br>
                       reader-&gt;Update();<br>
<br></div>
                       vtkSmartPointer&lt;____<u></u>vtkMarchingCubes&gt; mc=<br>
                 vtkSmartPointer&lt;____<u></u>vtkMarchingCubes&gt;::New();<br>
<br>
                       mc-&gt;SetInputConnection(reader-<u></u>____&gt;GetOutputPort());<div class="im"><br>
<br>
                       mc-&gt;SetValue(0, atof(argv[3]));<br>
                       //mc-&gt;ComputeNormalsOn();<br></div>
                       mc-&gt;SetComputeNormals(atoi(___<u></u>_argv[4]));<div class="im"><br>
<br>
                       //mc-&gt;ComputeGradientsOn();<br>
                       //mc-&gt;ComputeScalarsOn();<br>
                       std::cout &lt;&lt; &quot;Executing discrete marching cubes...&quot; &lt;&lt;<br>
            std::endl;<br></div>
                       mc-&gt;AddObserver(vtkCommand::__<u></u>__ProgressEvent,<div class="im"><br>
            progressCallback);<br>
<br>
                       mc-&gt;Update();<br>
                       std::cout &lt;&lt; std::endl &lt;&lt; &quot;done.&quot; &lt;&lt; std::endl;<br>
<br></div>
                       vtkSmartPointer&lt;____<u></u>vtkXMLPolyDataWriter&gt; Pwriter =<br>
                 vtkSmartPointer&lt;____<u></u>vtkXMLPolyDataWriter&gt;::New();<br>
                       Pwriter-&gt;SetFileName(argv[2]);<br>
                       Pwriter-&gt;SetInputConnection(__<u></u>__mc-&gt;GetOutputPort());<div class="im"><br>
<br>
<br>
                       Pwriter-&gt;Update();<br>
<br>
                       return EXIT_SUCCESS;<br>
                       }<br>
<br>
<br>
<br>
<br>
<br>
                     On Fri, Aug 2, 2013 at 8:23 AM, Dr. Roman Grothausmann<br></div>
            &lt;<a href="mailto:grothausmann.roman@mh-____hannover.de" target="_blank">grothausmann.roman@mh-____<u></u>hannover.de</a><br>
            &lt;mailto:<a href="mailto:grothausmann.roman@mh-__hannover.de" target="_blank">grothausmann.roman@mh-<u></u>__hannover.de</a>&gt;<br>
            &lt;mailto:<a href="mailto:grothausmann.roman@mh-__hannover.de" target="_blank">grothausmann.roman@mh-<u></u>__hannover.de</a><br>
            &lt;mailto:<a href="mailto:grothausmann.roman@mh-hannover.de" target="_blank">grothausmann.roman@mh-<u></u>hannover.de</a>&gt;&gt;<br>
            &lt;mailto:<a href="mailto:grothausmann.roman@mh-____hannover.de" target="_blank">grothausmann.roman@mh-<u></u>____hannover.de</a><br>
            &lt;mailto:<a href="mailto:grothausmann.roman@mh-__hannover.de" target="_blank">grothausmann.roman@mh-<u></u>__hannover.de</a>&gt;<div><div class="h5"><br>
<br>
            &lt;mailto:<a href="mailto:grothausmann.roman@mh-__hannover.de" target="_blank">grothausmann.roman@mh-<u></u>__hannover.de</a><br>
            &lt;mailto:<a href="mailto:grothausmann.roman@mh-hannover.de" target="_blank">grothausmann.roman@mh-<u></u>hannover.de</a>&gt;&gt;&gt;&gt;<br>
<br>
                     wrote:<br>
<br>
                          Dear mailing list members,<br>
<br>
<br>
                          Recently, I came across a voxel-dataset that when<br>
            meshed with<br>
                          vtkMarchingCubes results in a mesh that contains<br>
            non-manifold edges<br>
                     (magenta<br>
                          line in attached image).<br>
                          How can this be avoided?<br>
                          Using paraview&#39;s contour filter and switching off<br>
            &quot;Generate Triangles&quot;<br>
                          creates a slightly different surface mesh that does<br>
            not contain<br>
                     non-manifold<br>
                          edges. However vtkMarchingCubes does not seem to have<br>
            any option<br>
                     concerning<br>
                          triangulation.<br>
                          What filter/option do I have to use to get the same<br>
            result just<br>
                     with pure VTK?<br>
<br>
                          As a workaround: Is it possible to split the mesh at<br>
            non-manifold<br>
                     edges?<br>
                          vtkIntersectionPolyDataFilter sounds promising but<br>
            seems to need<br>
                     surfaces<br>
                          not just the edges.<br>
<br>
                          Any help or hints are very much appreciated<br>
                          Roman<br>
<br>
<br>
<br>
                     --<br>
                     Unpaid intern in BillsBasement at noware dot com<br>
<br>
<br>
                 --<br>
                 Dr. Roman Grothausmann<br>
<br>
                 Tomographie und Digitale Bildverarbeitung<br>
                 Tomography and Digital Image Analysis<br>
<br>
                 Institut für Funktionelle und Angewandte Anatomie, OE 4120<br>
                 Medizinische Hochschule Hannover<br>
                 Carl-Neuberg-Str. 1<br>
                 D-30625 Hannover<br>
<br>
                 Tel. <a href="tel:%2B49%20511%20532-9574" value="+495115329574" target="_blank">+49 511 532-9574</a> &lt;tel:%2B49%20511%20532-9574&gt;<br></div></div>
            &lt;tel:%2B49%20511%20532-9574&gt;<br>
<br>
                 ______________________________<u></u>_____________________<div class="im"><br>
                 Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a> &lt;<a href="http://www.kitware.com" target="_blank">http://www.kitware.com</a>&gt;<br>
            &lt;<a href="http://www.kitware.com" target="_blank">http://www.kitware.com</a>&gt;<br>
<br>
<br>
                 Visit other Kitware open-source projects at<br></div>
            <a href="http://www.kitware.com/____opensource/opensource.html" target="_blank">http://www.kitware.com/____<u></u>opensource/opensource.html</a><br>
            &lt;<a href="http://www.kitware.com/__opensource/opensource.html" target="_blank">http://www.kitware.com/__<u></u>opensource/opensource.html</a>&gt;<div class="im"><br>
<br>
            &lt;<a href="http://www.kitware.com/__opensource/opensource.html" target="_blank">http://www.kitware.com/__<u></u>opensource/opensource.html</a><br>
            &lt;<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/<u></u>opensource/opensource.html</a>&gt;&gt;<br>
<br>
                 Please keep messages on-topic and check the VTK FAQ at:<br></div>
            <a href="http://www.vtk.org/Wiki/VTK_____FAQ" target="_blank">http://www.vtk.org/Wiki/VTK___<u></u>__FAQ</a><br>
            &lt;<a href="http://www.vtk.org/Wiki/VTK___FAQ" target="_blank">http://www.vtk.org/Wiki/VTK__<u></u>_FAQ</a>&gt;<div class="im"><br>
            &lt;<a href="http://www.vtk.org/Wiki/VTK___FAQ" target="_blank">http://www.vtk.org/Wiki/VTK__<u></u>_FAQ</a> &lt;<a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_<u></u>FAQ</a>&gt;&gt;<br>

<br>
<br>
                 Follow this link to subscribe/unsubscribe:<br></div>
            <a href="http://www.vtk.org/mailman/____listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/___<u></u>_listinfo/vtkusers</a><br>
            &lt;<a href="http://www.vtk.org/mailman/__listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/__<u></u>listinfo/vtkusers</a>&gt;<div class="im"><br>
<br>
            &lt;<a href="http://www.vtk.org/mailman/__listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/__<u></u>listinfo/vtkusers</a><br>
            &lt;<a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/<u></u>listinfo/vtkusers</a>&gt;&gt;<br>
<br>
<br>
<br>
<br>
            --<br>
            Unpaid intern in BillsBasement at noware dot com<br>
<br>
<br>
        --<br>
        Dr. Roman Grothausmann<br>
<br>
        Tomographie und Digitale Bildverarbeitung<br>
        Tomography and Digital Image Analysis<br>
<br>
        Institut für Funktionelle und Angewandte Anatomie, OE 4120<br>
        Medizinische Hochschule Hannover<br>
        Carl-Neuberg-Str. 1<br>
        D-30625 Hannover<br>
<br></div>
        Tel. <a href="tel:%2B49%20511%20532-9574" value="+495115329574" target="_blank">+49 511 532-9574</a> &lt;tel:%2B49%20511%20532-9574&gt;<div class="im"><br>
<br>
<br>
<br>
<br>
    --<br>
    Unpaid intern in BillsBasement at noware dot com<br>
<br>
<br>
<br>
<br>
--<br>
Unpaid intern in BillsBasement at noware dot com<br>
</div></blockquote>
<br><div class="HOEnZb"><div class="h5">
-- <br>
Dr. Roman Grothausmann<br>
<br>
Tomographie und Digitale Bildverarbeitung<br>
Tomography and Digital Image Analysis<br>
<br>
Institut für Funktionelle und Angewandte Anatomie, OE 4120<br>
Medizinische Hochschule Hannover<br>
Carl-Neuberg-Str. 1<br>
D-30625 Hannover<br>
<br>
Tel. <a href="tel:%2B49%20511%20532-9574" value="+495115329574" target="_blank">+49 511 532-9574</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Unpaid intern in BillsBasement at noware dot com<br>
</div>