]> Creatis software - clitk.git/blobdiff - itk/clitkSliceBySliceRelativePositionFilter.txx
Remove vcl_math calls
[clitk.git] / itk / clitkSliceBySliceRelativePositionFilter.txx
index a8d12ada76206a2ea10d79e0bf2d7a30b22d6341..fc820be5ee44c48d8e37b2ebb2aa887b60e2921b 100644 (file)
@@ -42,6 +42,8 @@ SliceBySliceRelativePositionFilter():
   SetObjectCCLSelectionDimension(0);
   SetObjectCCLSelectionDirection(1);
   ObjectCCLSelectionIgnoreSingleCCLFlagOff();
+  VerboseSlicesFlagOff();
+  this->SetK1(std::acos(-1.0)/2);
 }
 //--------------------------------------------------------------------
 
@@ -77,7 +79,7 @@ clitk::SliceBySliceRelativePositionFilter<ImageType>::
 PrintOptions(std::ostream & os) 
 {
   os << "Slice direction = " << this->GetDirection() << std::endl
-     << "BG value        = " << this->GetBackgroundValue() << std::endl;
+     << "BG value        = " << (int)this->GetBackgroundValue() << std::endl;
   for(int i=0; i<this->GetNumberOfAngles(); i++) {
     os << "Orientation     = " << this->GetOrientationTypeString()[i] << std::endl;
     os << "Angles     = " << clitk::rad2deg(this->GetAngle1InRad(i)) 
@@ -95,7 +97,10 @@ PrintOptions(std::ostream & os)
      << "ObjectCCLSelectionFlag = " << this->GetObjectCCLSelectionFlag() << std::endl    
      << "ObjectCCLSelectionDimension = " << this->GetObjectCCLSelectionDimension() << std::endl    
      << "ObjectCCLSelectionIgnoreSingleCCLFlag = " << this->GetObjectCCLSelectionIgnoreSingleCCLFlag() << std::endl    
-     << "IgnoreEmptySliceObjectFlag = " << this->GetIgnoreEmptySliceObjectFlag() << std::endl;    
+     << "IgnoreEmptySliceObjectFlag = " << this->GetIgnoreEmptySliceObjectFlag() << std::endl
+     << "(RP) FastFlag              = " << this->GetFastFlag() << std::endl
+     << "(RP) Radius                = " << this->GetRadius() << std::endl
+     << "(RP) K1                    = " << this->GetK1() << std::endl;
 }
 //--------------------------------------------------------------------
 
@@ -179,6 +184,13 @@ GenerateOutputInformation()
     m_working_object = clitk::ResizeImageLike<ImageType>(m_working_object, 
                                                          m_working_input, 
                                                          this->GetObjectBackgroundValue());
+    
+    // Index can be negative in some cases, and lead to problem with
+    // some filter. So we correct it.
+    m_working_input = clitk::RemoveNegativeIndexFromRegion<ImageType>(m_working_input);
+    m_working_object = clitk::RemoveNegativeIndexFromRegion<ImageType>(m_working_object);
+
+    // End
     this->template StopCurrentStep<ImageType>(m_working_input);  
   }
   
@@ -221,13 +233,17 @@ GenerateOutputInformation()
 
   //--------------------------------------------------------------------
   // Perform slice by slice relative position
-  this->StartNewStep("Perform slice by slice relative position");
+  this->StartNewStep("Perform slice by slice relative position ("+toString(mInputSlices.size())+")");
   for(unsigned int i=0; i<mInputSlices.size(); i++) {
     
     // Count the number of CCL (allow to ignore empty slice)
     int nb=0;
     mObjectSlices[i] = LabelizeAndCountNumberOfObjects<SliceType>(mObjectSlices[i], 0, true, 1, nb);
 
+    if (GetVerboseSlicesFlag()) {
+      std::cout << "slice " << i << " nb = " << nb << std::endl;
+    }
+
     // If no object and empty slices and if we need the full fuzzy map, create a dummy one.
     if ((nb==0) && (this->GetFuzzyMapOnlyFlag())) {
       typename FloatSliceType::Pointer one = FloatSliceType::New();
@@ -281,17 +297,19 @@ GenerateOutputInformation()
         // Relative position
         typedef clitk::AddRelativePositionConstraintToLabelImageFilter<SliceType> RelPosFilterType;
         typename RelPosFilterType::Pointer relPosFilter = RelPosFilterType::New();
-
         relPosFilter->VerboseStepFlagOff();
+        if (GetVerboseSlicesFlag()) {
+          std::cout << "Slice " << i << std::endl;
+          relPosFilter->VerboseStepFlagOn();
+          //relPosFilter->WriteStepFlagOn();
+        }
         relPosFilter->WriteStepFlagOff();
         // relPosFilter->VerboseMemoryFlagOn();
-        relPosFilter->SetCurrentStepBaseId(this->GetCurrentStepId()+"-"+toString(i));
-        
+        relPosFilter->SetCurrentStepBaseId(this->GetCurrentStepId()+"-"+toString(i));        
         relPosFilter->SetBackgroundValue(this->GetBackgroundValue());
         relPosFilter->SetInput(mInputSlices[i]); 
         relPosFilter->SetInputObject(mObjectSlices[i]); 
-        relPosFilter->SetRemoveObjectFlag(this->GetRemoveObjectFlag());
-        
+        relPosFilter->SetRemoveObjectFlag(this->GetRemoveObjectFlag());        
         // This flag (InverseOrientation) *must* be set before
         // AddOrientation because AddOrientation can change it.
         relPosFilter->SetInverseOrientationFlag(this->GetInverseOrientationFlag());
@@ -303,11 +321,13 @@ GenerateOutputInformation()
         relPosFilter->SetFuzzyThreshold(this->GetFuzzyThreshold());
         relPosFilter->AutoCropFlagOff(); // important ! because we join the slices after this loop
         relPosFilter->SetCombineWithOrFlag(this->GetCombineWithOrFlag()); 
-
         // should we stop after fuzzy map ?
         relPosFilter->SetFuzzyMapOnlyFlag(this->GetFuzzyMapOnlyFlag());
-        //        relPosFilter->SetComputeFuzzyMapFlag(this->GetComputeFuzzyMapFlag());
-      
+        //        relPosFilter->SetComputeFuzzyMapFlag(this->GetComputeFuzzyMapFlag());      
+        relPosFilter->SetFastFlag(this->GetFastFlag());
+        relPosFilter->SetRadius(this->GetRadius());
+        relPosFilter->SetK1(this->GetK1());
+
         // Go !
         relPosFilter->Update();