-
- //-----------------------------------------------------------
- // Constructor
- //-----------------------------------------------------------
- CropImageGenericFilter::CropImageGenericFilter():
- ImageToImageGenericFilter<Self>("CropImage")
- {
- cmdline_parser_clitkCropImage_init(&mArgsInfo);
- InitializeImageType<2>();
- InitializeImageType<3>();
- InitializeImageType<4>();
- }
-
- //--------------------------------------------------------------------
- template<unsigned int Dim>
- void clitk::CropImageGenericFilter::InitializeImageType()
- {
- ADD_DEFAULT_IMAGE_TYPES(Dim);
- //ADD_IMAGE_TYPE(Dim, uchar);
- //ADD_IMAGE_TYPE(Dim, short);
- // ADD_IMAGE_TYPE(Dim, uint);
- // ADD_IMAGE_TYPE(Dim, ulong);
- // ADD_IMAGE_TYPE(Dim, int);
- // ADD_IMAGE_TYPE(Dim, float);
- }
- //--------------------------------------------------------------------
-
- //--------------------------------------------------------------------
- void clitk::CropImageGenericFilter::SetArgsInfo(const args_info_type& a)
- {
- mArgsInfo=a;
- SetIOVerbose(mArgsInfo.verbose_flag);
- if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes();
- if (mArgsInfo.input_given) AddInputFilename(mArgsInfo.input_arg);
- if (mArgsInfo.output_given) AddOutputFilename(mArgsInfo.output_arg);
+//--------------------------------------------------------------------
+void clitk::CropImageGenericFilter::SetArgsInfo(const args_info_type& a)
+{
+ mArgsInfo=a;
+ SetIOVerbose(mArgsInfo.verbose_flag);
+ if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes();
+ if (mArgsInfo.input_given) AddInputFilename(mArgsInfo.input_arg);
+ if (mArgsInfo.output_given) AddOutputFilename(mArgsInfo.output_arg);
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+template <class ImageType>
+typename clitk::CropImageGenericFilter::AutoCrop<ImageType>::ImagePointer
+clitk::CropImageGenericFilter::AutoCrop<ImageType>::Do(args_info_type &argsInfo, ImagePointer input)
+{
+ static const unsigned int PixelDimension = itk::PixelTraits<typename ImageType::PixelType>::Dimension;
+ return this->Do(argsInfo, input, static_cast< PixelDimType<PixelDimension> *>(NULL) );
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+template <class ImageType>
+template<unsigned int Dim>
+typename clitk::CropImageGenericFilter::AutoCrop<ImageType>::ImagePointer
+clitk::CropImageGenericFilter::AutoCrop<ImageType>::Do(args_info_type &, ImagePointer, PixelDimType<Dim> *)
+{
+ clitkExceptionMacro("Autocrop is not implemented for vector fields");
+ return ITK_NULLPTR;
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+template <class ImageType>
+typename clitk::CropImageGenericFilter::AutoCrop<ImageType>::ImagePointer
+clitk::CropImageGenericFilter::AutoCrop<ImageType>::Do(args_info_type &argsInfo, ImagePointer input, PixelDimType<1> *)
+{
+ if (argsInfo.boundingBox_given)
+ clitkExceptionMacro("Do not use --BG and --boundingBox at the same time");
+ if (argsInfo.lower_given)
+ clitkExceptionMacro("Do not use --BG and --lower at the same time");
+ if (argsInfo.upper_given)
+ clitkExceptionMacro("Do not use --BG and --upper at the same time");
+ typedef clitk::AutoCropFilter<ImageType> FilterType;
+ typename FilterType::Pointer filter = FilterType::New();
+ filter->SetInput(input);
+ filter->SetBackgroundValue(argsInfo.BG_arg);
+ filter->Update();
+ return filter->GetOutput();
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+// Update with the number of dimensions and the pixeltype
+//--------------------------------------------------------------------
+template<class ImageType>
+void clitk::CropImageGenericFilter::UpdateWithInputImageType()
+{
+ // Reading input
+ typename ImageType::Pointer input = this->template GetInput<ImageType>(0);
+ typename ImageType::RegionType input_region = input->GetLargestPossibleRegion();
+
+ // Check options
+ if (mArgsInfo.BG_given && mArgsInfo.like_given)
+ clitkExceptionMacro("Do not use --BG and --like at the same time");
+ if (mArgsInfo.updateOrigin_flag && !mArgsInfo.like_given)
+ clitkExceptionMacro("Use --updateOrigin with --like");
+
+ // Prepare output
+ typename ImageType::Pointer output;
+
+ // ------------------------------------------------
+ if (mArgsInfo.BG_given) { // AutoCrop filter
+ AutoCrop<ImageType> autoCrop;
+ output = autoCrop.Do(mArgsInfo, input);