16 #include <Eigen/Dense> 18 #include <itkImageRegionIterator.h> 25 #include <itkConnectedComponentImageFilter.h> 144 static void LocalHistogram(
mitk::Image::Pointer image, std::vector<mitk::Image::Pointer> &out,
int Bins,
int NeighbourhoodSize);
152 template<
typename TMatrixElementType>
155 itk::Image<unsigned int, 3>::Pointer itkMask;
158 typename itk::Image<TMatrixElementType, 3>::Pointer itk_img = itk::Image<TMatrixElementType, 3>::New();
159 itk_img->SetRegions(itkMask->GetLargestPossibleRegion());
160 itk_img->SetOrigin(itkMask->GetOrigin());
161 itk_img->SetSpacing(itkMask->GetSpacing());
162 itk_img->SetDirection(itkMask->GetDirection());
166 unsigned int n_numSamples = 0;
169 if(n_numSamples != matrix.rows())
170 MITK_ERROR <<
"Number of samples in matrix and number of points under the masks is not the same!";
172 auto mit = itk::ImageRegionConstIterator<itk::Image<unsigned int, 3> >(itkMask, itkMask->GetLargestPossibleRegion());
173 auto oit = itk::ImageRegionIterator<itk::Image<TMatrixElementType, 3> >(itk_img, itk_img->GetLargestPossibleRegion());
175 unsigned int current_row = 0;
176 while(!mit.IsAtEnd())
179 oit.Set(matrix(current_row++,0));
196 template<
typename TMatrixElementType>
199 itk::Image<unsigned int, 3>::Pointer current_mask;
202 unsigned int n_numSamples = 0;
205 typename itk::Image<TMatrixElementType, 3>::Pointer current_img;
208 Eigen::Matrix<TMatrixElementType, Eigen::Dynamic, Eigen::Dynamic> out_matrix(n_numSamples,1);
210 auto mit = itk::ImageRegionConstIterator<itk::Image<unsigned int, 3> >(current_mask, current_mask->GetLargestPossibleRegion());
211 auto iit = itk::ImageRegionConstIterator<itk::Image<TMatrixElementType, 3> >(current_img,current_img->GetLargestPossibleRegion());
212 unsigned int current_row = 0;
213 while (!mit.IsAtEnd()) {
215 out_matrix(current_row++) = iit.Value();
318 template<
class TImageType>
319 static void itkCountVoxel( TImageType * image, std::map<unsigned int, unsigned int> & map)
321 auto it = itk::ImageRegionIterator< TImageType >(
image,image->GetLargestPossibleRegion());
324 if(map.find(it.Value()) == map.end())
331 template <
class TImageType>
332 static void itkCountVoxel(TImageType* image,
typename TImageType::PixelType label,
unsigned int & count )
334 itk::ImageRegionConstIterator<TImageType> inputIter(image, image->GetLargestPossibleRegion());
335 while(!inputIter.IsAtEnd())
337 if(inputIter.Value() == label) ++count;
342 template<
typename TImageType>
343 static inline void itkCountVoxel(TImageType * mask,
unsigned int & n_numSamples)
345 auto mit = itk::ImageRegionConstIterator<TImageType>(
mask, mask->GetLargestPossibleRegion());
346 while (!mit.IsAtEnd())
354 template <
class TImageType1,
class TImageType2>
355 static void itkSampleLabel(TImageType1* image, TImageType2* output,
double acceptrate,
unsigned int label)
357 std::srand (time(
nullptr));
359 itk::ImageRegionConstIterator< TImageType1 > inputIter(image, image->GetLargestPossibleRegion());
360 itk::ImageRegionIterator< TImageType2 > outputIter(output, output->GetLargestPossibleRegion());
362 while (!inputIter.IsAtEnd())
364 double r = (double)(rand()) / RAND_MAX;
365 if(inputIter.Get() == label && r < acceptrate)
366 outputIter.Set(label);
373 template <
class TImageType>
376 std::srand (time(
nullptr));
378 typename TImageType::Pointer itk_out = TImageType::New();
379 itk_out->SetRegions(image->GetLargestPossibleRegion());
380 itk_out->SetDirection(image->GetDirection());
381 itk_out->SetOrigin(image->GetOrigin());
382 itk_out->SetSpacing(image->GetSpacing());
384 itk_out->FillBuffer(0);
386 itk::ImageRegionConstIterator< TImageType > inputIter(image, image->GetLargestPossibleRegion());
387 itk::ImageRegionIterator< TImageType > outputIter(itk_out, itk_out->GetLargestPossibleRegion());
389 for(
unsigned int i = 0 ; i < n_samples_drawn ;)
391 double r = (double)(rand()) / RAND_MAX;
392 if(inputIter.Value() != 0 && r < 0.01 && outputIter.Value() == 0)
394 outputIter.Set(inputIter.Value());
400 if(inputIter.IsAtEnd())
402 inputIter.GoToBegin();
403 outputIter.GoToBegin();
413 template<
class TImageType>
416 template<
class TImageType>
419 template<
class TImageType>
422 template<
typename TImageType >
423 static void itkInsertLabel(TImageType * maskImage,
mitk::Image::Pointer & outimage,
unsigned int label)
426 typename TImageType::Pointer itk_out;
428 if(outimage.IsNull())
431 itk_out = TImageType::New();
432 itk_out->SetSpacing(maskImage->GetSpacing());
433 itk_out->SetDirection(maskImage->GetDirection());
434 itk_out->SetOrigin(maskImage->GetOrigin());
435 itk_out->SetRegions(maskImage->GetLargestPossibleRegion());
437 itk_out->FillBuffer(0);
443 itk::ImageRegionIterator<TImageType> oit(itk_out,itk_out->GetLargestPossibleRegion());
444 itk::ImageRegionConstIterator<TImageType> mit(maskImage,maskImage->GetLargestPossibleRegion());
446 while(!mit.IsAtEnd())
460 template<
typename TImageType >
461 static void itkGrabLabel(TImageType * image,
mitk::Image::Pointer & outimage,
unsigned int label)
463 typedef itk::Image<unsigned short, 3> TOutType;
464 TOutType::Pointer itk_out = TOutType::New();
465 itk_out->SetRegions(image->GetLargestPossibleRegion());
466 itk_out->SetDirection(image->GetDirection());
467 itk_out->SetOrigin(image->GetOrigin());
468 itk_out->SetSpacing(image->GetSpacing());
471 itk::ImageRegionConstIterator<TImageType> iit(image, image->GetLargestPossibleRegion());
472 itk::ImageRegionIterator<TOutType> oit(itk_out,itk_out->GetLargestPossibleRegion());
474 while(!iit.IsAtEnd())
476 if(iit.Value() ==
static_cast<typename TImageType::PixelType
>(label))
488 template<
class TImagetype>
489 static void itkMergeLabels(TImagetype * img,
const std::map<unsigned int, unsigned int> & map)
492 auto it = itk::ImageRegionIterator<TImagetype>(img,img->GetLargestPossibleRegion());
496 if(map.find(it.Value())!=map.end())
497 it.Set( map.at(it.Value()) );
503 template<
typename TImageType>
507 MaskImageType::Pointer itk_mask;
510 itk_mask = MaskImageType::New();
511 itk_mask->SetRegions(image->GetLargestPossibleRegion());
512 itk_mask->SetDirection(image->GetDirection());
513 itk_mask->SetOrigin(image->GetOrigin());
514 itk_mask->SetSpacing(image->GetSpacing());
515 itk_mask->Allocate();
516 itk_mask->FillBuffer(1);
521 typedef itk::ConnectedComponentImageFilter<TImageType, MaskImageType, MaskImageType > FilterType;
522 typename FilterType::Pointer cc_filter = FilterType::New();
523 cc_filter->SetMaskImage(itk_mask.GetPointer());
524 cc_filter->SetInput(image);
525 cc_filter->SetBackgroundValue(0);
528 num_components = cc_filter->GetObjectCount();
532 template<
typename TImageType >
535 template<
typename TImageType >
538 template <
class TImageType>
539 static void itkSumVoxelForLabel(TImageType* image,
const mitk::Image::Pointer & source ,
typename TImageType::PixelType label,
double & val );
541 template <
class TImageType>
542 static void itkSqSumVoxelForLabel(TImageType* image,
const mitk::Image::Pointer & source,
typename TImageType::PixelType label,
double & val );
544 template<
typename TStructuringElement>
547 template<
typename TImageType>
550 template<
typename TImageType>
553 template<
typename TImageType>
556 template<
typename TPixel,
unsigned int VDimension>
557 static void itkFillHolesBinary(itk::Image<TPixel, VDimension>* sourceImage,
mitk::Image::Pointer& resultImage);
559 template<
typename TImageType>
562 template<
class TImageType>
563 static void itkGaussianFilter(TImageType * image,
mitk::Image::Pointer & smoothed ,
double sigma);
565 template<
class TImageType>
566 static void itkDifferenceOfGaussianFilter(TImageType * image,
mitk::Image::Pointer & smoothed,
double sigma1,
double sigma2);
568 template<
typename TImageType>
569 static void itkProbabilityMap(
const TImageType * sourceImage,
double mean,
double std_dev,
mitk::Image::Pointer& resultImage);
571 template<
typename TPixel,
unsigned int VImageDimension>
572 static void itkHessianOfGaussianFilter(itk::Image<TPixel, VImageDimension>* itkImage,
double variance, std::vector<mitk::Image::Pointer> &out);
574 template<
typename TPixel,
unsigned int VImageDimension>
575 static void itkLaplacianOfGaussianFilter(itk::Image<TPixel, VImageDimension>* itkImage,
double variance,
mitk::Image::Pointer &output);
577 template<
typename TPixel,
unsigned int VImageDimension>
578 static void itkLocalHistograms(itk::Image<TPixel, VImageDimension>* itkImage, std::vector<mitk::Image::Pointer> &out,
int size,
int bins);
void LaplacianOfGaussianFilter(itk::Image< TPixel, VImageDimension > *itkImage, double variance, mitk::Image::Pointer &output)
MorphologicalDimensions
The MorphologicalDimensions enum.
static void itkSampleLabel(TImageType1 *image, TImageType2 *output, double acceptrate, unsigned int label)
DataCollection - Class to facilitate loading/accessing structured data.
void HessianOfGaussianFilter(itk::Image< TPixel, VImageDimension > *itkImage, double variance, std::vector< mitk::Image::Pointer > &out)
static mitk::Image::Pointer Transform(const Eigen::Matrix< TMatrixElementType, Eigen::Dynamic, Eigen::Dynamic > &matrix, const mitk::Image::Pointer &mask)
transform
Image::Pointer GrabItkImageMemory(itk::SmartPointer< ItkOutputImageType > &itkimage, mitk::Image *mitkImage=nullptr, const BaseGeometry *geometry=nullptr, bool update=true)
Grabs the memory of an itk::Image (with a specific type) and puts it into an mitk::Image.The memory is managed by the mitk::Image after calling this function. The itk::Image remains valid until the mitk::Image decides to free the memory.
void GaussianFilter(itk::Image< TPixel, VImageDimension > *itkImage, double variance, mitk::Image::Pointer &output)
static Eigen::Matrix< TMatrixElementType, Eigen::Dynamic, Eigen::Dynamic > Transform(const mitk::Image::Pointer &img, const mitk::Image::Pointer &mask)
TransformImageToMatrix.
itk::Image< unsigned char, 3 > MaskImageType
static void itkCountVoxel(TImageType *image, std::map< unsigned int, unsigned int > &map)
static void itkCountVoxel(TImageType *image, typename TImageType::PixelType label, unsigned int &count)
#define MITKCLUTILITIES_EXPORT
mitk::Image::Pointer image
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
static void CountVoxel(mitk::Image::Pointer image, std::map< unsigned int, unsigned int > &map)
CountVoxel.
static void itkSampleLabel(TImageType *image, mitk::Image::Pointer &output, unsigned int n_samples_drawn)
static void itkCountVoxel(TImageType *mask, unsigned int &n_numSamples)