00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkNavigationDataLandmarkTransformFilter.h"
00019 #include "mitkNavigationData.h"
00020
00021 #include "mitkTestingMacros.h"
00022
00023 #include <iostream>
00024
00025
00029 int mitkNavigationDataLandmarkTransformFilterTest(int , char* [])
00030 {
00031
00032 MITK_TEST_BEGIN("NavigationDataLandmarkTransformFilter")
00033
00034
00035 mitk::NavigationDataLandmarkTransformFilter::Pointer myFilter = mitk::NavigationDataLandmarkTransformFilter::New();
00036
00037
00038
00039
00040 MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(),"Testing instantiation");
00041
00042
00043 mitk::Point3D sPoint1, sPoint2, sPoint3, tPoint1, tPoint2, tPoint3;
00044 mitk::FillVector3D(sPoint1, 1.1, 1.1, 1.1);
00045 mitk::FillVector3D(sPoint2, 2.2, 2.2, 2.2);
00046 mitk::FillVector3D(sPoint3, 3.3, 3.3, 3.3);
00047
00048 mitk::FillVector3D(tPoint1, 2.1, 2.1, 2.1);
00049 mitk::FillVector3D(tPoint2, 3.2, 3.2, 3.2);
00050 mitk::FillVector3D(tPoint3, 4.3, 4.3, 4.3);
00051
00052 mitk::PointSet::Pointer sourcePoints = mitk::PointSet::New();
00053 mitk::PointSet::Pointer targetPoints = mitk::PointSet::New();
00054
00055 sourcePoints->SetPoint(0,sPoint1);
00056 sourcePoints->SetPoint(1,sPoint2);
00057 sourcePoints->SetPoint(2,sPoint3);
00058
00059 targetPoints->SetPoint(0,tPoint1);
00060 targetPoints->SetPoint(1,tPoint2);
00061 targetPoints->SetPoint(2,tPoint3);
00062
00063
00064 mitk::NavigationData::PositionType initialPos1,initialPos2, resultPos1,resultPos2;
00065 mitk::FillVector3D(initialPos1, 1.1, 1.1, 1.1);
00066 mitk::FillVector3D(initialPos2, 22.2,22.2, 22.2);
00067 mitk::FillVector3D(resultPos1, 2.1, 2.1, 2.1);
00068 mitk::FillVector3D(resultPos2, 23.2, 23.2, 23.2);
00069 mitk::NavigationData::OrientationType initialOri(0.1, 0.1, 0.1, 0.1);
00070 mitk::ScalarType initialError(0.0);
00071 bool initialValid(true);
00072
00073 mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
00074 nd1->SetPosition(initialPos1);
00075 nd1->SetOrientation(initialOri);
00076 nd1->SetPositionAccuracy(initialError);
00077 nd1->SetDataValid(initialValid);
00078
00079 mitk::NavigationData::Pointer nd2 = mitk::NavigationData::New();
00080 nd2->SetPosition(initialPos2);
00081 nd2->SetOrientation(initialOri);
00082 nd2->SetPositionAccuracy(initialError);
00083 nd2->SetDataValid(initialValid);
00084
00085
00086 myFilter->SetInput(0,nd1);
00087 MITK_TEST_CONDITION(myFilter->GetInput(0) == nd1, "Testing Set-/GetInput() ND1");
00088
00089 mitk::NavigationData* output1 = myFilter->GetOutput(0);
00090 MITK_TEST_CONDITION_REQUIRED(output1 != NULL, "Testing GetOutput() ND1");
00091
00092 MITK_TEST_CONDITION(myFilter->IsInitialized() == false, "Testing IsInitialized() before setting source points");
00093
00094 myFilter->SetSourceLandmarks(sourcePoints);
00095 MITK_TEST_CONDITION(myFilter->IsInitialized() == false, "Testing IsInitialized() after setting source points and before setting target points");
00096
00097 mitk::PointSet::Pointer zeroTargetPoints = mitk::PointSet::New();
00098
00099 MITK_TEST_FOR_EXCEPTION(itk::ExceptionObject, myFilter->SetTargetLandmarks(zeroTargetPoints));
00100 MITK_TEST_CONDITION(myFilter->IsInitialized() == false, "Testing IsInitialized() after setting target pointset with insufficient points");
00101
00102 myFilter->SetTargetLandmarks(targetPoints);
00103 MITK_TEST_CONDITION(myFilter->IsInitialized() == true, "Testing IsInitialized() after setting source& target points");
00104
00105
00106 output1->Update();
00107 MITK_TEST_CONDITION_REQUIRED(
00108 mitk::Equal(output1->GetPosition(), resultPos1),
00109 "Testing ND1 position correctly transformed");
00110
00111
00112
00113 myFilter->SetInput(1,nd2);
00114 MITK_TEST_CONDITION(myFilter->GetInput(1) == nd2, "Testing Set-/GetInput() ND2");
00115
00116 mitk::NavigationData* output2 = myFilter->GetOutput(1);
00117 MITK_TEST_CONDITION_REQUIRED(output2 != NULL, "Testing GetOutput() ND2");
00118
00119
00120 output1->Update();
00121 MITK_TEST_CONDITION_REQUIRED(
00122 mitk::Equal(output2->GetPosition(), resultPos2),
00123 "Testing ND2 position correctly transformed");
00124
00125
00126 mitk::FillVector3D(initialPos2, 222.22, 222.22, 222.22);
00127 mitk::FillVector3D(resultPos2, 223.22, 223.22, 223.22);
00128 nd2->SetPosition(initialPos2);
00129 myFilter->SetInput(1,nd2);
00130 MITK_TEST_CONDITION(myFilter->GetInput(1) == nd2, "Testing Set-/GetInput() ND2 after updating value");
00131
00132 output2 = myFilter->GetOutput(1);
00133 MITK_TEST_CONDITION_REQUIRED(output2 != NULL, "Testing GetOutput() ND2 after updating value");
00134
00135
00136 output2->Update();
00137 MITK_TEST_CONDITION(
00138 mitk::Equal(output2->GetPosition(), resultPos2),
00139 "Testing ND2 position correctly transformed after updating value");
00140
00141
00142
00143 mitk::FillVector3D(tPoint1, 3.1, 3.1, 3.1);
00144 mitk::FillVector3D(tPoint2, 4.2, 4.2, 4.2);
00145 mitk::FillVector3D(tPoint3, 5.3, 5.3, 5.3);
00146 mitk::FillVector3D(resultPos1, 3.1 ,3.1 ,3.1);
00147 mitk::FillVector3D(resultPos2, 224.22, 224.22, 224.22);
00148
00149
00150 targetPoints->SetPoint(0,tPoint1);
00151 targetPoints->SetPoint(1,tPoint2);
00152 targetPoints->SetPoint(2,tPoint3);
00153
00154 myFilter->SetTargetLandmarks(targetPoints);
00155
00156 output1->Update();
00157
00158 MITK_TEST_CONDITION(
00159 mitk::Equal(output1->GetPosition(), resultPos1),
00160 "Testing ND1 position correctly transformed after targetPointSet changed");
00161
00162 MITK_TEST_CONDITION(
00163 mitk::Equal(output2->GetPosition(), resultPos2),
00164 "Testing ND2 position correctly transformed after targetPointSet changed");
00165
00166
00167
00168 mitk::FillVector3D(sPoint1, 0.1, 0.1, 0.1);
00169 mitk::FillVector3D(sPoint2, 1.2, 1.2, 1.2);
00170 mitk::FillVector3D(sPoint3, 2.3, 2.3, 2.3);
00171 mitk::FillVector3D(resultPos1, 4.1 ,4.1 ,4.1);
00172 mitk::FillVector3D(resultPos2, 225.22, 225.22, 225.22);
00173
00174
00175 sourcePoints->SetPoint(0,sPoint1);
00176 sourcePoints->SetPoint(1,sPoint2);
00177 sourcePoints->SetPoint(2,sPoint3);
00178
00179 myFilter->SetSourceLandmarks(sourcePoints);
00180
00181 output1->Update();
00182
00183 MITK_TEST_CONDITION(
00184 mitk::Equal(output1->GetPosition(), resultPos1),
00185 "Testing ND1 position correctly transformed after sourcePointSet changed");
00186
00187 MITK_TEST_CONDITION(
00188 mitk::Equal(output2->GetPosition(), resultPos2),
00189 "Testing ND2 position correctly transformed after sourcePointSet changed");
00190
00191
00192 {
00193 mitk::PointSet::Pointer sourcePoints = mitk::PointSet::New();
00194 mitk::Point3D s1, s2, s3, s4, s5, s6;
00195 mitk::FillVector3D(s1, 1.1, 1.1, 1.1);
00196 mitk::FillVector3D(s2, 2.2, 2.2, 2.2);
00197 mitk::FillVector3D(s3, 3.3, 3.3, 3.3);
00198 mitk::FillVector3D(s4, 4.4, 4.4, 4.4);
00199 mitk::FillVector3D(s5, 5.5, 5.5, 5.5);
00200 mitk::FillVector3D(s6, 6.6, 6.6, 6.6);
00201 sourcePoints->SetPoint(1, s4);
00202 sourcePoints->SetPoint(2, s6);
00203 sourcePoints->SetPoint(3, s3);
00204 sourcePoints->SetPoint(4, s1);
00205 sourcePoints->SetPoint(5, s2);
00206 sourcePoints->SetPoint(6, s5);
00207
00208 mitk::PointSet::Pointer targetPoints = mitk::PointSet::New();
00209 mitk::Point3D t1, t2, t3, t4, t5, t6;
00210 mitk::FillVector3D(t1, 2.1, 2.1, 102.1);
00211 mitk::FillVector3D(t2, 3.2, 3.2, 103.2);
00212 mitk::FillVector3D(t3, 4.3, 4.3, 104.3);
00213 mitk::FillVector3D(t4, 5.4, 5.4, 105.4);
00214 mitk::FillVector3D(t5, 6.5, 6.5, 106.5);
00215 mitk::FillVector3D(t6, 7.6, 7.6, 107.6);
00216 targetPoints->SetPoint(1, t1);
00217 targetPoints->SetPoint(2, t2);
00218 targetPoints->SetPoint(3, t3);
00219 targetPoints->SetPoint(4, t4);
00220 targetPoints->SetPoint(5, t5);
00221 targetPoints->SetPoint(6, t6);
00222
00223 mitk::NavigationDataLandmarkTransformFilter::Pointer myFilter = mitk::NavigationDataLandmarkTransformFilter::New();
00224 myFilter->UseICPInitializationOn();
00225 myFilter->SetSourceLandmarks(sourcePoints);
00226 myFilter->SetTargetLandmarks(targetPoints);
00227
00228
00229 mitk::NavigationData::PositionType initialPos1, resultPos1;
00230 mitk::FillVector3D(initialPos1, 1.1, 1.1, 1.1);
00231 mitk::FillVector3D(resultPos1, 2.1, 2.1, 102.1);
00232 mitk::NavigationData::OrientationType initialOri(0.1, 0.1, 0.1, 0.1);
00233 mitk::ScalarType initialError(0.0);
00234 bool initialValid(true);
00235 mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
00236 nd1->SetPosition(initialPos1);
00237 nd1->SetOrientation(initialOri);
00238 nd1->SetPositionAccuracy(initialError);
00239 nd1->SetDataValid(initialValid);
00240
00241 myFilter->SetInput(0, nd1);
00242 mitk::NavigationData::Pointer output = myFilter->GetOutput(0);
00243
00244 output->Update();
00245
00246
00247 }
00248
00249
00250 mitk::NavigationDataLandmarkTransformFilter::Pointer myFilter2 = mitk::NavigationDataLandmarkTransformFilter::New();
00251 MITK_TEST_CONDITION_REQUIRED(myFilter2.IsNotNull(),"Testing instantiation for second filter");
00252
00253 mitk::PointSet::Pointer sourcePoints2 = mitk::PointSet::New();
00254 MITK_TEST_FOR_EXCEPTION(std::exception, myFilter2->SetSourceLandmarks(sourcePoints2););
00255
00256
00257
00258 mitk::NavigationDataLandmarkTransformFilter::Pointer myFilter3 = mitk::NavigationDataLandmarkTransformFilter::New();
00259 MITK_TEST_CONDITION_REQUIRED(myFilter3.IsNotNull(),"Testing instantiation for second filter");
00260
00261 mitk::PointSet::Pointer targetPoints2 = mitk::PointSet::New();
00262 MITK_TEST_FOR_EXCEPTION(std::exception, myFilter3->SetTargetLandmarks(targetPoints2););
00263
00264
00265
00266 myFilter=NULL;
00267 myFilter = mitk::NavigationDataLandmarkTransformFilter::New();
00268
00269 mitk::FillVector3D(sPoint1, 1.1, 1.1, 1.1);
00270 mitk::FillVector3D(sPoint2, 1.1, -1.1, 1.1);
00271 mitk::FillVector3D(sPoint3, -1.1, -1.1, 1.1);
00272
00273 mitk::FillVector3D(tPoint1, -1.1, 1.1, 1.1);
00274 mitk::FillVector3D(tPoint2, 1.1, 1.1, 1.1);
00275 mitk::FillVector3D(tPoint3, 1.1, -1.1, 1.1);
00276
00277 sourcePoints->SetPoint(0,sPoint1);
00278 sourcePoints->SetPoint(1,sPoint2);
00279 sourcePoints->SetPoint(2,sPoint3);
00280
00281 targetPoints->SetPoint(0,tPoint1);
00282 targetPoints->SetPoint(1,tPoint2);
00283 targetPoints->SetPoint(2,tPoint3);
00284
00285 myFilter->SetSourceLandmarks(sourcePoints);
00286 myFilter->SetTargetLandmarks(targetPoints);
00287
00288
00289 mitk::NavigationData::OrientationType initialQuat(0.0, 0.0, 0.0, 1.0);
00290 mitk::NavigationData::OrientationType resultQuat(0.0, 0.0, -0.7071, -0.7071);
00291
00292
00293 mitk::FillVector3D(initialPos1, 2.2, 2.2, 2.2);
00294 mitk::FillVector3D(resultPos1, -2.2, 2.2, 2.2);
00295
00296 nd1->SetOrientation(initialQuat);
00297 nd1->SetPosition(initialPos1);
00298
00299 myFilter->SetInput(0,nd1);
00300
00301 output1 = myFilter->GetOutput(0);
00302 output1->Update();
00303
00304 MITK_TEST_CONDITION(
00305 mitk::Equal(output1->GetPosition(), resultPos1),
00306 "Testing ND1 position correctly transformed ");
00307
00308 MITK_TEST_CONDITION(
00309 mitk::Equal(output1->GetOrientation(), resultQuat),
00310 "Testing ND1 orientation correctly transformed ");
00311
00312
00313 mitk::PointSet::Pointer refSet = mitk::PointSet::New();
00314 mitk::PointSet::Pointer movSet = mitk::PointSet::New();
00315
00316 mitk::Point3D refPoint;
00317 mitk::Point3D movPoint;
00318
00319
00320 refPoint.Fill(0); refSet->SetPoint(0, refPoint);
00321 movPoint.Fill(1); movSet->SetPoint(0, movPoint);
00322
00323
00324 refPoint[0]=3; refPoint[1]=0; refPoint[2]=0; refSet->SetPoint(1, refPoint);
00325 movPoint[0]=2; movPoint[1]=1; movPoint[2]=1; movSet->SetPoint(1, movPoint);
00326
00327
00328 refPoint[0]=0; refPoint[1]=0; refPoint[2]=3; refSet->SetPoint(2, refPoint);
00329 movPoint[0]=1; movPoint[1]=1; movPoint[2]=2; movSet->SetPoint(2, movPoint);
00330
00331
00332 refPoint[0]=3; refPoint[1]=0; refPoint[2]=3; refSet->SetPoint(3, refPoint);
00333 movPoint[0]=2; movPoint[1]=1; movPoint[2]=2; movSet->SetPoint(3, movPoint);
00334
00335
00336
00337 refPoint[0]=0; refPoint[1]=3; refPoint[2]=0; refSet->SetPoint(4, refPoint);
00338 movPoint[0]=1; movPoint[1]=2; movPoint[2]=1; movSet->SetPoint(4, movPoint);
00339
00340
00341 refPoint[0]=3; refPoint[1]=3; refPoint[2]=0; refSet->SetPoint(5, refPoint);
00342 movPoint[0]=2; movPoint[1]=2; movPoint[2]=1; movSet->SetPoint(5, movPoint);
00343
00344
00345 refPoint[0]=0; refPoint[1]=3; refPoint[2]=3; refSet->SetPoint(6, refPoint);
00346 movPoint[0]=1; movPoint[1]=2; movPoint[2]=2; movSet->SetPoint(6, movPoint);
00347
00348
00349 refPoint[0]=3; refPoint[1]=3; refPoint[2]=3; refSet->SetPoint(7, refPoint);
00350 movPoint[0]=2; movPoint[1]=2; movPoint[2]=2; movSet->SetPoint(7, movPoint);
00351
00352 mitk::NavigationDataLandmarkTransformFilter::Pointer myFREFilter = mitk::NavigationDataLandmarkTransformFilter::New();
00353 myFREFilter->SetSourceLandmarks(refSet);
00354 myFREFilter->SetTargetLandmarks(movSet);
00355
00356 MITK_TEST_CONDITION_REQUIRED(myFREFilter->GetFRE() == (float) sqrt(3.0),"Testing mean error calculation")
00357 MITK_TEST_CONDITION_REQUIRED(myFREFilter->GetMaxError() == (float) sqrt(3.0),"Testing mean error calculation")
00358 MITK_TEST_CONDITION_REQUIRED(myFREFilter->GetMinError() == (float) sqrt(3.0),"Testing mean error calculation")
00359 MITK_TEST_CONDITION_REQUIRED(myFREFilter->GetRMSError() == (float) sqrt(3.0),"Testing mean error calculation")
00360 MITK_TEST_CONDITION_REQUIRED(myFREFilter->GetFREStdDev() == (float) 0.0,"Testing mean error calculation")
00361
00362
00363 MITK_TEST_END();
00364 }