X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=segmentation%2FclitkExtractBonesFilter.txx;h=ef3f9445ad171b4970d2aa8faf4cae1d87231daf;hb=6e16222234a90c6079a8f4696c92de7349a496bb;hp=db29cc727f2d18774e4d36df1f36fe91e660e4b3;hpb=e008d74b0ecdc4ca2eaae8c429901a78f9ef5c31;p=clitk.git diff --git a/segmentation/clitkExtractBonesFilter.txx b/segmentation/clitkExtractBonesFilter.txx index db29cc7..ef3f944 100644 --- a/segmentation/clitkExtractBonesFilter.txx +++ b/segmentation/clitkExtractBonesFilter.txx @@ -22,7 +22,7 @@ // clitk #include "clitkImageCommon.h" #include "clitkSetBackgroundImageFilter.h" -#include "clitkSegmentationFunctions.h" +#include "clitkSegmentationUtils.h" #include "clitkAutoCropFilter.h" // itk @@ -30,6 +30,7 @@ #include "itkConnectedComponentImageFilter.h" #include "itkRelabelComponentImageFilter.h" #include "itkNeighborhoodConnectedImageFilter.h" +#include "itkCurvatureAnisotropicDiffusionImageFilter.h" //-------------------------------------------------------------------- template @@ -42,6 +43,12 @@ ExtractBonesFilter(): this->SetNumberOfRequiredInputs(1); SetBackgroundValue(0); // Must be zero SetForegroundValue(1); + SetInitialSmoothing(false); + + SetSmoothingConductanceParameter(3.0); + SetSmoothingNumberOfIterations(5); + SetSmoothingTimeStep(0.0625); + SetSmoothingUseImageSpacing(false); SetMinimalComponentSize(100); SetUpperThreshold1(1500); @@ -81,6 +88,12 @@ SetArgsInfo(ArgsInfoType mArgsInfo) SetVerboseStep_GGO(mArgsInfo); SetWriteStep_GGO(mArgsInfo); SetVerboseWarningOff_GGO(mArgsInfo); + + SetInitialSmoothing_GGO(mArgsInfo); + SetSmoothingConductanceParameter_GGO(mArgsInfo); + SetSmoothingNumberOfIterations_GGO(mArgsInfo); + SetSmoothingTimeStep_GGO(mArgsInfo); + SetSmoothingUseImageSpacing_GGO(mArgsInfo); SetMinimalComponentSize_GGO(mArgsInfo); SetUpperThreshold1_GGO(mArgsInfo); @@ -117,17 +130,36 @@ GenerateOutputInformation() { typedef itk::CastImageFilter CastImageFilterType; typedef itk::ImageFileWriter WriterType; + //--------------------------------- + // Smoothing [Optional] + //--------------------------------- + if (GetInitialSmoothing()) { + StartNewStep("Initial Smoothing"); + typedef itk::CurvatureAnisotropicDiffusionImageFilter FilterType; + typename FilterType::Pointer df = FilterType::New(); + df->SetConductanceParameter(GetSmoothingConductanceParameter()); + df->SetNumberOfIterations(GetSmoothingNumberOfIterations()); + df->SetTimeStep(GetSmoothingTimeStep()); + df->SetUseImageSpacing(GetSmoothingUseImageSpacing()); + df->SetInput(input); + df->Update(); + filtered_input = df->GetOutput(); + StopCurrentStep(filtered_input); + } + else { + filtered_input = input; + } + //-------------------------------------------------------------------- //-------------------------------------------------------------------- StartNewStep("Initial Labeling"); - typename InternalImageType::Pointer firstLabelImage; //--------------------------------- // Binarize the image //--------------------------------- typename InputBinarizeFilterType::Pointer binarizeFilter=InputBinarizeFilterType::New(); - binarizeFilter->SetInput(input); + binarizeFilter->SetInput(filtered_input); binarizeFilter->SetLowerThreshold(GetLowerThreshold1()); binarizeFilter->SetUpperThreshold(GetUpperThreshold1()); binarizeFilter->SetInsideValue(this->GetForegroundValue()); @@ -160,6 +192,7 @@ GenerateOutputInformation() { binarizeFilter2->Update(); firstLabelImage = binarizeFilter2->GetOutput(); + StopCurrentStep(firstLabelImage); //-------------------------------------------------------------------- //-------------------------------------------------------------------- @@ -179,7 +212,7 @@ GenerateOutputInformation() { neighborhoodConnectedImageFilter->SetUpper(GetUpperThreshold2()); neighborhoodConnectedImageFilter->SetReplaceValue(this->GetForegroundValue()); neighborhoodConnectedImageFilter->SetRadius(GetRadius2()); - neighborhoodConnectedImageFilter->SetInput(input); + neighborhoodConnectedImageFilter->SetInput(filtered_input); // Seeds from label image typedef itk::ImageRegionIteratorWithIndex IteratorType; @@ -209,7 +242,7 @@ GenerateOutputInformation() { //-------------------------------------------------------------------- //-------------------------------------------------------------------- - StartNewStep("Combine de images"); + StartNewStep("Combine the images"); typedef clitk::SetBackgroundImageFilter SetBackgroundImageFilterType; typename SetBackgroundImageFilterType::Pointer setBackgroundFilter=SetBackgroundImageFilterType::New();