From: dsarrut Date: Tue, 7 Jun 2011 05:27:34 +0000 (+0200) Subject: Merge branch 'master' of /home/dsarrut/clitk3.server X-Git-Tag: v1.3.0~321^2~3^2~5 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=f4836557301d6fafe12dd9f767f911796992f855;hp=8e55faf6d71d39430ea3c9e93a54d2f0399371d9;p=clitk.git Merge branch 'master' of /home/dsarrut/clitk3.server --- diff --git a/itk/clitkSegmentationUtils.h b/itk/clitkSegmentationUtils.h index 4d71298..7ae1c77 100644 --- a/itk/clitkSegmentationUtils.h +++ b/itk/clitkSegmentationUtils.h @@ -204,6 +204,11 @@ namespace clitk { //-------------------------------------------------------------------- + template + typename itk::LabelMap< itk::ShapeLabelObject >::Pointer + ComputeLabelMap(const ImageType * image, + typename ImageType::PixelType BG, + bool computePerimeterFlag=false); template void ComputeCentroids(const ImageType * image, @@ -407,6 +412,13 @@ namespace clitk { //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + template + typename ImageType::Pointer + Clone(const ImageType * input); + //-------------------------------------------------------------------- + + } #include "clitkSegmentationUtils.txx" diff --git a/itk/clitkSegmentationUtils.txx b/itk/clitkSegmentationUtils.txx index f7b897e..4990b24 100644 --- a/itk/clitkSegmentationUtils.txx +++ b/itk/clitkSegmentationUtils.txx @@ -33,6 +33,7 @@ #include #include #include +#include namespace clitk { @@ -519,6 +520,30 @@ namespace clitk { //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + template + typename itk::LabelMap< itk::ShapeLabelObject >::Pointer + ComputeLabelMap(const ImageType * image, + typename ImageType::PixelType BG, + bool computePerimeterFlag) + { + static const unsigned int Dim = ImageType::ImageDimension; + typedef itk::ShapeLabelObject< LabelType, Dim > LabelObjectType; + typedef itk::LabelMap< LabelObjectType > LabelMapType; + typedef itk::LabelImageToLabelMapFilter ImageToMapFilterType; + typename ImageToMapFilterType::Pointer imageToLabelFilter = ImageToMapFilterType::New(); + typedef itk::ShapeLabelMapFilter ShapeFilterType; + typename ShapeFilterType::Pointer statFilter = ShapeFilterType::New(); + imageToLabelFilter->SetBackgroundValue(BG); + imageToLabelFilter->SetInput(image); + statFilter->SetInput(imageToLabelFilter->GetOutput()); + statFilter->SetComputePerimeter(computePerimeterFlag); + statFilter->Update(); + return statFilter->GetOutput(); + } + //-------------------------------------------------------------------- + + //-------------------------------------------------------------------- template void @@ -1076,5 +1101,18 @@ namespace clitk { //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + template + typename ImageType::Pointer + Clone(const ImageType * input) { + typedef itk::ImageDuplicator DuplicatorType; + typename DuplicatorType::Pointer duplicator = DuplicatorType::New(); + duplicator->SetInputImage(input); + duplicator->Update(); + return duplicator->GetOutput(); + } + //-------------------------------------------------------------------- + + } // end of namespace diff --git a/segmentation/clitkBool.cxx b/segmentation/clitkBool.cxx new file mode 100644 index 0000000..dbb313c --- /dev/null +++ b/segmentation/clitkBool.cxx @@ -0,0 +1,45 @@ +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +======================================================================-====*/ + +// clitk +#include "clitkBool_ggo.h" +#include "clitkBooleanOperatorLabelImageGenericFilter.h" + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) +{ + + // Init command line + GGO(clitkBool, args_info); + CLITK_INIT; + + // Filter + typedef clitk::BooleanOperatorLabelImageGenericFilter FilterType; + FilterType::Pointer filter = FilterType::New(); + + filter->SetArgsInfo(args_info); + + try { + filter->Update(); + } catch(std::runtime_error e) { + std::cout << e.what() << std::endl; + } + + return EXIT_SUCCESS; +} // This is the end, my friend +//-------------------------------------------------------------------- diff --git a/segmentation/clitkBool.ggo b/segmentation/clitkBool.ggo new file mode 100644 index 0000000..ede9646 --- /dev/null +++ b/segmentation/clitkBool.ggo @@ -0,0 +1,14 @@ +#File clitkExtractMediastinalVessels.ggo +package "clitkExtractMediastinalVessels" +version "1.0" +purpose "Extract MediastinalVessels" + +option "config" - "Config file" string no +option "imagetypes" - "Display allowed image types" flag off +option "verbose" v "Verbose" flag off + +option "input" i "Input mask 1" string yes +option "input2" j "Input mask 2" string yes +option "output" o "Output filename" string yes + +option "type" t "Bool type : " int default="1" no diff --git a/segmentation/clitkBooleanOperatorLabelImageGenericFilter.h b/segmentation/clitkBooleanOperatorLabelImageGenericFilter.h new file mode 100644 index 0000000..acd69ff --- /dev/null +++ b/segmentation/clitkBooleanOperatorLabelImageGenericFilter.h @@ -0,0 +1,80 @@ +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +======================================================================-====*/ + +#ifndef CLITKBOOLEANOPERATORLABELIMAGEGENERICFILTER_H +#define CLITKBOOLEANOPERATORLABELIMAGEGENERICFILTER_H + +#include "clitkIO.h" +#include "clitkImageToImageGenericFilter.h" +#include "clitkBooleanOperatorLabelImageFilter.h" + +//-------------------------------------------------------------------- +namespace clitk +{ + + template + class ITK_EXPORT BooleanOperatorLabelImageGenericFilter: + public ImageToImageGenericFilter > + { + + public: + //-------------------------------------------------------------------- + BooleanOperatorLabelImageGenericFilter(); + + //-------------------------------------------------------------------- + typedef ImageToImageGenericFilter > Superclass; + typedef BooleanOperatorLabelImageGenericFilter Self; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + //-------------------------------------------------------------------- + itkNewMacro(Self); + itkTypeMacro(BooleanOperatorLabelImageGenericFilter, LightObject); + + //-------------------------------------------------------------------- + // Options for the GenericFilter + void SetArgsInfo(const ArgsInfoType & a); + + //-------------------------------------------------------------------- + // Options for the Filter + template + void SetOptionsFromArgsInfoToFilter(FilterType * f) ; + + //-------------------------------------------------------------------- + // Main function called each time the filter is updated + template + void UpdateWithInputImageType(); + + protected: + template void InitializeImageType(); + ArgsInfoType mArgsInfo; + + private: + BooleanOperatorLabelImageGenericFilter(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + + }; // end class + //-------------------------------------------------------------------- + +} // end namespace clitk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkBooleanOperatorLabelImageGenericFilter.txx" +#endif + +#endif // #define CLITKBOOLEANOPERATORLABELIMAGEGENERICFILTER_H diff --git a/segmentation/clitkBooleanOperatorLabelImageGenericFilter.txx b/segmentation/clitkBooleanOperatorLabelImageGenericFilter.txx new file mode 100644 index 0000000..0c07b67 --- /dev/null +++ b/segmentation/clitkBooleanOperatorLabelImageGenericFilter.txx @@ -0,0 +1,104 @@ +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html + ======================================================================-====*/ + +#ifndef CLITKBOOLEANOPERATORLABELIMAGEGENERICFILTER_TXX +#define CLITKBOOLEANOPERATORLABELIMAGEGENERICFILTER_TXX + +#include "clitkImageCommon.h" + +//-------------------------------------------------------------------- +template +clitk::BooleanOperatorLabelImageGenericFilter::BooleanOperatorLabelImageGenericFilter(): + ImageToImageGenericFilter("BooleanOperatorLabelImage") +{ + // Default values + cmdline_parser_clitkBool_init(&mArgsInfo); + InitializeImageType<3>(); // Only for 3D images +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +template +void clitk::BooleanOperatorLabelImageGenericFilter::InitializeImageType() +{ + ADD_IMAGE_TYPE(Dim, uchar); // Can add float later +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +void clitk::BooleanOperatorLabelImageGenericFilter::SetArgsInfo(const ArgsInfoType & a) +{ + mArgsInfo=a; + SetIOVerbose(mArgsInfo.verbose_flag); + if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes(); + if (mArgsInfo.input_given) AddInputFilename(mArgsInfo.input_arg); + if (mArgsInfo.input2_given) AddInputFilename(mArgsInfo.input2_arg); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +template +void +clitk::BooleanOperatorLabelImageGenericFilter:: +SetOptionsFromArgsInfoToFilter(FilterType * f) +{ + // Operation type + f->SetOperationType(typename FilterType::OperationTypeEnumeration(mArgsInfo.type_arg)); + + // Output filename + this->AddOutputFilename(mArgsInfo.output_arg); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +// Update with the number of dimensions and the pixeltype +//-------------------------------------------------------------------- +template +template +void clitk::BooleanOperatorLabelImageGenericFilter::UpdateWithInputImageType() +{ + // Reading input + typename ImageType::Pointer input1 = this->template GetInput(0); + typename ImageType::Pointer input2 = this->template GetInput(1); + + // Create filter + typedef clitk::BooleanOperatorLabelImageFilter FilterType; + typename FilterType::Pointer filter = FilterType::New(); + + // Set global Options + filter->SetInput1(input1); + filter->SetInput2(input2); + SetOptionsFromArgsInfoToFilter(filter); + + // Go ! + filter->Update(); + + // Write/Save results + typename ImageType::Pointer output = filter->GetOutput(); + this->template SetNextOutput(output); +} +//-------------------------------------------------------------------- + +#endif //#define CLITKBOOLEANOPERATORLABELIMAGEGENERICFILTER_TXX