From: jean-pierre roux Date: Tue, 17 Mar 2009 10:35:18 +0000 (+0000) Subject: Try to get more accurate info from SerieHelper X-Git-Tag: EED.02Oct2009~78 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=95c46befb5658894daa148d313a17b6d15810c06;p=bbtk.git Try to get more accurate info from SerieHelper --- diff --git a/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx b/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx index 7877be5..d99d025 100644 --- a/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx +++ b/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx @@ -20,12 +20,11 @@ void GetInfoGdcmReader::Process() bool res = f->Load(); if ( !res ) { - f->Delete(); bbSetOutputOut(0); return; } - + // Get info from the image file int i; std::vector v_iop; float iop[6]; @@ -64,7 +63,6 @@ void GetInfoGdcmReader::Process() void GetInfoGdcmReader::bbUserConstructor() { -std::cout << "entree ds GetInfoGdcmReader::bbUserConstructor()" << std::endl; bbSetInputIn(""); } diff --git a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx new file mode 100644 index 0000000..21fcdcf --- /dev/null +++ b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx @@ -0,0 +1,137 @@ +#include "bbgdcmvtkGetXCoherentInfoGdcmReader.h" +#include "bbgdcmvtkPackage.h" + +#include "gdcmFile.h" +#include "gdcmFileHelper.h" +#include "vtkImageData.h" +#include "vtkGdcmReader.h" +#include + +namespace bbgdcmvtk +{ + +BBTK_ADD_BLACK_BOX_TO_PACKAGE(gdcmvtk,GetXCoherentInfoGdcmReader) +BBTK_BLACK_BOX_IMPLEMENTATION(GetXCoherentInfoGdcmReader,bbtk::AtomicBlackBox); +void GetXCoherentInfoGdcmReader::Process() +{ + // Read the first image file + f = GDCM_NAME_SPACE::File::New(); + f->SetFileName( bbGetInputIn()[0] ); + bool res = f->Load(); + if ( !res ) + { + f->Delete(); + bbSetOutputOut(0); + return; + } + // Get info from the first image file + int i; + std::vector v_iop; + float iop[6]; + f->GetImageOrientationPatient(iop); + for(i=0; i< 6; i++) + v_iop.push_back(iop[i]); + bbSetOutputIOP(v_iop ); + + std::vector v_ipp; + float ipp[3]; + f->GetImagePositionPatient(ipp); + for(i=0; i< 3; i++) + v_ipp.push_back(ipp[i]); + bbSetOutputIPP(v_ipp ); + + std::vector v_pixelspacing; + v_pixelspacing.push_back(f->GetXSpacing()); + v_pixelspacing.push_back(f->GetYSpacing()); + if (f->GetZSize() != 1) { + v_pixelspacing.push_back(f->GetZSpacing()); + } + bbSetOutputPixelSpacing(v_pixelspacing); + +// Add all the files to the SerieHelper + sh = GDCM_NAME_SPACE::SerieHelper::New(); + std::vector gii = bbGetInputIn(); + for(std::vector::iterator it = gii.begin(); + it != gii.end(); + ++it) + { + sh->AddFileName(*it); + } + + GDCM_NAME_SPACE::FileList::const_iterator it; + GDCM_NAME_SPACE::FileList *l; + + // ==================== Just to see ============================== + + std::cout << std::endl << " ---------------------------------------- Recap" + << std::endl; + l = sh->GetFirstSingleSerieUIDFileSet(); + while (l) + { + it = l->begin(); + std::cout << "SerieUID [" << (*it)->GetEntryString(0x0020,0x000e) <<"] Serie Description [" + << (*it)->GetEntryString(0x0008,0x103e) << "] " + << " : " << l->size() << " files" << std::endl; + l = sh->GetNextSingleSerieUIDFileSet(); + } + std::cout << " ----------------------------------------End Recap" + << std::endl << std::endl; + + if(l->size() > 1) + std::cout << " --------------------------- More than ONE Serie UID ?!?" + << std::endl << std::endl; + // ============================================================ + + // Should only contain one! + l = sh->GetFirstSingleSerieUIDFileSet(); + + int nbFiles; + double zspacing = 0.; + nbFiles = l->size() ; + sh->OrderFileList(l); + zspacing = sh->GetZSpacing(); + + std::cout << "GetZSpacing() of sorted SingleSerieUIDFileSet " + << "from GDCM_NAME_SPACE::SerieHelper: " << zspacing << std::endl; + std::cout << " ('-1' means all the files have the same position)" << std::endl; + + bbSetOutputInterSlice(zspacing); + + + reader = vtkGdcmReader::New(); + //reader->SetFileName( bbGetInputIn().c_str() ); + reader->SetCoherentFileList(l); + reader->Update(); + reader->GetOutput(); + + vtkIndent indent ; + reader->GetOutput()->PrintSelf(std::cout, indent); + bbSetOutputOut( reader->GetOutput() ); +} + +void GetXCoherentInfoGdcmReader::bbUserConstructor() +{ + std::vector init; + init.push_back(""); + bbSetInputIn(init); +} + +void GetXCoherentInfoGdcmReader::bbUserCopyConstructor(bbtk::BlackBox::Pointer) +{ + +} + +void GetXCoherentInfoGdcmReader::bbUserDestructor() +{ + if(reader) + reader->Delete(); + if(f) + f->Delete(); + if(sh) + sh->Delete(); +} + +} +// EO namespace bbgdcmvtk + + diff --git a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.h b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.h new file mode 100644 index 0000000..858a490 --- /dev/null +++ b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.h @@ -0,0 +1,67 @@ +#ifdef _USE_VTK_ + +#ifndef __bbgdcmvtkGetXCoherentInfoGdcmReader_h_INCLUDED__ +#define __bbgdcmvtkGetXCoherentInfoGdcmReader_h_INCLUDED__ + +#include "bbgdcmvtk_EXPORT.h" +#include "bbtkAtomicBlackBox.h" +#include "iostream" + +#include "vtkGdcmReader.h" +#include "gdcmFile.h" +#include "gdcmSerieHelper.h" + +namespace bbgdcmvtk +{ + +class bbgdcmvtk_EXPORT GetXCoherentInfoGdcmReader + : + public bbtk::AtomicBlackBox +{ + BBTK_BLACK_BOX_INTERFACE(GetXCoherentInfoGdcmReader,bbtk::AtomicBlackBox); +//================================================================== +/// User callback called in the box contructor +virtual void bbUserConstructor(); +/// User callback called in the box copy constructor +virtual void bbUserCopyConstructor(bbtk::BlackBox::Pointer); +/// User callback called in the box destructor +virtual void bbUserDestructor(); +//================================================================== + + BBTK_DECLARE_INPUT(In, std::vector); + BBTK_DECLARE_OUTPUT(Out, vtkImageData *); + BBTK_DECLARE_OUTPUT(IPP, std::vector); + BBTK_DECLARE_OUTPUT(IOP, std::vector); + BBTK_DECLARE_OUTPUT(PixelSpacing, std::vector); + BBTK_DECLARE_OUTPUT(InterSlice, double); + + BBTK_PROCESS(Process); + void Process(); + + private: + GDCM_NAME_SPACE::File *f; + GDCM_NAME_SPACE::SerieHelper *sh; + vtkGdcmReader *reader; +}; + + //================================================================= + // UserBlackBox description +BBTK_BEGIN_DESCRIBE_BLACK_BOX(GetXCoherentInfoGdcmReader,bbtk::AtomicBlackBox); +BBTK_NAME("GetXCoherentInfoGdcmReader"); +BBTK_AUTHOR("jpr, eduardo"); +BBTK_DESCRIPTION("Get Dicom info from a File Set and read (as a vtkImageData)"); +BBTK_CATEGORY(""); + +BBTK_INPUT(GetXCoherentInfoGdcmReader,In,"Dicom image file name",std::vector,""); + +BBTK_OUTPUT(GetXCoherentInfoGdcmReader,Out, "Output image", vtkImageData *,""); +BBTK_OUTPUT(GetXCoherentInfoGdcmReader,IPP, "Image Position (Patient)", std::vector,""); +BBTK_OUTPUT(GetXCoherentInfoGdcmReader,IOP, "Image Orientation (Patient)", std::vector,""); +BBTK_OUTPUT(GetXCoherentInfoGdcmReader,PixelSpacing,"Pixel Spacing", std::vector,""); +BBTK_OUTPUT(GetXCoherentInfoGdcmReader,InterSlice, "InterSlice", double,""); +BBTK_END_DESCRIBE_BLACK_BOX(GetXCoherentInfoGdcmReader); +} // EO namespace bbgdcmvtk + +#endif // __bbgdcmvtkGetXCoherentInfoGdcmReader_h_INCLUDED__ + +#endif //_USE_VTK_