<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial,helvetica,sans-serif;font-size:12pt;color:#000000;">Hi Luis,<br><br><span id="result_box" class="long_text"><span title="saya berusaha untuk mensegmentasi file dicom lalu menyimpannya dalam format vtk.">I tried to segmented DICOM files and save them in vtk format.<br></span><span title="saya menggunakan contoh 1 2 dan 3 untuk membangun program saya.">I used&nbsp; DicomSeriesReadImageWrite2.cxx, DeformableModel1.cxx, DeformableModel2.cxx&nbsp; to build my program.<br></span><span title="masalahnya adalah hasilnya tidak sesuai dengan yang saya harapkan.">the problem is&nbsp; the result does not match what I expected.<br></span><span title="ketika saya membuka bone.vtk dengan fileeditor isinya hanya seperti ini:">when I opened bone.vtk (result file) with file editor the content just like this:</span></span>&nbsp; <div><br><font size="2"># vtk
 DataFile Version 3.0<br>VTK File Generated by Insight Segmentation and Registration Toolkit (ITK)<br>ASCII<br>DATASET STRUCTURED_POINTS<br>DIMENSIONS 124 124 45<br>SPACING 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00<br>ORIGIN 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00<br>POINT_DATA 691920<br>SCALARS scalars short 1<br>LOOKUP_TABLE default<br>0 0 0 0 0 0 <br>0 0 0 0 0 0 <br>0 0 0 0 0 0 <br>0 0 0 0 0 0 <br>0 0 0 0 0 0 <br>0 0 0 0 0 0 </font><br>....<br>and when I opened this file with vtk reader (<font size="2">PolyDataReader</font>) there was error :<br><br><font size="2">ERROR: In /build/buildd/vtk-5.0.3/IO/vtkPolyDataReader.cxx, line 142<br>vtkPolyDataReader (0x8765510): Cannot read dataset type: structured_points</font><br><br><br>This is my source code list :<br><font size="2">/*=========================================================================<br>Name : 3D Segmentation of Bone Structure on CT
 Image<br>=========================================================================*/<br>// Include the required header <br><br>#include "itkOrientedImage.h"
