30 #include <itkMersenneTwisterRandomVariateGenerator.h> 36 #include <vtkImageData.h> 41 const std::string filename = std::string(fname);
47 vtkImageData *vtk = image->GetVtkImageData();
68 mitk::Point3D xMax, yMax, zMax, xMaxIndex, yMaxIndex, zMaxIndex;
72 xMaxIndex[0] = image->GetLargestPossibleRegion().GetSize()[0];
73 yMaxIndex[1] = image->GetLargestPossibleRegion().GetSize()[1];
74 zMaxIndex[2] = image->GetLargestPossibleRegion().GetSize()[2];
75 image->GetGeometry()->IndexToWorld(xMaxIndex, xMax);
76 image->GetGeometry()->IndexToWorld(yMaxIndex, yMax);
77 image->GetGeometry()->IndexToWorld(zMaxIndex, zMax);
78 MITK_INFO <<
"Origin " << image->GetGeometry()->GetOrigin()[0] <<
" " << image->GetGeometry()->GetOrigin()[1] <<
" " 79 << image->GetGeometry()->GetOrigin()[2] <<
"";
80 MITK_INFO <<
"MaxExtend " << xMax[0] <<
" " << yMax[1] <<
" " << zMax[2] <<
"";
82 itk::Statistics::MersenneTwisterRandomVariateGenerator::Pointer randomGenerator =
83 itk::Statistics::MersenneTwisterRandomVariateGenerator::New();
84 randomGenerator->Initialize(std::rand());
85 point[0] = randomGenerator->GetUniformVariate(image->GetGeometry()->GetOrigin()[0], xMax[0]);
86 point[1] = randomGenerator->GetUniformVariate(image->GetGeometry()->GetOrigin()[1], yMax[1]);
87 point[2] = randomGenerator->GetUniformVariate(image->GetGeometry()->GetOrigin()[2], zMax[2]);
88 MITK_INFO <<
"RandomPoint " << point[0] <<
" " << point[1] <<
" " << point[2] <<
"";
95 const mitk::Point3D geom_origin = image->GetGeometry()->GetOrigin();
96 const mitk::Point3D geom_center = image->GetGeometry()->GetCenter();
100 mitk::Point3D position = geom_origin + (geom_origin - geom_center);
102 MITK_INFO <<
"Testing access outside of the image";
103 unsigned int dim = image->GetDimension();
104 if (dim == 3 || dim == 4)
111 if (point[0] < 0 || point[1] < 0 || point[2] < 0)
113 MITK_WARN <<
"Given position (" << point <<
") is out of image range, returning 0.";
117 value =
static_cast<mitk::ScalarType>(imAccess3.GetPixelByWorldCoordinates(point));
118 MITK_TEST_CONDITION((value >= imageMin && value <= imageMax),
"Value returned is between max/min");
121 image->GetGeometry()->WorldToIndex(position, itkIndex);
123 imAccess3.GetPixelByIndexSafe(itkIndex);
126 MITK_INFO << imageMin <<
" " << imageMax <<
" " << value <<
"";
129 class mitkImageTestClass
132 void SetClonedGeometry_None_ClonedEqualInput()
148 planegeometry->InitializeStandardPlane(100, 100, right, bottom, &spacing);
149 planegeometry->SetOrigin(origin);
150 planegeometry->ChangeImageGeometryConsideringOriginOffset(
true);
152 image->SetClonedGeometry(planegeometry);
156 MITK_ASSERT_EQUAL(imageGeometry, planegeometry,
"Matrix elements of cloned matrix equal original matrix");
164 mitkImageTestClass tester;
165 tester.SetClonedGeometry_None_ClonedEqualInput();
170 unsigned int dim[] = {100, 100, 20};
175 imgMem->Initialize(pt, 3, dim);
185 p = (
int *)imgMemAcc.
GetData();
194 const unsigned int size = dim[0] * dim[1] * dim[2];
195 for (
unsigned int i = 0; i < size; ++i, ++p)
202 p2 = (
int *)imgMemAcc.
GetData();
211 for (
unsigned int i = 0; i < size; ++i, ++p2)
213 if (*p2 != (
signed int)i)
218 MITK_TEST_CONDITION(isEqual,
"The values previously set as data are correct [pixelwise comparison].");
225 p2 = (
int *)imgMemAcc.
GetData();
233 unsigned int xy_size = dim[0] * dim[1];
234 unsigned int start_mid_slice = (dim[2] / 2) * xy_size;
236 for (
unsigned int i = 0; i < xy_size; ++i, ++p2)
238 if (*p2 != (
signed int)(i + start_mid_slice))
249 imgMem->Initialize(pType, 3, dim);
253 imgMem->GetDimension(0) == dim[0] && imgMem->GetDimension(1) == dim[1] && imgMem->GetDimension(2) == dim[2],
254 "Testing initialization of dimensions!");
261 imgMem->SetVolume(imgMemAcc.
GetData());
280 planegeometry->InitializeStandardPlane(100, 100, right, bottom, &spacing);
281 planegeometry->SetOrigin(origin);
282 planegeometry->SetImageGeometry(
true);
286 imgMem->Initialize(mitk::MakePixelType<int, int, 1>(), *planegeometry);
288 imgMem->GetGeometry()->GetOrigin() ==
static_cast<mitk::BaseGeometry *
>(planegeometry)->GetOrigin(),
289 "Testing correct setting of geometry via initialize!");
294 p = (
int *)imgMemAcc.
GetData();
303 imgMem->Initialize(mitk::MakePixelType<int, int, 1>(), 40, *planegeometry);
308 p = (
int *)imgMemAcc.
GetData();
319 "Testing correctness of origin via GetGeometry()->GetOrigin(): ");
323 imgMem->SetOrigin(origin);
327 "Testing correctness of changed origin via GetGeometry()->GetOrigin(): ");
329 mitk::Equal(imgMem->GetSlicedGeometry()->GetPlaneGeometry(0)->GetOrigin(), origin),
330 "Testing correctness of changed origin via GetSlicedGeometry()->GetPlaneGeometry(0)->GetOrigin(): ");
335 "Testing correct spacing from Geometry3D!");
338 imgMem->SetSpacing(spacing);
340 "Testing correctness of changed spacing via GetGeometry()->GetSpacing(): ");
342 mitk::Equal(imgMem->GetSlicedGeometry()->GetPlaneGeometry(0)->GetSpacing(), spacing),
343 "Testing correctness of changed spacing via GetSlicedGeometry()->GetPlaneGeometry(0)->GetSpacing(): ");
349 vecImg->Initialize(imgMem->GetPixelType(), *imgMem->GetGeometry(), 2 , 0 );
358 "Testing set and return of channel data!");
374 vtkImageData *vtkimage = vtkImageData::New();
375 vtkimage->Initialize();
376 vtkimage->SetDimensions(2, 3, 4);
377 double vtkorigin[] = {-350, -358.203, -1363.5};
378 vtkimage->SetOrigin(vtkorigin);
381 double vtkspacing[] = {1.367, 1.367, 2};
382 vtkimage->SetSpacing(vtkspacing);
383 vtkimage->AllocateScalars(VTK_SHORT, 1);
384 std::cout <<
"[PASSED]" << std::endl;
386 MITK_TEST_OUTPUT(<<
" Testing mitk::Image::Initialize(vtkImageData*, ...)");
388 mitkByVtkImage->Initialize(vtkimage);
392 MITK_TEST_OUTPUT(<<
" Testing whether spacing has been correctly initialized from vtkImageData");
393 mitk::Vector3D spacing2 = mitkByVtkImage->GetGeometry()->GetSpacing();
399 <<
" Testing whether GetSlicedGeometry(0)->GetOrigin() has been correctly initialized from vtkImageData");
400 mitk::Point3D origin2 = mitkByVtkImage->GetSlicedGeometry(0)->GetOrigin();
403 MITK_TEST_OUTPUT(<<
" Testing whether GetGeometry()->GetOrigin() has been correctly initialized from vtkImageData");
404 origin2 = mitkByVtkImage->GetGeometry()->GetOrigin();
407 MITK_TEST_OUTPUT(<<
" Testing if vtkOrigin is (0, 0, 0). This behaviour is due to historical development of MITK. " 408 "Aslo see bug 5050!");
409 vtkImageData *vtkImage = imgMem->GetVtkImageData();
410 auto vtkOrigin = vtkImage->GetOrigin();
432 const std::string filename = std::string(argv[1]);
436 image = mitk::IOUtil::Load<mitk::Image>(filename);
458 "Clone (testing origin)");
460 "Clone (testing spacing)");
463 image->GetGeometry()->GetIndexToWorldTransform()->GetMatrix()),
464 "Clone (testing transformation matrix)");
467 ->GetGeometryForTimeStep(cloneImage->GetDimension(3) - 1)
468 ->GetIndexToWorldTransform()
470 cloneImage->GetTimeGeometry()
471 ->GetGeometryForTimeStep(image->GetDimension(3) - 1)
472 ->GetIndexToWorldTransform()
474 "Clone(testing time sliced geometry)");
476 for (
unsigned int i = 0u; i < cloneImage->GetDimension(); ++i)
479 "Clone (testing dimension " << i <<
")");
483 if (image->GetDimension() > 3)
486 selector->SetTimeNr(0);
487 selector->SetInput(image);
489 image = selector->GetOutput();
492 if (image->GetDimension() == 3)
494 typedef itk::Image<double, 3> ItkFloatImage3D;
495 ItkFloatImage3D::Pointer itkimage;
501 catch (
const std::exception &e )
506 image->GetGeometry()->WorldToItkPhysicalPoint(point, itkPhysicalPoint);
507 MITK_INFO <<
"ITKPoint " << itkPhysicalPoint[0] <<
" " << itkPhysicalPoint[1] <<
" " << itkPhysicalPoint[2] <<
"";
510 image->GetGeometry()->ItkPhysicalPointToWorld(itkPhysicalPoint, backTransformedPoint);
513 "Testing world->itk-physical->world consistency");
516 bool status = itkimage->TransformPhysicalPointToIndex(itkPhysicalPoint, idx);
518 MITK_INFO <<
"ITK Index " << idx[0] <<
" " << idx[1] <<
" " << idx[2] <<
"";
520 if (status && value != -1.)
522 float valByItk = itkimage->GetPixel(idx);
524 "Compare value of pixel returned by mitk in comparison to itk");
528 MITK_WARN <<
"Index is out buffered region!";
533 MITK_INFO <<
"Image does not contain three dimensions, some test cases are skipped!";
537 auto *threeDdim =
new unsigned int[3];
542 threeDImage->Initialize(mitk::MakeScalarPixelType<float>(), 3, threeDdim);
546 "Testing if the clone image initializes with 3D!");
549 "Checking reference count of Image after using GetVtkImageData()");
#define MITK_TEST_FOR_EXCEPTION_END(EXCEPTIONCLASS)
Gives locked and index-based read access for a particular image part. The class provides several set-...
bool MatrixEqualElementWise(const vnl_matrix_fixed< TCoordRep, NRows, NCols > &matrix1, const vnl_matrix_fixed< TCoordRep, NRows, NCols > &matrix2, mitk::ScalarType epsilon=mitk::eps)
Check for element-wise matrix equality with a user defined accuracy.
bool ImageVtkDataReferenceCheck(const char *fname)
#define MITK_TEST_CONDITION_REQUIRED(COND, MSG)
void TestRandomPixelAccess(const mitk::PixelType, mitk::Image::Pointer image, mitk::Point3D &point, mitk::ScalarType &value)
section GeneralTestsDeprecatedOldTestingStyle Deprecated macros All tests with MITK_TEST_BEGIN()
void FillVector3D(Tout &out, mitk::ScalarType x, mitk::ScalarType y, mitk::ScalarType z)
#define MITK_TEST_OUTPUT(x)
Output some text.
#define mitkPixelTypeMultiplex3(function, ptype, param1, param2, param3)
An object of this class represents an exception of MITK. Please don't instantiate exceptions manually...
#define MITK_TEST_CONDITION(COND, MSG)
int mitkImageTest(int argc, char *argv[])
#define MITK_TEST_FAILED_MSG(MSG)
Fail and finish test with message MSG.
#define MITK_ASSERT_EQUAL(EXPECTED, ACTUAL, MSG)
Testing macro to test if two objects are equal.
#define MITK_TEST_FOR_EXCEPTION_BEGIN(EXCEPTIONCLASS)
Begin block which should be checked for exceptions.
void vtk2itk(const Tin &in, Tout &out)
mitk::Image::Pointer image
MITKNEWMODULE_EXPORT bool Equal(mitk::ExampleDataStructure *leftHandSide, mitk::ExampleDataStructure *rightHandSide, mitk::ScalarType eps, bool verbose)
Returns true if the example data structures are considered equal.
void MITKCORE_EXPORT CastToItkImage(const mitk::Image *mitkImage, itk::SmartPointer< ItkOutputImageType > &itkOutputImage)
Cast an mitk::Image to an itk::Image with a specific type.
ImageReadAccessor class to get locked read access for a particular image part.
BaseGeometry Describes the geometry of a data object.
const void * GetData() const
Gives const access to the data.
Class for defining the data type of pixels.