MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkTransformTest.cpp
Go to the documentation of this file.
1/*============================================================================
2
3The Medical Imaging Interaction Toolkit (MITK)
4
5Copyright (c) German Cancer Research Center (DKFZ)
6All rights reserved.
7
8Use of this source code is governed by a 3-clause BSD license that can be
9found in the LICENSE file.
10
11============================================================================*/
12
13#include <mitkTransform.h>
14#include <mitkTestingMacros.h>
15#include <mitkStringFromCvMat.h>
16#include <mitkCvMatCompare.h>
18
22int mitkTransformTest(int, char*[])
23{
24 MITK_TEST_BEGIN("Transform")
25
26 mitk::Transform::Pointer transform = mitk::Transform::New();
27 mitk::Transform* t = transform;
28
29 // test with homogeneous matrixes
30 vnl_matrix_fixed<mitk::ScalarType, 4, 4> I;
31 I.set_identity();
32
33 std::cout << "vnl I: " << std::endl << I << std::endl;
34 t->SetMatrix( I );
35
36 cv::Mat cvI = t->GetCvMatrix();
37 std::string matAsString;
38 mitk::StringFromCvMat _StringFromCvMat( &cvI, &matAsString );
39 _StringFromCvMat.Update();
40 std::cout << "cv identity matrix: " << matAsString << std::endl;
41
42 MITK_TEST_CONDITION_REQUIRED( trace(cvI)
43 == cv::Scalar(4)
44 , "trace(t->GetCvMatrix()) == cv::Scalar(4)" );
45 MITK_TEST_CONDITION_REQUIRED( countNonZero(t->GetCvMatrix()) == 4
46 , "countNonZero(t->GetCvMatrix()) == 4" );
47
48 // test 2: 1. create a rotation matrix,convert to quaternion
49 // set as rotation vector
50 // get it back as vnl rotation matrix
51 // convert to cv matrix
52 // convert to quaternion (cv::Rodrigues)
53 // compare received quaternion with original one (created from rotation matrix)
54 cv::Mat cvRotMat = cv::Mat::ones( 3, 3, cv::DataType<mitk::ScalarType>::type );
55 cvRotMat.at<mitk::ScalarType>(0,1) = 2;
56 cvRotMat.at<mitk::ScalarType>(0,2) = 3;
57
58 cv::Mat cvRotVec;
59 cv::Rodrigues( cvRotMat, cvRotVec );
60 t->SetRotationVector( cvRotVec );
61
62 vnl_matrix_fixed<mitk::ScalarType, 3, 3> vnlRotMat
64 std::cout << "vnl rotation matrix: "
65 << vnlRotMat << std::endl;
66
67 vnl_matrix<mitk::ScalarType> rotMat = vnlRotMat.as_matrix();
68 cv::Mat cvRotMatReturned;
70 _CvMatFromVnlMatrix( &rotMat, &cvRotMatReturned );
71 _CvMatFromVnlMatrix.Update();
72
73 _StringFromCvMat.SetMatrix( &cvRotMatReturned );
74 _StringFromCvMat.Update();
75 std::cout << "cvRotMatReturned: " << matAsString << std::endl;
76
77 cv::Mat cvRotVecReturned;
78 cv::Rodrigues( cvRotMatReturned, cvRotVecReturned );
79
80 _StringFromCvMat.SetMatrix( &cvRotVec );
81 _StringFromCvMat.Update();
82 std::cout << "cvRotVec: " << matAsString << std::endl;
83 _StringFromCvMat.SetMatrix( &cvRotVecReturned );
84 _StringFromCvMat.Update();
85 std::cout << "cvRotVecReturned: " << matAsString << std::endl;
86
87 double epsilon = 0.001;
88 bool equals = false;
89 mitk::CvMatCompare _CvMatCompare( &cvRotVec, &cvRotVecReturned, &epsilon, &equals );
90 _CvMatCompare.Update();
91 MITK_TEST_CONDITION( equals,
92 "testing returned rotation vector");
93
94 std::cout << "Transform as string: " << transform << std::endl;
95
96 // always end with this!
97 MITK_TEST_END();
98}
99
100
101
102
void Update() override
void SetMatrix(const cv::Mat *_CvMat)
class representing a transfrom in 3D
void SetMatrix(const vnl_matrix_fixed< mitk::ScalarType, 4, 4 > &mat)
vnl_matrix_fixed< mitk::ScalarType, 3, 3 > GetVnlRotationMatrix() const
cv::Mat GetCvMatrix() const
void SetRotationVector(const cv::Mat &rotVec)
int mitkTransformTest(int, char *[])