<span>Hello, </span><br><br><span>In fact, your last proposition is what I need to do. The code I&#39;m using is just below. However, it doesn&#39;t work. The result is a black PNG file. Do you have an idea ? </span><br><span>The other goal is to be able to use PNG files from another application and to reconstruct the data to render it afterwards. </span><br>
<br><span>Thanks </span><br><br><br><span>Matthieu </span><br><br><br><span>vtkImageThreshold *mon_tre = vtkImageThreshold::New(); </span><br><span>&nbsp; &nbsp; &nbsp; &nbsp; mon_tre-&gt;SetInput(Vol-&gt;GetOutput()); </span><br><span>&nbsp; &nbsp; &nbsp; &nbsp; mon_tre-&gt;ThresholdByUpper(1300); </span><br>
<span>&nbsp; &nbsp; &nbsp; &nbsp; mon_tre-&gt;SetInValue(0); </span><br><span>&nbsp; &nbsp; &nbsp; &nbsp; mon_tre-&gt;SetOutValue(255); </span><br><span>&nbsp; &nbsp; &nbsp; &nbsp; //mon_tre-&gt;ReplaceOutOff(); </span><br><span>&nbsp; &nbsp; &nbsp; &nbsp; //mon_tre-&gt;ReplaceInOn(); </span><br><span>&nbsp; &nbsp; &nbsp; &nbsp; mon_tre-&gt;Update(); </span><br>
<br><span>vtkPNGWriter *writer=vtkPNGWriter::New(); </span><br><span>&nbsp; </span><br><span>&nbsp; &nbsp; writer-&gt;SetInput(mon_tre-&gt;GetOutput()); </span><br><span>&nbsp; &nbsp; char *wfname=(char *)malloc(sizeof(char)*25); </span><br><span>&nbsp; &nbsp; sprintf(wfname,&quot;koursky2.png&quot;); </span><br>
<br><span>&nbsp; &nbsp; writer-&gt;SetFileName(wfname); </span><br><span>&nbsp; &nbsp; writer-&gt;Write(); </span><br><br><br>
<blockquote class="quote light-black dark-border-color">
<div class="quote light-border-color">
<div class="quote-author" style="FONT-WEIGHT: bold"><span>Bill Lorensen-2 wrote:</span></div>
<div class="quote-message shrinkable-quote" style="OVERFLOW-Y: hidden; HEIGHT: 140px"><span>The vtk filters that you ran do not produce a volume. They produce </span><br><span>triangles which represent surfaces. </span><br>
<br><span>If you want to produce a thresholded volume, then save the output of </span><br><span>vtkImageThreshold. Set the OutValue to 255 to keep the data within the </span><br><span>range of an unsigned char. The you can use vtk (or itk) to svae the </span><br>
<span>thresholded volume in PNG files. </span><br><br><span>However, I still think we do not understand your goals. </span><br></div></div></blockquote><br><br>
<div class="gmail_quote">2008/12/11 Matthieu Duvinage <span dir="ltr">&lt;<a href="mailto:matthieu.duvinage@gmail.com">matthieu.duvinage@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Hello everybody,<br><br>I&#39;m working on a project in the medical field and I&#39;m using VTK. However, the last module I have to create seems to be provided only by ITK. In fact, I have to transform a volume in a series of PNG files and the ImageSeriesWriter class seems to be devoted to that.<br>
<br>1) I have compiled the library with CMake and then done the build all and install process. I put the repertories in includes and librairies in visual studio express 2008 but I have a problem. The program says that the file I have to import is not in the directory whereas it is but in a deeper directory. I have again this problem when I put the deeper directory in the include directories with another file. Is it possible to enable an option in visual to force it to look in deeper directories ?<br>
2) I would like to use the &nbsp;normals image (see below) from a VTK class to use ImageSeriesWriter. Could you give me an example of how to use that ? Because I&#39;m a bit lost with all the classes and the principle of pipeline. I have seen that there exist VTKimport or export classes to do something in this case but how do I have to do ?<br>
<br>I hope I hear from you soon<br><br><br>Matthieu<br><br><br>vtkImageThreshold *mon_tre = vtkImageThreshold::New();<br>&nbsp;mon_tre-&gt;SetInput(Vol-&gt;GetOutput());<br>&nbsp;mon_tre-&gt;ThresholdByUpper(1300);<br>&nbsp;mon_tre-&gt;SetInValue(0);<br>
&nbsp;mon_tre-&gt;SetOutValue(3000);<br>&nbsp;//mon_tre-&gt;ReplaceOutOff();<br>&nbsp;//mon_tre-&gt;ReplaceInOn();<br>&nbsp;mon_tre-&gt;Update();<br>&nbsp;vtkContourFilter *contours = vtkContourFilter::New();<br>&nbsp;contours-&gt;SetInput(mon_tre-&gt;GetOutput());<br>
&nbsp;contours-&gt;SetValue(1,3000);<br><br>&nbsp;//marsh cube<br>&nbsp; &nbsp;// Iso-surface using marching cubes<br>&nbsp;vtkMarchingCubes* iso = vtkMarchingCubes::New();<br>&nbsp;iso-&gt;SetInput(mon_tre-&gt;GetOutput());<br>&nbsp;iso-&gt;SetValue(1,3000); // Surface #0, iso-value=1<br>
&nbsp; &nbsp;//Decimation<br>&nbsp;vtkDecimatePro* decimate=vtkDecimatePro::New();<br>&nbsp;decimate-&gt;SetInput(iso-&gt;GetOutput());<br>&nbsp;decimate-&gt;SetTargetReduction(0.9);<br>&nbsp;decimate-&gt;PreserveTopologyOn();<br>&nbsp;decimate-&gt;SetMaximumError(0.0002);<br>
<br><br>&nbsp;// Smoothing<br>&nbsp;vtkSmoothPolyDataFilter* smoother =vtkSmoothPolyDataFilter::New();<br>&nbsp;smoother-&gt;SetInput(iso-&gt;GetOutput());<br>&nbsp;smoother-&gt;SetNumberOfIterations(200);<br>&nbsp;smoother-&gt;SetRelaxationFactor(0.05);<br>
&nbsp;//smoother-&gt;FeatureEdgeSmoothingOn();<br>&nbsp;//smoother-&gt;BoundarySmoothingOn();<br><br>&nbsp;vtkPolyDataNormals *normals=vtkPolyDataNormals::New();<br>&nbsp;normals-&gt;SetInput(smoother-&gt;GetOutput());<br></blockquote></div>
<br>