20 #include <itkBinaryFunctorImageFilter.h> 21 #include <itkImageRegionConstIterator.h> 23 #include "itkCastImageFilter.h" 29 template<
class TInput,
class TOutput>
30 class RangeBasedMasking
33 RangeBasedMasking() {};
34 ~RangeBasedMasking() {};
35 bool operator!=(
const RangeBasedMasking &)
const 39 bool operator==(
const RangeBasedMasking & other)
const 41 return !(*
this != other);
43 inline TOutput operator()(
const TInput & A,
const TOutput & B)
const 45 unsigned short erg = B;
46 if (lowerLimitOn && (A < lowerLimit))
50 if (upperLimitOn && (upperLimit < A))
57 bool lowerLimitOn =
false;
58 bool upperLimitOn =
false;
59 double lowerLimit = 0;
60 double upperLimit = 1;
67 template<
typename TPixel,
unsigned int VImageDimension>
70 typedef itk::Image<TPixel, VImageDimension>
ImageType;
71 typedef itk::Image<unsigned short, VImageDimension>
MaskImageType;
72 typedef itk::BinaryFunctorImageFilter< ImageType, MaskImageType, MaskImageType, mitk::Functor::RangeBasedMasking<TPixel, unsigned short> > DefaultFilterType;
74 typename MaskImageType::Pointer itkMask = MaskImageType::New();
77 typename DefaultFilterType::Pointer filter = DefaultFilterType::New();
78 filter->SetInput1(image);
79 filter->SetInput2(itkMask);
80 filter->GetFunctor().lowerLimitOn = lowerLimitOn;
81 filter->GetFunctor().upperLimitOn = upperLimitOn;
82 filter->GetFunctor().lowerLimit = lowerLimit;
83 filter->GetFunctor().upperLimit = upperLimit;
97 template<
typename TPixel,
unsigned int VImageDimension>
100 typedef itk::Image<TPixel, VImageDimension>
ImageType;
101 typedef itk::Image<unsigned short, VImageDimension>
MaskImageType;
103 typename MaskImageType::Pointer itkMask = MaskImageType::New();
106 itk::ImageRegionConstIterator<ImageType> image_iter(image, image->GetLargestPossibleRegion());
107 itk::ImageRegionConstIterator<MaskImageType> mask_iter(itkMask, itkMask->GetLargestPossibleRegion());
109 unsigned int number_of_voxels = 0;
110 while (!image_iter.IsAtEnd())
112 if (mask_iter.Get() > 0)
114 mean += image_iter.Get();
115 std += image_iter.Get() * image_iter.Get();
122 mean /= number_of_voxels;
123 std /= number_of_voxels;
static Image::Pointer RangeBasedMasking(Image::Pointer &image, Image::Pointer &mask, bool lowerLimitOn=false, double lowerLimit=0, bool upperLimitOn=false, double upperLimit=1)
Limits a Mask to a given Range.
MITKCORE_EXPORT bool operator!=(const InteractionEvent &a, const InteractionEvent &b)
itk::Image< unsigned char, 3 > ImageType
static void CalculateMeanAndStd(itk::Image< TPixel, VImageDimension > *image, mitk::Image::Pointer &mask, double &mean, double &std)
DataCollection - Class to facilitate loading/accessing structured data.
#define AccessByItk_n(mitkImage, itkImageTypeFunction, va_tuple)
Access a MITK image by an ITK image with one or more parameters.
MITKCORE_EXPORT bool operator==(const InteractionEvent &a, const InteractionEvent &b)
static void ExecuteRangeBasedMasking(itk::Image< TPixel, VImageDimension > *image, mitk::Image::Pointer &mask, bool lowerLimitOn, double lowerLimit, bool upperLimitOn, double upperLimit, mitk::Image::Pointer &resultImage)
itk::Image< unsigned char, 3 > MaskImageType
mitk::Image::Pointer image
static Image::Pointer MaskOutlierFiltering(Image::Pointer &image, Image::Pointer &mask)
Removes outlier from a mask.
void CastToMitkImage(const itk::SmartPointer< ItkOutputImageType > &itkimage, itk::SmartPointer< mitk::Image > &mitkoutputimage)
Cast an itk::Image (with a specific type) to an mitk::Image.
void MITKCORE_EXPORT CastToItkImage(const mitk::Image *mitkImage, itk::SmartPointer< ItkOutputImageType > &itkOutputImage)
Cast an mitk::Image to an itk::Image with a specific type.
mitk::Image::Pointer mask