[Insight-users] display analyze image em 2D and 3D

Luis Ibanez luis.ibanez at kitware.com
Mon Sep 29 09:05:34 EDT 2008


Hi Jihan,

Try the following:

after the code:

   try{
 >             reader2->Update();
 >         }
 >         catch (itk::ExceptionObject & e)
 >         {
 >             std::cerr << "Failed to read " << fname << "\n" <<
 > e.GetDescription() << std::endl;
 >             return NULL;
 >         }

add a writer:

typedef itk::ImageFileWriter< ImageType > WriterType;

WriterType::Pointer writer2 = WriterType::New();

writer2->SetInput( reader2->GetOutput() );
writer2->SetFileName( "FROMDICOM.mhd");
writer2->Updates();

Then look at the output image by using the ImageViewer,
or ParaView, or Slicer, or VV, or SNAP,... or any other
application based on ITK readers.

Please let us know if that image still appears to have
the slices out of order.


   Thanks



       Luis



-------------
Jihan Zoghbi wrote:
> Dear Luis,
> 
>  Thanks for your help, I have already succeed to read and visualize 
> Analyze Image. I'm facing a new problem now, when I'm trying to read and 
> visualize Dicom Image , I got a problem to view the slides in the 
> correct order. I used the following code:
> /*******************************************/
> 
> char dir_name[]="/home/talita/Desktop/COMUNIX/Neck 1HEAD_NECK_PETCT/CT 
> HEAD-NK 5.0 B30s";
> dicom_info = vtkImageData::New();
> dicom_info = vtkITKMyUtilityLoadImage<unsigned short,1>(dir_name);
> /*****************************************************/
> void window1::addAxialSlice(int slice_number)
> {
>     int *extent;
>     extent = dicom_info->GetWholeExtent();
>     renderer->RemoveActor(axial);
>     axialColors = vtkImageMapToColors::New();
> 
> SetInputConnection(image->GetOutputPort());
>     axialColors->SetInput(dicom_info);
>     axialColors->SetLookupTable(hueLut);
>    
>     axial = vtkImageActor::New();
>     axial->SetInput(axialColors->GetOutput());
>     axial->SetDisplayExtent(0,extent[1], 0,extent[3], 
> slice_number,slice_number);
>    
>    axial->SetPosition(0,0,0);
> 
>     renderer->AddActor(axial);
>     renderer->ResetCameraClippingRange();
>     renArea->queue_draw();
> }
> /******************************************************/
> 
> template <class IT,int choice>
> vtkImageData* vtkITKMyUtilityLoadImage(char* fname)
> {
>     typedef itk::Image< IT,  3 >    ImageType;
>     typedef itk::ImageToVTKImageFilter<
> ImageType> ImageToVTKImageFilterType;
>     typedef itk::ImageFileReader< ImageType  >  ReaderType;
>     typedef itk::ImageSeriesReader< ImageType > ReaderType2;
>    
>     typename ReaderType::Pointer reader = ReaderType::New();
>     typename ReaderType2::Pointer reader2 = ReaderType2::New();
>    
>     typename ImageToVTKImageFilterType::Pointer 
> exporter=ImageToVTKImageFilterType::New();
>    
>     if (choice==0){
>         reader->SetFileName(fname);
>        
>         try{   
>             reader->Update();   
>         } 
>         catch (itk::ExceptionObject & e)   
>         {   
>             std::cerr << "Failed to read " << fname << "\n" << 
> e.GetDescription() << std::endl;   
>             return NULL;   
>         }
>         exporter->SetInput(reader->GetOutput());
>     }
>    
>     if (choice==1){
>    
>    
>         itk::DICOMImageIO2::Pointer dicomIO = itk::DICOMImageIO2::New();
>        
>         // Get the DICOM filenames from the directory
>         itk::DICOMSeriesFileNames::Pointer nameGenerator = 
> itk::DICOMSeriesFileNames::New();
>         nameGenerator->SetDirectory(fname);
>        
>        
>         try
>         {
>         typedef std::vector<std::string> seriesIdContainer;
>         const seriesIdContainer & seriesUID = 
> nameGenerator->GetSeriesUIDs();
>        
>         seriesIdContainer::const_iterator seriesItr = seriesUID.begin();
>         seriesIdContainer::const_iterator seriesEnd = seriesUID.end();
>        
>         std::cout << std::endl << "The directory: " << std::endl;
>         std::cout << std::endl << fname << std::endl << std::endl;
>         std::cout << "Contains the following DICOM Series: ";
>         std::cout << std::endl << std::endl;
>        
>         while( seriesItr != seriesEnd )
>         {
>             std::cout << seriesItr->c_str() << std::endl;
>             seriesItr++;
>         }
>        
>         std::cout << std::endl << std::endl;
>         std::cout << "Now reading series: " << std::endl << std::endl;
>        
>         typedef std::vector<std::string> fileNamesContainer;
>         fileNamesContainer fileNames;
>        
>         std::cout << seriesUID.begin()->c_str() << std::endl;
>         fileNames = nameGenerator->GetFileNames();
>         std::cout << std::endl << std::endl;
>        
>         reader2->SetFileNames( fileNames );
>         reader2->SetImageIO( dicomIO );
>        
>        
>         try{   
>             reader2->Update();   
>         }  
>         catch (itk::ExceptionObject & e)   
>         {   
>             std::cerr << "Failed to read " << fname << "\n" << 
> e.GetDescription() << std::endl;   
>             return NULL;   
>         }
>         exporter->SetInput(reader2->GetOutput());
>     }
>     catch (itk::ExceptionObject &ex)
>     {
>         std::cout << ex;
>         return NULL;
>     }
>    
>     }
>    
>     exporter->Update();
>    
>     vtkImageData* output=vtkImageData::New();
>     output->DeepCopy(exporter->GetOutput());
>    
>     return output;
> } 
> 
> P.S: This renderer is a Rendering Area of vtkmm.
> 
> Best Regards..
> 2008/9/27 Luis Ibanez <luis.ibanez at kitware.com 
> <mailto:luis.ibanez at kitware.com>>
> 
> 
>     Hi Jihan,
> 
>     Please describe what is "different" about the image when you display it.
> 
>     Also, what are you using for displaying the image ?
> 
>     Have you used the ImageViewer to visualize the image ?
>     You will find it in the InsightApplications module.
> 
> 
>      Regards,
> 
> 
>        Luis
> 
> 
>     --------------------
>     Jihan Zoghbi wrote:
> 
> 
>         Hi all,
>         I have a set of Analyze Image. I used ITK to read the .hdr file
>         and it got all right. I export this image to vtk, I'm facing a
>         great problem to display a 2D Slice. I already checked the
>         header data like: Spacing, Extent, Origin ..and everything is
>         ok! I 'm using unsigned short as a pixel type. I used the
>         vtkExtractVOI to extract a  2D slice,  but when I try to
>         visualize it, i got a total different image. Could anybody help me?
> 
>         Regards
>         -- 
>         Jihan Zoghbi
> 
>         -- 
>         Jihan Zoghbi
> 
> 
>         ------------------------------------------------------------------------
> 
> 
>         _______________________________________________
>         Insight-users mailing list
>         Insight-users at itk.org <mailto:Insight-users at itk.org>
>         http://www.itk.org/mailman/listinfo/insight-users
> 
> 
> 
> 
> -- 
> Jihan Zoghbi


More information about the Insight-users mailing list