X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=segmentation%2FclitkExtractLungGenericFilter.txx;h=b9a94d86aeef3b3b273ff9176786eb5ba214bc50;hb=d7f456d86ca398a89ccf9de43ab68a2b50b8ca1f;hp=2bc8af880bc6fe3abc4ab4a017698aed6df55115;hpb=c8d53d40ac8f5f83843193c51ac1787a8f38ee90;p=clitk.git diff --git a/segmentation/clitkExtractLungGenericFilter.txx b/segmentation/clitkExtractLungGenericFilter.txx index 2bc8af8..b9a94d8 100644 --- a/segmentation/clitkExtractLungGenericFilter.txx +++ b/segmentation/clitkExtractLungGenericFilter.txx @@ -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 @@ -26,6 +26,7 @@ template clitk::ExtractLungGenericFilter::ExtractLungGenericFilter(): ImageToImageGenericFilter("ExtractLung") { + this->SetFilterBase(NULL); // Default values cmdline_parser_clitkExtractLung_init(&mArgsInfo); InitializeImageType<3>(); @@ -50,12 +51,74 @@ template void clitk::ExtractLungGenericFilter::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 +template +void clitk::ExtractLungGenericFilter:: +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::InputImageIndexType 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); } //-------------------------------------------------------------------- @@ -68,35 +131,28 @@ template void clitk::ExtractLungGenericFilter::UpdateWithInputImageType() { // Mask & output image type - typedef itk::Image OutputImageType; typedef itk::Image MaskImageType; // Reading input typename ImageType::Pointer input = this->template GetInput(0); - typename MaskImageType::Pointer patient = this->template GetInput(1); // Create filter - typedef clitk::ExtractLungFilter FilterType; + typedef clitk::ExtractLungFilter 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(filter); // Go ! filter->Update(); - // Check if error - if (filter->HasError()) { - SetLastError(filter->GetLastError()); - // No output - return; - } - // Write/Save results - typename OutputImageType::Pointer output = filter->GetOutput(); - this->template SetNextOutput(output); + typename MaskImageType::Pointer output = filter->GetOutput(); + this->template SetNextOutput(output); this->template SetNextOutput(filter->GetTracheaImage()); } //--------------------------------------------------------------------