#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 "itkImageToVTKImageFilter.h"
+#include <itkOrientedImage.h>
#include <vtkImageReader2.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;
+ typedef itk::Size<4> iSize; // TO REMOVE
+ typedef const itk::Size<4>::SizeValueType iSizeVal; // TO REMOVE
iSize size = image->GetLargestPossibleRegion().GetSize();
iSizeVal *dims_size = size.GetSize();
// Output Type
- typedef itk::Image<short,3> ImageOutputType;
+ typedef itk::Image<unsigned char,3> ImageOutputType;
typedef itk::ImageSeriesWriter<TImage, ImageOutputType > SeriesWriterType;
+ /* typedef itk::VectorImage<short, 3> VectorImageType;
+ VectorImageType::Pointer vect = VectorImageType::New();
+ vect.*/
+
+
SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New();
seriesWriter->SetInput( image);
typedef itk::NumericSeriesFileNames NamesGeneratorType;
NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();
namesGenerator->SetStartIndex(0);
- namesGenerator->SetEndIndex(dims_size[3]-1);
+ namesGenerator->SetEndIndex(dims_size[3]-1); // TO CHANGE
namesGenerator->SetIncrementIndex(1);
std::string format = i_dir;
format += "/image%03d.vtk";
namesGenerator->SetSeriesFormat( format.c_str() );
-
- seriesWriter->SetFileNames( namesGenerator->GetFileNames() );
+ const std::vector<std::string> names = namesGenerator->GetFileNames();
+ seriesWriter->SetFileNames( names );
try
{
seriesWriter->Update();
- vtkImageReader2 *vReader =vtkImageReader2::New();
- for(unsigned int i = 0 ;i < dims_size[3]; i++)
+ vtkImageReader2 *vReader = vtkImageReader2::New();
+ vReader->SetFilePrefix(".vtk");
+ std::vector<std::string>::const_iterator it = names.begin();
+ for( ;it != names.end(); ++it)
{
- vReader->SetFileName(namesGenerator->GetFileNames()[i].c_str());
+ vReader->SetFileName((*it).c_str());
vReader->Update();
+ crea::VtkBasicSlicer(vReader->GetOutput());
m_Vresults.push_back(vReader->GetOutput());
}
}