22 #include <itkScalarImageToHistogramGenerator.h>
24 #include <itkStatisticsImageFilter.h>
25 #include <itkLabelStatisticsImageFilter.h>
26 #include <itkBSplineUpsampleImageFilter.h>
27 #include <itkBSplineResampleImageFilterBase.h>
28 #include "itkResampleImageFilter.h"
31 #include <itkCastImageFilter.h>
32 #include <itkImageFileWriter.h>
33 #include <itkVTKImageImport.h>
34 #include <itkVTKImageExport.h>
37 #include <vtkPoints.h>
38 #include <vtkCellArray.h>
39 #include <vtkPolyData.h>
40 #include <vtkLinearExtrusionFilter.h>
41 #include <vtkPolyDataToImageStencil.h>
42 #include <vtkImageStencil.h>
43 #include <vtkImageImport.h>
44 #include <vtkImageExport.h>
45 #include <vtkImageData.h>
47 #include <vtkMetaImageWriter.h>
52 #include "itkBSplineInterpolateImageFunction.h"
53 #include "itkNearestNeighborInterpolateImageFunction.h"
55 #include "itkImageMaskSpatialObject.h"
56 #include "itkRegionOfInterestImageFilter.h"
57 #include "itkListSample.h"
63 #include <type_traits>
69 : m_MaskingMode( MASKING_MODE_NONE ),
70 m_MaskingModeChanged( false ),
72 m_UpsamplingFactor(1),
75 m_PlanarFigureThickness(0)
79 HistogramType::SizeType histogramSize(1);
80 histogramSize.Fill( 256 );
127 itkExceptionMacro( <<
"Image needs to be set first!" );
132 itkExceptionMacro( <<
"Image and image mask need to have equal number of time steps!" );
150 itkExceptionMacro( <<
"Image needs to be set first!" );
216 itkExceptionMacro( <<
"Image not set!" );
219 if (
m_Image->GetReferenceCount() == 1 )
221 MITK_DEBUG <<
"No Stats calculated; no one else holds a reference on it";
247 MITK_DEBUG <<
"Returning, statistics already up to date!";
346 MITK_ERROR <<
"ImageStatistics: Image dimension not supported!";
410 throw std::runtime_error(
"Error: image empty!" );
422 for(
int i=0; i<s; i++)
437 maskedImageTimeSelector->SetTimeNr( 0 );
438 maskedImageTimeSelector->UpdateLargestPossibleRegion();
439 mitk::Image *timeSliceMaskedImage = maskedImageTimeSelector->GetOutput();
454 for(
int i=0; i<s; i++)
464 throw std::runtime_error(
"Error: image mask empty!" );
475 throw std::runtime_error(
"Error: planar figure empty!" );
479 throw std::runtime_error(
"Masking not possible for non-closed figures" );
483 if ( imageGeometry ==
nullptr )
485 throw std::runtime_error(
"Image geometry invalid!" );
489 if ( planarFigureGeometry2D ==
nullptr )
491 throw std::runtime_error(
"Planar-Figure not yet initialized!" );
495 dynamic_cast< const PlaneGeometry *
>( planarFigureGeometry2D );
499 if ( !planarFigureGeometry || abstrTransfGeometry )
501 throw std::runtime_error(
"Only PlaneGeometry supported." );
520 for(
int i=0; i<s; i++)
543 for (
unsigned int i = 0; i < 3; ++i )
546 axisVector.Normalize();
548 if ( fabs( fabs( axisVector * vector ) - 1.0) <
mitk::eps )
562 typedef itk::ImageMaskSpatialObject<3> ImageMaskSpatialObject;
563 typedef itk::Image< unsigned char, 3 >
ImageType;
567 caster->SetInput(image);
571 maskSO->SetImage ( caster->GetOutput() );
573 maskSO->GetAxisAlignedBoundingBoxRegion();
586 typedef itk::RegionOfInterestImageFilter< ImageType, MaskImage3DType > ROIFilterType;
588 roi->SetRegionOfInterest(m_InternalMask3D);
589 roi->SetInput(caster->GetOutput());
594 MITK_DEBUG <<
"Created m_InternalImageMask3D";
599 template <
typename TPixel,
unsigned int VImageDimension >
601 const itk::Image< TPixel, VImageDimension > *image,
605 MITK_DEBUG <<
"InternalReorientImagePlane() start";
607 typedef itk::Image< TPixel, VImageDimension >
ImageType;
610 typedef itk::ResampleImageFilter<ImageType, FloatImageType, double> ResamplerType;
616 throw std::runtime_error(
"Unexpected null pointer returned for pointer to PlaneGeometry." );
623 throw std::runtime_error(
"Unexpected pointer to AbstractTransformGeometry returned." );
631 typename ResamplerType::SpacingType spacing = planegeo->
GetSpacing();
632 spacing[0] = image->GetSpacing()[0] / upsamp;
633 spacing[1] = image->GetSpacing()[1] / upsamp;
634 spacing[2] = image->GetSpacing()[2];
637 spacing[2] = image->GetSpacing()[2] / upsamp;
639 resampler->SetOutputSpacing( spacing );
642 typename ResamplerType::SizeType size;
646 MITK_DEBUG <<
"setting size2:="<<size[2] <<
" (before " << 1 <<
")";
647 resampler->SetSize( size );
653 corrorig[0] += 0.5/upsamp;
654 corrorig[1] += 0.5/upsamp;
659 corrorig[2] -= thickyyy;
662 resampler->SetOutputOrigin(corrorig );
665 typename ResamplerType::DirectionType direction;
667 for(
unsigned int c = 0; c < matrix.ColumnDimensions; ++c)
670 for(
unsigned int r = 0 ; r<matrix.RowDimensions; r++)
672 sum += matrix(r,c)*matrix(r,c);
674 for(
unsigned int r = 0 ; r<matrix.RowDimensions; ++r)
676 direction(r,c) = matrix(r,c)/sqrt(sum);
679 resampler->SetOutputDirection( direction );
685 for(
unsigned int d = 0; d < 3; d++ )
687 sigma[d] = gausssigma * image->GetSpacing()[d];
692 GaussianInterpolatorType;
697 interpolator->SetInputImage( image );
698 interpolator->SetParameters( sigma, alpha );
700 resampler->SetInterpolator( interpolator );
706 typedef typename itk::LinearInterpolateImageFunction<ImageType, double> InterpolatorType;
711 interpolator->SetInputImage( image );
713 resampler->SetInterpolator( interpolator );
718 resampler->SetInput( image );
719 resampler->SetDefaultPixelValue(0);
721 MITK_DEBUG <<
"Resampling requested image plane ... ";
725 if(additionalIndex < 0)
729 this->
m_InternalImage->SetVolume( resampler->GetOutput()->GetBufferPointer() );
733 unsigned int myIndex = additionalIndex;
741 template <
typename TPixel,
unsigned int VImageDimension >
743 const itk::Image< TPixel, VImageDimension > *image,
int additionalIndex )
745 typedef itk::Image< TPixel, VImageDimension >
ImageType;
752 outImage->Allocate();
753 outImage->FillBuffer(0);
755 typedef itk::InterpolateImageFunction<ImageType, double>
758 GaussianInterpolatorType;
759 typedef itk::LinearInterpolateImageFunction<ImageType, double>
760 LinearInterpolatorType;
767 for(
unsigned int d = 0; d < 3; d++ )
774 dynamic_cast<GaussianInterpolatorType*
>(interpolator.GetPointer())->SetParameters( sigma, alpha );
782 interpolator->SetInputImage( image );
784 itk::ImageRegionConstIterator<MaskImage3DType>
786 itk::ImageRegionIterator<ImageType>
787 itimage(outImage, outImage->GetLargestPossibleRegion());
792 itk::Point< double, 3 > point;
793 itk::ContinuousIndex< double, 3 > index;
794 while( !itmask.IsAtEnd() )
796 if(itmask.Get() != 0)
798 outImage->TransformIndexToPhysicalPoint (itimage.GetIndex(), point);
799 image->TransformPhysicalPointToContinuousIndex(point, index);
800 itimage.Set(interpolator->EvaluateAtContinuousIndex(index));
807 if(additionalIndex < 0)
825 typedef itk::ResampleImageFilter<MaskImage3DType, MaskImage3DType, double> ResamplerType;
829 ResamplerType::SizeType size;
833 resampler->SetSize( size );
837 resampler->SetOutputOrigin(orig );
840 ResamplerType::SpacingType spacing;
844 resampler->SetOutputSpacing( spacing );
846 resampler->SetOutputDirection( image->GetDirection() );
848 typedef itk::NearestNeighborInterpolateImageFunction<MaskImage3DType, double>
854 interpolator->SetInputImage( image );
856 resampler->SetInterpolator( interpolator );
859 resampler->SetInput( image );
860 resampler->SetDefaultPixelValue(0);
869 template <
typename TPixel,
unsigned int VImageDimension >
871 const itk::Image< TPixel, VImageDimension > *image,
875 MITK_DEBUG <<
"InternalCalculateStatisticsUnmasked()";
877 typedef itk::Image< TPixel, VImageDimension >
ImageType;
880 typedef itk::SimpleMemberCommand< PartialVolumeAnalysisHistogramCalculator > ITKCommandType;
883 progressListener->SetCallbackFunction(
this,
888 this->InvokeEvent( itk::StartEvent() );
889 for (
unsigned int i = 0; i < 100; ++i )
895 typedef itk::StatisticsImageFilter< ImageType > StatisticsFilterType;
897 statisticsFilter->SetInput( image );
898 unsigned long observerTag = statisticsFilter->AddObserver(
899 itk::ProgressEvent(), progressListener );
901 statisticsFilter->Update();
903 statisticsFilter->RemoveObserver( observerTag );
906 this->InvokeEvent( itk::EndEvent() );
908 statistics.
N = image->GetBufferedRegion().GetNumberOfPixels();
909 statistics.
Min = statisticsFilter->GetMinimum();
910 statistics.
Max = statisticsFilter->GetMaximum();
911 statistics.
Mean = statisticsFilter->GetMean();
913 statistics.
Sigma = statisticsFilter->GetSigma();
914 statistics.
RMS = sqrt( statistics.
Mean * statistics.
Mean
920 typedef itk::Statistics::ScalarImageToHistogramGenerator< ImageType >
921 HistogramGeneratorType;
923 histogramGenerator->SetInput( inImage );
924 histogramGenerator->SetMarginalScale( 10 );
926 histogramGenerator->SetHistogramMin( statistics.
Min );
927 histogramGenerator->SetHistogramMax( statistics.
Max );
928 histogramGenerator->Compute();
929 *histogram = histogramGenerator->GetOutput();
933 template <
typename TPixel,
unsigned int VImageDimension >
935 const itk::Image< TPixel, VImageDimension > *image,
936 itk::Image< unsigned char, VImageDimension > *maskImage,
940 MITK_DEBUG <<
"InternalCalculateStatisticsMasked() start";
942 typedef itk::Image< TPixel, VImageDimension >
ImageType;
943 typedef itk::Image< unsigned char, VImageDimension >
MaskImageType;
947 typedef TPixel MeasurementType;
948 const unsigned int MeasurementVectorLength = 1;
949 typedef itk::Vector< MeasurementType , MeasurementVectorLength >
950 MeasurementVectorType;
951 typedef itk::Statistics::ListSample< MeasurementVectorType > ListSampleType;
953 listSample->SetMeasurementVectorSize( MeasurementVectorLength );
955 itk::ImageRegionConstIterator<MaskImageType>
956 itmask(maskImage, maskImage->GetLargestPossibleRegion());
957 itk::ImageRegionConstIterator<ImageType>
958 itimage(image, image->GetLargestPossibleRegion());
963 while( !itmask.IsAtEnd() )
965 if(itmask.Get() != 0)
968 MeasurementVectorType mv;
969 mv[0] = ( MeasurementType ) itimage.Get();
970 listSample->PushBack(mv);
977 typedef double HistogramMeasurementType;
978 typedef itk::Statistics::Histogram< HistogramMeasurementType, itk::Statistics::DenseFrequencyContainer2 >
HistogramType;
979 typedef itk::Statistics::SampleToHistogramFilter< ListSampleType, HistogramType > GeneratorType;
981 typename GeneratorType::HistogramType::SizeType size(MeasurementVectorLength);
983 generator->SetHistogramSize( size );
984 generator->SetInput( listSample );
985 generator->SetMarginalScale( 10.0 );
987 *histogram = generator->GetOutput();
992 template <
typename TPixel,
unsigned int VImageDimension >
994 itk::Image< TPixel, VImageDimension > *image,
int additionalIndex )
996 typedef itk::Image< TPixel, VImageDimension >
ImageType;
997 typedef itk::RegionOfInterestImageFilter< ImageType, ImageType > ROIFilterType;
1000 roi->SetInput(image);
1008 template <
typename TPixel,
unsigned int VImageDimension >
1010 itk::Image< TPixel, VImageDimension > *image,
unsigned int axis )
1013 MITK_DEBUG <<
"InternalCalculateMaskFromPlanarFigure() start";
1015 typedef itk::Image< TPixel, VImageDimension >
ImageType;
1020 newMaskImage->SetSpacing( image->GetSpacing() );
1021 newMaskImage->SetOrigin( image->GetOrigin() );
1022 newMaskImage->SetDirection( image->GetDirection() );
1023 newMaskImage->SetRegions( image->GetLargestPossibleRegion() );
1024 newMaskImage->Allocate();
1025 newMaskImage->FillBuffer( 1 );
1036 polyline->Allocate( 1, 1 );
1060 bool outOfBounds =
false;
1062 typename PlanarFigure::PolyLineType::const_iterator it;
1063 for ( it = planarFigurePolyline.begin();
1064 it != planarFigurePolyline.end();
1072 planarFigureGeometry2D->
WorldToIndex(point2D, point2D);
1075 planarFigureGeometry2D->
IndexToWorld(point2D, point2D);
1076 planarFigureGeometry2D->
Map( point2D, point3D );
1080 if ( !imageGeometry3D->
IsInside( point3D ) )
1090 points->InsertNextPoint( point3D[i0], point3D[i1], -0.5 );
1092 polyline->SetPoints( points );
1098 throw std::runtime_error(
"Figure at least partially outside of image bounds!" );
1101 std::size_t numberOfPoints = planarFigurePolyline.size();
1102 auto ptIds =
new vtkIdType[numberOfPoints];
1103 for ( std::size_t i = 0; i < numberOfPoints; ++i )
1107 polyline->InsertNextCell( VTK_POLY_LINE, numberOfPoints, ptIds );
1112 extrudeFilter->SetInputData( polyline );
1113 extrudeFilter->SetScaleFactor( 1 );
1114 extrudeFilter->SetExtrusionTypeToNormalExtrusion();
1115 extrudeFilter->SetVector( 0.0, 0.0, 1.0 );
1119 polyDataToImageStencil->SetInputConnection( extrudeFilter->GetOutputPort() );
1124 typedef itk::VTKImageImport< MaskImage3DType > ImageImportType;
1125 typedef itk::VTKImageExport< MaskImage3DType > ImageExportType;
1128 itkExporter->SetInput( newMaskImage );
1132 vtkImporter->Update();
1137 imageStencilFilter->SetInputData( vtkImporter->GetOutput() );
1138 imageStencilFilter->SetStencilConnection(polyDataToImageStencil->GetOutputPort() );
1139 imageStencilFilter->ReverseStencilOff();
1140 imageStencilFilter->SetBackgroundValue( 0 );
1141 imageStencilFilter->Update();
1146 vtkExporter->SetInputData( imageStencilFilter->GetOutput() );
1147 vtkExporter->Update();
1151 itkImporter->Update();
1157 itk::ImageRegionIterator<MaskImage3DType>
1160 while( !itmask.IsAtEnd() )
1162 if(itmask.Get() != 0)
1164 typename ImageType::IndexType index = itmask.GetIndex();
1167 index[axis] = thick;
1175 itk::ImageRegionIterator<ImageType>
1176 itimage(image, image->GetLargestPossibleRegion());
1177 itimage.GoToBegin();
1179 typename ImageType::SizeType lowersize;
1181 typename ImageType::SizeType uppersize;
1183 while( !itmask.IsAtEnd() )
1185 if(itmask.Get() == 0)
1191 typename ImageType::IndexType index = itimage.GetIndex();
1192 typename ImageType::SizeType signedindex;
1193 signedindex[0] = index[0];
1194 signedindex[1] = index[1];
1195 signedindex[2] = index[2];
1197 lowersize[0] = signedindex[0] < lowersize[0] ? signedindex[0] : lowersize[0];
1198 lowersize[1] = signedindex[1] < lowersize[1] ? signedindex[1] : lowersize[1];
1199 lowersize[2] = signedindex[2] < lowersize[2] ? signedindex[2] : lowersize[2];
1201 uppersize[0] = signedindex[0] > uppersize[0] ? signedindex[0] : uppersize[0];
1202 uppersize[1] = signedindex[1] > uppersize[1] ? signedindex[1] : uppersize[1];
1203 uppersize[2] = signedindex[2] > uppersize[2] ? signedindex[2] : uppersize[2];
1210 typename ImageType::IndexType index;
1211 index[0] = lowersize[0];
1212 index[1] = lowersize[1];
1213 index[2] = lowersize[2];
1215 typename ImageType::SizeType size;
1216 size[0] = uppersize[0] - lowersize[0] + 1;
1217 size[1] = uppersize[1] - lowersize[1] + 1;
1218 size[2] = uppersize[2] - lowersize[2] + 1;
1223 typedef itk::RegionOfInterestImageFilter< ImageType, ImageType > ROIFilterType;
1226 roi->SetInput(image);
1234 typedef itk::RegionOfInterestImageFilter< MaskImage3DType, MaskImage3DType > ROIMaskFilterType;
1243 extrudeFilter->Delete();
1244 polyDataToImageStencil->Delete();
1245 vtkImporter->Delete();
1246 imageStencilFilter->Delete();
1257 static int updateCounter = 0;
1258 if ( updateCounter++ % 2 == 0 )
1260 this->InvokeEvent( itk::ProgressEvent() );
1267 this->InvokeEvent( itk::ProgressEvent() );
HistogramType::Pointer m_EmptyHistogram
const Point3D GetOrigin() const
Get the origin, e.g. the upper-left corner of the plane.
bool GetPrincipalAxis(const Geometry3D *geometry, Vector3D vector, unsigned int &axis)
If the passed vector matches any of the three principal axes of the passed geometry, the ínteger value corresponding to the axis is set and true is returned.
itk::ImageRegion< 3 > m_CropRegion
itk::SmartPointer< Self > Pointer
Standard implementation of BaseGeometry.
MaskImage3DType::Pointer m_InternalImageMask3D
bool m_MaskingModeChanged
virtual bool Map(const mitk::Point3D &pt3d_mm, mitk::Point2D &pt2d_mm) const
Project a 3D point given in mm (pt3d_mm) onto the 2D geometry. The result is a 2D point in mm (pt2d_m...
void SetMaskingMode(unsigned int mode)
Set/Get operation mode for masking.
void SetMaskingModeToPlanarFigure()
Set/Get operation mode for masking.
std::vector< mitk::Image::ConstPointer > m_AdditionalResamplingImages
itk::Image< unsigned char, 3 > MaskImage3DType
Evaluates the Gaussian interpolation of an image.
TimeStampType m_MaskedImageStatisticsTimeStamp
BoolType m_ImageStatisticsCalculationTriggerBool
DataCollection - Class to facilitate loading/accessing structured data.
mitk::Image::HistogramType HistogramType
void ConnectPipelines(ITK_Exporter exporter, VTK_Importer *importer)
itk::Image< double, 3 > FloatImageType
const mitk::Vector3D GetSpacing() const
Get the spacing (size of a pixel).
StatisticsType m_ImageStatistics
void SetMaskingModeToImage()
Set/Get operation mode for masking.
void UnmaskedStatisticsProgressUpdate()
unsigned int GetTimeSteps() const
Get the number of time steps from the TimeGeometry As the base data has not a data vector given by it...
void InternalCalculateStatisticsMasked(const itk::Image< TPixel, VImageDimension > *image, itk::Image< unsigned char, VImageDimension > *maskImage, Statistics &statistics, typename HistogramType::ConstPointer *histogram)
virtual void WorldToIndex(const Point2D &pt_mm, Point2D &pt_units) const
virtual void IndexToWorld(const Point2D &pt_units, Point2D &pt_mm) const
BoolType m_PlanarFigureStatisticsCalculationTriggerBool
std::vector< mitk::Image::Pointer > m_InternalAdditionalResamplingImages
#define AccessFixedDimensionByItk_3(mitkImage, itkImageTypeFunction, dimension, arg1, arg2, arg3)
itk::SmartPointer< const Self > ConstPointer
HistogramType::ConstPointer m_ImageHistogram
Statistics m_EmptyStatistics
void InternalMaskImage(mitk::Image *image)
map::core::discrete::Elements< 3 >::InternalImageType ImageType
TimeStampType m_ImageStatisticsTimeStamp
Vector3D GetAxisVector(unsigned int direction) const
Get vector along bounding-box in the specified direction in mm.
BoolType m_MaskedImageStatisticsCalculationTriggerBool
#define AccessFixedDimensionByItk_2(mitkImage, itkImageTypeFunction, dimension, arg1, arg2)
unsigned int m_NumberOfBins
Image class for storing images.
const Statistics & GetStatistics() const
Retrieve statistics depending on the current masking mode.
StatisticsType m_PlanarFigureStatistics
void InternalResampleImage(const MaskImage3DType *image)
itk::Image< unsigned char, 3 > MaskImageType
virtual bool ComputeStatistics()
Compute statistics (together with histogram) for the current masking mode.
void AddAdditionalResamplingImage(const mitk::Image *image)
Set image for which the same resampling will be applied. and available via GetAdditionalResampledImag...
void InternalCropAdditionalImage(itk::Image< TPixel, VImageDimension > *image, int additionalIndex)
HistogramType::ConstPointer m_MaskedImageHistogram
mitk::Image::Pointer m_InternalImage
MaskImage2DType::Pointer m_InternalImageMask2D
itk::ImageRegion< 3 > m_InternalMask3D
void ExtractImageAndMask()
Depending on the masking mode, the image and mask from which to calculate statistics is extracted fro...
void MaskedStatisticsProgressUpdate()
const mitk::BaseGeometry * GetUpdatedGeometry(int t=0)
Return the BaseGeometry of the data at time t.
PartialVolumeAnalysisHistogramCalculator()
void InternalCalculateMaskFromPlanarFigure(itk::Image< TPixel, VImageDimension > *image, unsigned int axis)
#define AccessFixedDimensionByItk_1(mitkImage, itkImageTypeFunction, dimension, arg1)
void IndexToWorld(const mitk::Vector3D &vec_units, mitk::Vector3D &vec_mm) const
Convert (continuous or discrete) index coordinates of a vector vec_units to world coordinates (in mm)...
HistogramType::ConstPointer m_PlanarFigureHistogram
StatisticsType m_MaskedImageStatistics
TimeStampType m_PlanarFigureStatisticsTimeStamp
void InternalResampleImageFromMask(const itk::Image< TPixel, VImageDimension > *image, int additionalIndex)
const HistogramType * GetHistogram() const
Retrieve the histogram depending on the current masking mode.
void SetPlanarFigure(const mitk::PlanarFigure *planarFigure)
Set planar figure for masking.
unsigned int m_PlanarFigureThickness
MITKCORE_EXPORT const ScalarType eps
void SetMaskingModeToNone()
Set/Get operation mode for masking.
void InternalReorientImagePlane(const itk::Image< TPixel, VImageDimension > *image, mitk::BaseGeometry *imggeo, mitk::BaseGeometry *planegeo3D, int additionalIndex)
Describes a two-dimensional, rectangular plane.
bool IsInside(const mitk::Point3D &p) const
Test whether the point p (world coordinates in mm) is inside the bounding box.
void SetImageMask(const mitk::Image *imageMask)
Set binary image for masking.
virtual ~PartialVolumeAnalysisHistogramCalculator()
mitk::BaseGeometry * GetGeometry(int t=0) const
Return the geometry, which is a TimeGeometry, of the data as non-const pointer.
ScalarType GetExtentInMM(int direction) const
Get the extent of the bounding-box in the specified direction in mm.
void InternalCalculateStatisticsUnmasked(const itk::Image< TPixel, VImageDimension > *image, Statistics &statistics, typename HistogramType::ConstPointer *histogram)
unsigned int m_MaskingMode
void SetImage(const mitk::Image *image)
Set image from which to compute statistics.
mitk::Image::ConstPointer m_ImageMask
mitk::Image::ConstPointer m_Image
BaseGeometry Describes the geometry of a data object.
mitk::PlanarFigure::ConstPointer m_PlanarFigure
mitk::AffineTransform3D * GetIndexToWorldTransform()
Get the transformation used to convert from index to world coordinates.
void WorldToIndex(const mitk::Point3D &pt_mm, mitk::Point3D &pt_units) const
Convert world coordinates (in mm) of a point to (continuous!) index coordinates.
static itkEventMacro(BoundingShapeInteractionEvent, itk::AnyEvent) class MITKBOUNDINGSHAPE_EXPORT BoundingShapeInteractor Pointer New()
Basic interaction methods for mitk::GeometryData.