X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FcreaImageIOWxISimpleDlg.hpp;h=b2d813d6ddb83a5db0d0a0265e209280c73073d3;hb=124b9349d1cc0a7316228bab71f96bc183bcbf6f;hp=e310a0736c7fe581568e3582964c7c5135bba59c;hpb=a0d90e6ac158b51ad2966f15f15fc5291312b6bf;p=creaImageIO.git diff --git a/src/creaImageIOWxISimpleDlg.hpp b/src/creaImageIOWxISimpleDlg.hpp index e310a07..b2d813d 100644 --- a/src/creaImageIOWxISimpleDlg.hpp +++ b/src/creaImageIOWxISimpleDlg.hpp @@ -3,14 +3,20 @@ #include "creaImageIOWxGimmickReaderDialog.h" #include #include +#include #include #include +#include +#include #include -#include "itkImageToVTKImageFilter.h" +#include +//#include "itkImageToVTKImageFilter.h" +#include #include #include #include #include +#include namespace creaImageIO { @@ -74,7 +80,7 @@ namespace creaImageIO Connect( gimmickBut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxISimpleDlg::OnReadGimmick ); /// \TODO Button to select Bruker directory - + m_dicom = true; Layout(); } @@ -178,24 +184,21 @@ namespace creaImageIO dlg.ShowModal(); if (dlg.GetReturnCode() == wxID_OK) { - // infoimage=_T("DICOM: ???_EED_???"); -//EED 07JUIN2010 dlg.GetSelectedImages(m_results,3); - std::vector out; - std::vector 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 out; + dlg.stopReading(); + dlg.GetSelectedFiles(out); + if(m_dicom) + { + readDicomImg( out); + } + else + { + std::vector::iterator ii = out.begin(); + for (;ii != out.end();ii++) + { + readImg( (*ii).c_str() ); + } + } dlg.OnExit(); } SetReturnCode( dlg.GetReturnCode() ); @@ -256,26 +259,58 @@ namespace creaImageIO + template + void WxISimpleDlg::readDicomImg(const std::vector &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 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 void WxISimpleDlg::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); + } } } @@ -289,15 +324,20 @@ namespace creaImageIO 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 ImageOutputType; + typedef itk::Image ImageOutputType; typedef itk::ImageSeriesWriter SeriesWriterType; + /* typedef itk::VectorImage VectorImageType; + VectorImageType::Pointer vect = VectorImageType::New(); + vect.*/ + + SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New(); seriesWriter->SetInput( image); @@ -305,22 +345,25 @@ namespace creaImageIO 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 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::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()); } }