]> Creatis software - bbtk.git/commitdiff
Try to get more accurate info from SerieHelper
authorjean-pierre roux <jean-pierre.roux@creatis.insa-lyon.fr>
Tue, 17 Mar 2009 10:35:18 +0000 (10:35 +0000)
committerjean-pierre roux <jean-pierre.roux@creatis.insa-lyon.fr>
Tue, 17 Mar 2009 10:35:18 +0000 (10:35 +0000)
packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx
packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx [new file with mode: 0644]
packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.h [new file with mode: 0644]

index 7877be5bf9c37f6e977cf9d33e778827aad47080..d99d025eb48e08d2c65721f36d0749baa6db7937 100644 (file)
@@ -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<double> 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 (file)
index 0000000..21fcdcf
--- /dev/null
@@ -0,0 +1,137 @@
+#include "bbgdcmvtkGetXCoherentInfoGdcmReader.h"
+#include "bbgdcmvtkPackage.h"
+
+#include "gdcmFile.h"
+#include "gdcmFileHelper.h"
+#include "vtkImageData.h"
+#include "vtkGdcmReader.h"
+#include <vtkIndent.h>
+
+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<double> 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<double> 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<double> 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<std::string> gii = bbGetInputIn();
+   for(std::vector<std::string>::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<std::string> 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 (file)
index 0000000..858a490
--- /dev/null
@@ -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<std::string>);
+  BBTK_DECLARE_OUTPUT(Out,          vtkImageData *);
+  BBTK_DECLARE_OUTPUT(IPP,          std::vector<double>);
+  BBTK_DECLARE_OUTPUT(IOP,          std::vector<double>);
+  BBTK_DECLARE_OUTPUT(PixelSpacing, std::vector<double>);
+  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<std::string>,"");
+
+BBTK_OUTPUT(GetXCoherentInfoGdcmReader,Out,         "Output image",                vtkImageData *,"");
+BBTK_OUTPUT(GetXCoherentInfoGdcmReader,IPP,         "Image Position (Patient)",    std::vector<double>,"");
+BBTK_OUTPUT(GetXCoherentInfoGdcmReader,IOP,         "Image Orientation (Patient)", std::vector<double>,"");
+BBTK_OUTPUT(GetXCoherentInfoGdcmReader,PixelSpacing,"Pixel Spacing",               std::vector<double>,"");
+BBTK_OUTPUT(GetXCoherentInfoGdcmReader,InterSlice,  "InterSlice",                  double,"");
+BBTK_END_DESCRIBE_BLACK_BOX(GetXCoherentInfoGdcmReader);
+} // EO namespace bbgdcmvtk
+
+#endif // __bbgdcmvtkGetXCoherentInfoGdcmReader_h_INCLUDED__
+
+#endif //_USE_VTK_