<br>#include "itkGDCMImageIO.h"
<br>#include "itkGDCMSeriesFileNames.h"
<br>#include "itkImageSeriesReader.h"
<br>#include "itkImageFileWriter.h"<br><br>#include "itkMesh.h"
<br>#include "itkDeformableMesh3DFilter.h"&nbsp;
<br>#include "itkGradientRecursiveGaussianImageFilter.h"&nbsp;
<br>#include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"&nbsp;
<br>#include "itkImage.h"
<br>#include "itkCovariantVector.h"
<br>#include "itkSphereMeshSource.h"
<br>#include "itkImageFileReader.h" <br>#include "itkPointSetToImageFilter.h"<br>#include "itkVTKImageIO.h"
<br><br><br><br>int main(int argc, char* argv[] )<br>{<br>&nbsp;if( argc &lt; 3 )
<br>&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "Usage: " &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; argv[0] &lt;&lt; " DicomDirectory&nbsp; outputFileName&nbsp; [seriesName]"&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp; }<br><br>&nbsp;typedef signed short&nbsp;&nbsp;&nbsp; PixelType;
<br>&nbsp; const unsigned int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dimension = 3;
<br>&nbsp;<br>&nbsp; typedef itk::OrientedImage&lt; PixelType, Dimension &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageType;
<br>&nbsp;<br>&nbsp; typedef itk::ImageSeriesReader&lt; ImageType &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReaderType;
<br>&nbsp; ReaderType::Pointer reader = ReaderType::New();
<br>&nbsp;<br>&nbsp; typedef itk::GDCMImageIO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIOType;
<br>&nbsp; ImageIOType::Pointer dicomIO = ImageIOType::New();
<br>&nbsp; reader-&gt;SetImageIO( dicomIO );
<br>&nbsp;<br>&nbsp; typedef itk::GDCMSeriesFileNames NamesGeneratorType;
<br>&nbsp; NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();
<br>&nbsp;<br>&nbsp; nameGenerator-&gt;SetUseSeriesDetails( true );
<br>&nbsp; nameGenerator-&gt;AddSeriesRestriction("0008|0021" );
<br>&nbsp; nameGenerator-&gt;SetDirectory( argv[1] );
<br>&nbsp;
<br>&nbsp; try
<br>&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; std::endl &lt;&lt; "The directory: " &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; std::endl &lt;&lt; argv[1] &lt;&lt; std::endl &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "Contains the following DICOM Series: ";
<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; std::endl &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef std::vector&lt; std::string &gt;&nbsp;&nbsp;&nbsp; SeriesIdContainer;
<br>&nbsp;&nbsp;&nbsp; const SeriesIdContainer &amp; seriesUID = nameGenerator-&gt;GetSeriesUIDs();
<br>&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp; SeriesIdContainer::const_iterator seriesItr = seriesUID.begin();
<br>&nbsp;&nbsp;&nbsp; SeriesIdContainer::const_iterator seriesEnd = seriesUID.end();
<br>&nbsp;&nbsp;&nbsp; while( seriesItr != seriesEnd )
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; seriesItr-&gt;c_str() &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seriesItr++;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; std::string seriesIdentifier;
<br>&nbsp;&nbsp;&nbsp; if( argc &gt; 3 )&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seriesIdentifier = argv[3];
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br>&nbsp;&nbsp;&nbsp; else
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seriesIdentifier = seriesUID.begin()-&gt;c_str();
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;
<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; std::endl &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "Now reading series: " &lt;&lt; std::endl &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; seriesIdentifier &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; std::endl &lt;&lt; std::endl;
<br>&nbsp;<br>&nbsp;//read DICOM<br>&nbsp;&nbsp;&nbsp; typedef std::vector&lt; std::string &gt;&nbsp;&nbsp; FileNamesContainer;
<br>&nbsp;&nbsp;&nbsp; FileNamesContainer fileNames;
<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; fileNames = nameGenerator-&gt;GetFileNames( seriesIdentifier );
<br>&nbsp;&nbsp;&nbsp; reader-&gt;SetFileNames( fileNames );
<br>&nbsp;&nbsp;&nbsp; try
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader-&gt;Update();
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br>&nbsp;&nbsp;&nbsp; catch (itk::ExceptionObject &amp;ex)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; ex &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>//segmentation with DeformableModel<br>&nbsp; const float sigma&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 1.0 ;
<br>&nbsp; const int&nbsp;&nbsp; numberOfIterations =&nbsp; 100 ;
<br>&nbsp; const float timeStep&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp; 0.1 ;
<br>&nbsp; const float externalForceScale =&nbsp; 10 ;
<br>&nbsp; const float stiffness&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp; 0.1 ;<br>&nbsp;<br>&nbsp; typedef double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MeshPixelType;&nbsp;&nbsp; typedef itk::Mesh&lt; MeshPixelType &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MeshType;&nbsp;&nbsp;&nbsp;
<br>&nbsp; typedef itk::GradientRecursiveGaussianImageFilter&lt;ImageType&gt; GradientFilterType;&nbsp;&nbsp; typedef itk::GradientMagnitudeRecursiveGaussianImageFilter&lt;ImageType,ImageType&gt; GradientMagnitudeFilterType;
<br>&nbsp; typedef itk::DeformableMesh3DFilter&lt;MeshType,MeshType&gt;&nbsp; DeformableFilterType;&nbsp;&nbsp;&nbsp;&nbsp; GradientMagnitudeFilterType::Pointer&nbsp; gradientMagnitudeFilter = GradientMagnitudeFilterType::New();
<br>&nbsp; ImageType::ConstPointer inputImage = reader-&gt;GetOutput();&nbsp;&nbsp; gradientMagnitudeFilter-&gt;SetInput( inputImage );&nbsp;&nbsp;&nbsp; gradientMagnitudeFilter-&gt;SetSigma( sigma );&nbsp;&nbsp; GradientFilterType::Pointer gradientMapFilter = GradientFilterType::New();&nbsp; <br>&nbsp; gradientMapFilter-&gt;SetInput( gradientMagnitudeFilter-&gt;GetOutput());&nbsp;&nbsp; gradientMapFilter-&gt;SetSigma( sigma );&nbsp;&nbsp; gradientMapFilter-&gt;Update();&nbsp; <br>&nbsp; DeformableFilterType::Pointer deformableModelFilter = DeformableFilterType::New();
<br>&nbsp; typedef itk::SphereMeshSource&lt; MeshType &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MeshSourceType;&nbsp;&nbsp; MeshSourceType::Pointer meshSource = MeshSourceType::New();
<br>&nbsp;&nbsp;
<br>&nbsp; // Set the initial sphere in the center of the image
<br>&nbsp; const ImageType::SpacingType spacing = inputImage-&gt;GetSpacing();
<br>&nbsp; ImageType::PointType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; origin&nbsp; = inputImage-&gt;GetOrigin();&nbsp;&nbsp; ImageType::SizeType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size&nbsp;&nbsp;&nbsp; = inputImage-&gt;GetBufferedRegion().GetSize();
<br>&nbsp;<br>&nbsp; MeshType::PointType center;
<br>&nbsp; center[0] = origin[0] + spacing[0] * size[0] / 2.0;&nbsp;&nbsp; center[1] = origin[1] + spacing[1] * size[1] / 2.0;&nbsp;&nbsp; center[2] = origin[2] + spacing[2] * size[2] / 2.0;
<br>&nbsp; meshSource-&gt;SetCenter( center );
<br>&nbsp; MeshType::PointType radius;&nbsp;&nbsp; radius[0] = spacing[0] * size[0] / 4.0;
<br>&nbsp; radius[1] = spacing[1] * size[1] / 4.0;&nbsp;&nbsp; radius[2] = spacing[2] * size[2] / 4.0;
<br>&nbsp; meshSource-&gt;SetScale( radius );&nbsp;
<br>&nbsp; meshSource-&gt;SetResolutionX( 50 );&nbsp;&nbsp; meshSource-&gt;SetResolutionY( 50 );&nbsp;&nbsp; meshSource-&gt;Update();
<br>&nbsp; deformableModelFilter-&gt;SetInput( meshSource-&gt;GetOutput() );&nbsp;&nbsp; deformableModelFilter-&gt;SetGradient( gradientMapFilter-&gt;GetOutput() );&nbsp;
<br>&nbsp; typedef itk::CovariantVector&lt;double, 2&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StiffnessType;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp; StiffnessType stiffnessVector;&nbsp;&nbsp;&nbsp;&nbsp; stiffnessVector[0] = stiffness;&nbsp;&nbsp; stiffnessVector[1] = stiffness;
<br>&nbsp; <br>&nbsp; deformableModelFilter-&gt;SetTimeStep( timeStep );&nbsp;&nbsp; deformableModelFilter-&gt;SetStiffness( stiffnessVector );
<br>&nbsp; deformableModelFilter-&gt;SetStepThreshold( numberOfIterations );&nbsp;&nbsp; deformableModelFilter-&gt;SetGradientMagnitude( externalForceScale );<br>&nbsp;&nbsp; try&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp; deformableModelFilter-&gt;Update();
<br>&nbsp;&nbsp;&nbsp; }
<br>&nbsp; catch( itk::ExceptionObject &amp; excep )&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "Exception Caught !" &lt;&lt; std::endl;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; excep &lt;&lt; std::endl;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>//writer to *.vtk file<br>&nbsp; typedef itk::PointSetToImageFilter&lt;MeshType,ImageType&gt; MeshFilterType;
<br>&nbsp; MeshFilterType::Pointer meshFilter = MeshFilterType::New();
<br>&nbsp; meshFilter-&gt;SetInput(meshSource-&gt;GetOutput());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
//</font><font size="2"> (<font size="4">I confused in there !!!!! or&nbsp;</font> )</font><br><font size="2">&nbsp; try&nbsp;
<br>&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp; meshFilter-&gt;Update();
<br>&nbsp;&nbsp;&nbsp; }
<br>&nbsp; catch( itk::ExceptionObject &amp; excep )
<br>&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "Exception Caught !" &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; excep &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;<br>&nbsp;&nbsp;&nbsp; typedef itk::ImageFileWriter&lt; ImageType &gt; WriterType;
<br>&nbsp;&nbsp;&nbsp; WriterType::Pointer writer = WriterType::New();
<br>&nbsp;&nbsp;&nbsp; writer-&gt;SetFileName( argv[2] );
<br>&nbsp;&nbsp;&nbsp; writer-&gt;SetInput( meshFilter-&gt;GetOutput() );
<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; std::cout&nbsp; &lt;&lt; "Writing the image as " &lt;&lt; std::endl &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; std::cout&nbsp; &lt;&lt; argv[2] &lt;&lt; std::endl &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp;&nbsp; typedef itk::VTKImageIO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIOType;<br>&nbsp;&nbsp;&nbsp; ImageIOType::Pointer vtkIO = ImageIOType::New();<br>&nbsp;&nbsp;&nbsp; vtkIO-&gt;SetFileTypeToASCII();<br>&nbsp;&nbsp;&nbsp; writer-&gt;SetImageIO( vtkIO );
<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; try
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer-&gt;Update();
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br>&nbsp;&nbsp;&nbsp; catch (itk::ExceptionObject &amp;ex)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; ex &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;<br>&nbsp;&nbsp;&nbsp; }
<br>&nbsp; catch (itk::ExceptionObject &amp;ex)
<br>&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; ex &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;
<br>&nbsp;&nbsp;&nbsp; }
<br><br>}<br></font><font size="2">//end list=========================================================================</font><br><br><br>Regards,<br><br>&nbsp;Sutrisno<br></div>
</div><br>__________________________________________________<br>Apakah Anda Yahoo!?<br>Lelah menerima spam?  Surat Yahoo! memiliki perlindungan terbaik terhadap spam  <br>http://id.mail.yahoo.com </body></html>