]> Creatis software - clitk.git/commitdiff
Seeds are now given in mm (not in pixels ; bug)
authorDavid Sarrut <david.sarrut@creatis.insa-lyon.fr>
Mon, 1 Jul 2013 10:00:00 +0000 (12:00 +0200)
committerDavid Sarrut <david.sarrut@creatis.insa-lyon.fr>
Mon, 1 Jul 2013 10:00:00 +0000 (12:00 +0200)
segmentation/clitkExtractLung.ggo
segmentation/clitkExtractLungFilter.h
segmentation/clitkExtractLungFilter.txx
segmentation/clitkExtractLungGenericFilter.txx

index 44b99a201f468840b8a1e9c12c5154562f098699..f31f71812fa60c3bb4eca17f348c93b9f18cc9c3 100644 (file)
@@ -36,7 +36,7 @@ option "skipslices"                  -  "0: Number of slices to skip before sear
 option "upperThresholdForTrachea"    - "0: Initial upper threshold for trachea"  double        no  default="-900"
 option "multiplierForTrachea"       -  "0: Multiplier for the region growing"    double        no  default="5"
 option "thresholdStepSizeForTrachea" - "0: Threshold step size"                       int      no  default="64"
-option "seed"                        - "0,1: Index of the trachea seed point (in pixel, not in mm)"      int   no  multiple
+option "seed"                        - "0,1: Index of the trachea seed point (in mm  NOT IN PIXELS)"      float        no  multiple
 option "doNotCheckTracheaVolume"     -  "0,1: If set, do not check the trachea volume" flag off
 option "verboseRG"                   -  "0,1: Verbose RegionGrowing"   flag off
 option "maxElongation"               -  "1: Maximum allowed elongation of candidate regions for the trachea" float no default="0.5"
@@ -63,7 +63,7 @@ option "opencloseRadius"      -  "OpenClose radius"                           int no
 
 section "Step 6 : fill holes"
 option "doNotFillHoles"                -  "Do not fill holes if set"                 flag on
-option "dir"                   d  "Directions (axes) to perform filling (defaults to 2,1,0)"   int multiple no
+#option "dir"                  d  "Directions (axes) to perform filling (defaults to 2,1,0)"   int multiple no
 
 section "Step 7 : lung separation (labelling)"
 option "doNotSeparateLungs"   -  "Do not separate lungs if set"                 flag off
index 6f31cee1626a334d53f8042684bf8bbdb62a96d6..6c50b1c2d96c85e3c9b8485d970d9ad6e0a261b3 100644 (file)
@@ -164,7 +164,8 @@ namespace clitk {
     itkSetMacro(SeedPreProcessingThreshold, int);
     itkGetConstMacro(SeedPreProcessingThreshold, int);
 
-    void AddSeed(InternalIndexType s);
+    void AddSeedInPixels(InternalIndexType s);
+    void AddSeed(InputImagePointType s);
     std::vector<InternalIndexType> & GetSeeds() { return  m_Seeds; }
 
     itkSetMacro(TracheaVolumeMustBeCheckedFlag, bool);
@@ -252,6 +253,7 @@ namespace clitk {
     InputImagePixelType m_ThresholdStepSizeForTrachea;
     double m_MultiplierForTrachea;
     std::vector<InternalIndexType> m_Seeds;
+    std::vector<InputImagePointType> m_SeedsInMM;
     int m_NumberOfSlicesToSkipBeforeSearchingSeed;
     bool m_TracheaVolumeMustBeCheckedFlag;
     bool m_VerboseRegionGrowingFlag;
index a0acdd5ad2ab48aa3669d58f8d9d22171b74d329..b76001f0491397c36648ddb86653c120ddcfb49c 100644 (file)
@@ -90,8 +90,7 @@ ExtractLungFilter():
   TracheaVolumeMustBeCheckedFlagOn();
   SetNumSlices(50);
   SetMaxElongation(0.5);
-  SetSeedPreProcessingThreshold(-400);
+  SetSeedPreProcessingThreshold(-400); 
   
   // Step 3 default values
   SetNumberOfHistogramBins(500);
@@ -135,7 +134,19 @@ SetInput(const ImageType * image)
 template <class ImageType>
 void 
 clitk::ExtractLungFilter<ImageType>::
-AddSeed(InternalIndexType s) 
+//AddSeed(InternalIndexType s) 
+AddSeed(InputImagePointType s) 
+{ 
+  m_SeedsInMM.push_back(s);
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template <class ImageType>
+void 
+clitk::ExtractLungFilter<ImageType>::
+AddSeedInPixels(InternalIndexType s) 
 { 
   m_Seeds.push_back(s);
 }
@@ -461,7 +472,6 @@ GenerateOutputInformation()
     // smalest one (sometimes appends with the stomach
     if (initialNumberOfLabels >1) {
       if (GetRemoveSmallLabelBeforeSeparationFlag()) {
-        DD(GetRemoveSmallLabelBeforeSeparationFlag());
         typedef itk::RelabelComponentImageFilter<MaskImageType, MaskImageType> RelabelFilterType;
         typename RelabelFilterType::Pointer relabelFilter = RelabelFilterType::New();
         relabelFilter->SetInput(working_mask);
@@ -577,7 +587,7 @@ SearchForTracheaSeed(int skip)
       it.GoToBegin();
       while (!it.IsAtEnd()) {
         if(it.Get() < GetUpperThresholdForTrachea() ) {
-          AddSeed(it.GetIndex());
+          AddSeedInPixels(it.GetIndex());
           // DD(it.GetIndex());
         }
         ++it;
@@ -853,7 +863,7 @@ TracheaRegionGrowing()
   f->SetVerbose(GetVerboseRegionGrowingFlag());
   for(unsigned int i=0; i<m_Seeds.size();i++) {
     f->AddSeed(m_Seeds[i]);
-    // DD(m_Seeds[i]);
+    //DD(m_Seeds[i]);
   }  
   f->Update();
   PrintMemory(GetVerboseMemoryFlag(), "After RG update");
@@ -907,6 +917,15 @@ SearchForTrachea()
   // compute trachea volume
   // if volume not plausible  -> skip more slices and restart 
 
+  // If initial seed, convert from mm to pixels
+  if (m_SeedsInMM.size() > 0) {
+    for(unsigned int i=0; i<m_SeedsInMM.size(); i++) {
+      InputImageIndexType index;
+      working_input->TransformPhysicalPointToIndex(m_SeedsInMM[i], index);
+      m_Seeds.push_back(index);
+    }
+  }
+
   bool has_seed;
   bool stop = false;
   double volume = 0.0;
index b9a94d86aeef3b3b273ff9176786eb5ba214bc50..01455c84c3ba65d77ecb811da8e8a8afa442e029 100644 (file)
@@ -94,10 +94,10 @@ SetOptionsFromArgsInfoToFilter(FilterType * f)
   f->SetMaxElongation(mArgsInfo.maxElongation_arg);
   f->SetSeedPreProcessingThreshold(mArgsInfo.seedPreProcessingThreshold_arg);
 
-  typename FilterType::InputImageIndexType s;
+  typename FilterType::InputImagePointType s;
   if (mArgsInfo.seed_given) {
     ConvertOptionMacro(mArgsInfo.seed, s, 3, false);
-  f->AddSeed(s);
+    f->AddSeed(s);
   }
 
   f->SetMinimalComponentSize(mArgsInfo.minSize_arg);