]> Creatis software - clitk.git/blobdiff - segmentation/clitkExtractLungGenericFilter.txx
Debug RTStruct conversion with empty struc
[clitk.git] / segmentation / clitkExtractLungGenericFilter.txx
index 74317ed55f03f360edc78ccfb9516bdc77835454..01455c84c3ba65d77ecb811da8e8a8afa442e029 100644 (file)
@@ -3,7 +3,7 @@
 
   Authors belong to: 
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
@@ -14,7 +14,7 @@
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-  ======================================================================-====*/
+  ===========================================================================**/
 
 #ifndef CLITKEXTRACTLUNGSGENERICFILTER_TXX
 #define CLITKEXTRACTLUNGSGENERICFILTER_TXX
@@ -51,12 +51,74 @@ template<class ArgsInfoType>
 void clitk::ExtractLungGenericFilter<ArgsInfoType>::SetArgsInfo(const ArgsInfoType & a) 
 {
   mArgsInfo=a;
-  SetIOVerbose(mArgsInfo.verbose_flag);
+  this->SetIOVerbose(mArgsInfo.verbose_flag);
   if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes();
-  if (mArgsInfo.input_given)   AddInputFilename(mArgsInfo.input_arg);
-  if (mArgsInfo.patient_given) AddInputFilename(mArgsInfo.patient_arg);
-  if (mArgsInfo.output_given)  AddOutputFilename(mArgsInfo.output_arg);
-  if (mArgsInfo.outputTrachea_given)  AddOutputFilename(mArgsInfo.outputTrachea_arg);
+  if (mArgsInfo.input_given)   this->AddInputFilename(mArgsInfo.input_arg);
+  if (mArgsInfo.output_given)  this->AddOutputFilename(mArgsInfo.output_arg);
+  if (mArgsInfo.outputTrachea_given)  this->AddOutputFilename(mArgsInfo.outputTrachea_arg);
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<class ArgsInfoType>
+template<class FilterType>
+void clitk::ExtractLungGenericFilter<ArgsInfoType>::
+SetOptionsFromArgsInfoToFilter(FilterType * f) 
+{
+  //f->SetVerboseFlag(mArgsInfo.verbose_flag);
+  f->SetVerboseOptionFlag(mArgsInfo.verboseOption_flag);
+  f->SetVerboseStepFlag(mArgsInfo.verboseStep_flag);
+  f->SetWriteStepFlag(mArgsInfo.writeStep_flag);
+  f->SetVerboseWarningFlag(!mArgsInfo.verboseWarningOff_flag);
+  f->SetVerboseMemoryFlag(mArgsInfo.verboseMemory_flag);
+
+  if (mArgsInfo.afdb_given)
+    f->SetAFDBFilename(mArgsInfo.afdb_arg);
+  f->SetOutputLungFilename(mArgsInfo.output_arg);
+  f->SetOutputTracheaFilename(mArgsInfo.outputTrachea_arg);
+  
+  f->SetUpperThreshold(mArgsInfo.upper_arg);
+  f->SetLowerThreshold(mArgsInfo.lower_arg);
+  
+  f->SetNumberOfSlicesToSkipBeforeSearchingSeed(mArgsInfo.skipslices_arg);
+
+  f->SetTracheaVolumeMustBeCheckedFlag(!mArgsInfo.doNotCheckTracheaVolume_flag);
+  f->SetVerboseRegionGrowingFlag(mArgsInfo.verboseRG_flag);
+
+  f->SetUpperThresholdForTrachea(mArgsInfo.upperThresholdForTrachea_arg);
+  f->SetMultiplierForTrachea(mArgsInfo.multiplierForTrachea_arg);
+  f->SetThresholdStepSizeForTrachea(mArgsInfo.thresholdStepSizeForTrachea_arg);
+  f->SetTracheaSeedAlgorithm(mArgsInfo.type_arg);
+  f->SetNumSlices(mArgsInfo.numSlices_arg);
+  f->SetMaxElongation(mArgsInfo.maxElongation_arg);
+  f->SetSeedPreProcessingThreshold(mArgsInfo.seedPreProcessingThreshold_arg);
+
+  typename FilterType::InputImagePointType s;
+  if (mArgsInfo.seed_given) {
+    ConvertOptionMacro(mArgsInfo.seed, s, 3, false);
+    f->AddSeed(s);
+  }
+
+  f->SetMinimalComponentSize(mArgsInfo.minSize_arg);
+  f->SetNumberOfHistogramBins(mArgsInfo.bins_arg);
+  f->SetRadiusForTrachea(mArgsInfo.radius_arg);
+  
+  f->SetOpenCloseFlag(mArgsInfo.openclose_flag);
+  f->SetOpenCloseRadius(mArgsInfo.opencloseRadius_arg);
+  f->SetAutoCrop(!mArgsInfo.noAutoCrop_flag);
+  
+  if (mArgsInfo.doNotFillHoles_given)
+    f->SetFillHolesFlag(false);
+  else
+    f->SetFillHolesFlag(true);
+
+  f->SetRemoveSmallLabelBeforeSeparationFlag(mArgsInfo.removeSmallLabel_flag);
+
+  if (mArgsInfo.doNotSeparateLungs_given)
+    f->SetSeparateLungsFlag(false);
+  else
+    f->SetSeparateLungsFlag(true);
 }
 //--------------------------------------------------------------------
 
@@ -69,31 +131,28 @@ template<class ImageType>
 void clitk::ExtractLungGenericFilter<ArgsInfoType>::UpdateWithInputImageType() 
 { 
   // Mask & output image type
-  typedef itk::Image<uchar, ImageType::ImageDimension> OutputImageType;
   typedef itk::Image<uchar, ImageType::ImageDimension> MaskImageType;
 
   // Reading input
   typename ImageType::Pointer input = this->template GetInput<ImageType>(0);
-  typename MaskImageType::Pointer patient = this->template GetInput<MaskImageType>(1);
 
   // Create filter
-  typedef clitk::ExtractLungFilter<ImageType, MaskImageType> FilterType;
+  typedef clitk::ExtractLungFilter<ImageType> FilterType;
   typename FilterType::Pointer filter = FilterType::New();
 
   // Set the filter (needed for example for threaded monitoring)
   this->SetFilterBase(filter);
     
   // Set global Options 
-  filter->SetArgsInfo(mArgsInfo);
   filter->SetInput(input);
-  filter->SetInputPatientMask(patient, mArgsInfo.patientBG_arg);
+  SetOptionsFromArgsInfoToFilter<FilterType>(filter);
 
   // Go !
   filter->Update();
   
   // Write/Save results
-  typename OutputImageType::Pointer output = filter->GetOutput();
-  this->template SetNextOutput<OutputImageType>(output); 
+  typename MaskImageType::Pointer output = filter->GetOutput();
+  this->template SetNextOutput<MaskImageType>(output); 
   this->template SetNextOutput<typename FilterType::MaskImageType>(filter->GetTracheaImage()); 
 }
 //--------------------------------------------------------------------