#include "creaImageIOWxGimmickReaderDialog.h"
#include <itkAnalyzeImageIO.h>
#include <itkImageFileReader.h>
+#include <itkImageSeriesReader.h>
#include <itkImage.h>
#include <itkImageSeriesWriter.h>
+#include <itkGDCMImageIO.h>
+#include <itkDICOMSeriesFileNames.h>
#include <itkNumericSeriesFileNames.h>
-#include "itkImageToVTKImageFilter.h"
+#include <itkVectorImage.h>
+#include <itkMetaImageIO.h>
+#include <itkOrientedImage.h>
#include <vtkImageReader2.h>
+#include <vtkMetaImageReader.h>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem.hpp>
#include <boost/utility.hpp>
+#include <creaVtkBasicSlicer.h>
namespace creaImageIO
{
Connect( gimmickBut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxISimpleDlg::OnReadGimmick );
/// \TODO Button to select Bruker directory
-
+ m_dicom = true;
Layout();
}
dlg.ShowModal();
if (dlg.GetReturnCode() == wxID_OK)
{
- // infoimage=_T("DICOM: ???_EED_???");
-//EED 07JUIN2010 dlg.GetSelectedImages(m_results,3);
- std::vector<creaImageIO::OutStrGimmick> out;
- std::vector<std::string> attr;
-// attr.push_back("D0028_0010");
-// attr.push_back("D0008_0023");
-// attr.push_back("D0008_1070");
- dlg.stopReading();
- dlg.getSelected(out, attr,true,"");
-// crea::VtkBasicSlicer(out.front().img);
- //m_results.clear();
- int size=out.size();
- int ii;
- //for (ii=0;ii<size;ii++)
- //{
- //m_results.push_back(out[ii].img);
- //}
-
+ std::vector<std::string> out;
+ dlg.stopReading();
+ dlg.GetSelectedFiles(out);
+ if(m_dicom)
+ {
+ readDicomImg( out);
+ }
+ else
+ {
+ std::vector<std::string>::iterator ii = out.begin();
+ for (;ii != out.end();ii++)
+ {
+ readImg( (*ii).c_str() );
+ }
+ }
dlg.OnExit();
}
SetReturnCode( dlg.GetReturnCode() );
+ template <typename TImage>
+ void WxISimpleDlg<TImage>::readDicomImg(const std::vector<std::string> &i_names)
+ {
+ typedef itk::GDCMImageIO GDCMType;
+ typedef itk::DICOMSeriesFileNames dicnames;
+ GDCMType::Pointer gdcmIO = GDCMType::New();
+ dicnames::Pointer generator = dicnames::New();
+// generator->SetInput(i_names);
+ typedef itk::ImageSeriesReader<TImage> ReaderType;
+ typename ReaderType::Pointer reader = ReaderType::New();
+ reader->SetImageIO(gdcmIO);
+ reader->SetFileNames(i_names);
+ // reader->SetFileName( i_name );
+ try
+ {
+ reader->Update();
+ }
+ catch( itk::ExceptionObject & err )
+ {
+ // std::cout << "Caught an exception reading" << i_name << ": " << std::endl;
+ std::cout << err << " " << __FILE__ << " " << __LINE__ << std::endl;
+ throw err;
+ }
+ catch(...)
+ {
+ //std::cout << "Error while reading image " << i_name << std::endl;
+ throw;
+ }
+ m_Iresults.push_back(reader->GetOutput());
+
+ }
+
+
+
+
template <typename TImage>
void WxISimpleDlg<TImage>::split3Din3Dvtk()
{
-
- int ii;
if ((m_Iresults).size() != 0)
{
-
- typename TImage::Pointer image = m_Iresults[0];
- image->GetImageDimension();
- typedef itk::ImageToVTKImageFilter< TImage > ConnectorType;
- ConnectorType::Pointer connector = ConnectorType::New();
- for(unsigned int i = 0 ;i < m_Iresults.size(); i++)
- {
- connector->SetInput(m_Iresults[i]);
- connector->Update();
- vtkImageData *im = vtkImageData::New();
- im->ShallowCopy(connector->GetOutput());
- m_Vresults.push_back(im);
- }
+ typedef itk::ImageToVTKImageFilter< TImage > ConnectorType;
+ ConnectorType::Pointer connector = ConnectorType::New();
+ for(unsigned int i = 0 ;i < m_Iresults.size(); i++)
+ {
+ connector->SetInput(m_Iresults[i]);
+ connector->GetImporter()->SetDataScalarTypeToUnsignedChar();
+ connector->Update();
+ vtkImageData *im = vtkImageData::New();
+ im->ShallowCopy(connector->GetOutput());
+ im->Update();
+ m_Vresults.push_back(im);
+ }
}
}
{
typename TImage::Pointer image = m_Iresults[0];
- // Size and dims for Input Image
- typedef itk::Size<4> iSize;
- typedef const itk::Size<4>::SizeValueType iSizeVal;
- iSize size = image->GetLargestPossibleRegion().GetSize();
- iSizeVal *dims_size = size.GetSize();
-
- // Output Type
- typedef itk::Image<short,3> ImageOutputType;
- typedef itk::ImageSeriesWriter<TImage, ImageOutputType > SeriesWriterType;
-
- SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New();
- seriesWriter->SetInput( image);
-
- // from JPR file to generate output files
- typedef itk::NumericSeriesFileNames NamesGeneratorType;
- NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();
- namesGenerator->SetStartIndex(0);
- namesGenerator->SetEndIndex(dims_size[3]-1);
- namesGenerator->SetIncrementIndex(1);
- std::string format = i_dir;
- format += "/image%03d.vtk";
- namesGenerator->SetSeriesFormat( format.c_str() );
-
- seriesWriter->SetFileNames( namesGenerator->GetFileNames() );
+ if(image->GetImageDimension() == 4)
+ {
+ // size of fourth dimension
+ int dsize = image->GetLargestPossibleRegion().GetSize(3);
+ // Output Type
+ typedef itk::Image<unsigned char,3> ImageOutputType;
+ typedef itk::ImageSeriesWriter<TImage, ImageOutputType > SeriesWriterType;
+ typedef itk::MetaImageIO MetaImageType;
+ MetaImageType::Pointer metaIO;
+ SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New();
- try
- {
- seriesWriter->Update();
- vtkImageReader2 *vReader =vtkImageReader2::New();
- for(unsigned int i = 0 ;i < dims_size[3]; i++)
+ // from JPR file to generate output files
+ typedef itk::NumericSeriesFileNames NamesGeneratorType;
+ NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();
+ namesGenerator->SetStartIndex(0);
+ namesGenerator->SetEndIndex(dsize-1);
+ namesGenerator->SetIncrementIndex(1);
+ std::string format = i_dir;
+ format += "/image%03d.mhd";
+ namesGenerator->SetSeriesFormat( format.c_str() );
+
+ const std::vector<std::string> names = namesGenerator->GetFileNames();
+ seriesWriter->SetFileNames( names );
+ seriesWriter->SetInput(image);
+ seriesWriter->SetImageIO(metaIO);
+ try
{
- vReader->SetFileName(namesGenerator->GetFileNames()[i].c_str());
- vReader->Update();
- m_Vresults.push_back(vReader->GetOutput());
+ seriesWriter->Update();
+ vtkMetaImageReader *vReader = vtkMetaImageReader::New();
+ std::vector<std::string>::const_iterator it = names.begin();
+ for( ;it != names.end(); ++it)
+ {
+ vReader->SetFileName((*it).c_str());
+ vReader->Update();
+ m_Vresults.push_back(vReader->GetOutput());
+ }
}
- }
- catch( itk::ExceptionObject & excp )
- {
- std::cerr << "Exception thrown while writing the series " << std::endl;
- std::cerr << excp << std::endl;
- //return EXIT_FAILURE;
- }
-
- }
+ catch( itk::ExceptionObject & excp )
+ {
+ std::cerr << "Exception thrown while writing the series " << std::endl;
+ std::cerr << excp << std::endl;
+ //return EXIT_FAILURE;
+ }
+ }
+ }
}