39 MITK_TEST_BEGIN(
"ToFDistanceImageToSurfaceFilter");
40 mitk::ToFDistanceImageToSurfaceFilter::Pointer filter = mitk::ToFDistanceImageToSurfaceFilter::New();
42 unsigned int dimX =204;
43 unsigned int dimY =204;
44 mitk::Image::Pointer image = mitk::ImageGenerator::GenerateRandomImage<float>(dimX,dimY);
49 focalLengthXY[0]=focalLengthX;
50 focalLengthXY[1]=focalLengthY;
53 principalPoint[0] = 103.576546;
54 principalPoint[1] = 100.1532;
55 mitk::CameraIntrinsics::Pointer cameraIntrinsics = mitk::CameraIntrinsics::New();
56 cameraIntrinsics->SetFocalLength(focalLengthX,focalLengthY);
57 cameraIntrinsics->SetPrincipalPoint(principalPoint[0],principalPoint[1]);
58 cameraIntrinsics->SetDistorsionCoeffs(k1,k2,p1,p2);
60 filter->SetCameraIntrinsics(cameraIntrinsics);
61 MITK_TEST_CONDITION_REQUIRED((focalLengthX==filter->GetCameraIntrinsics()->GetFocalLengthX()),
"Testing SetCameraIntrinsics with focalLength");
63 pp[0] = filter->GetCameraIntrinsics()->GetPrincipalPointX();
64 pp[1] = filter->GetCameraIntrinsics()->GetPrincipalPointY();
65 MITK_TEST_CONDITION_REQUIRED(
mitk::Equal(principalPoint,pp),
"Testing SetCameraIntrinsics with principalPoint()");
68 interPixelDistance[0] = 0.04564;
69 interPixelDistance[1] = 0.0451564;
70 filter->SetInterPixelDistance(interPixelDistance);
71 ToFPoint2D ipD = filter->GetInterPixelDistance();
72 MITK_TEST_CONDITION_REQUIRED(
mitk::Equal(ipD,interPixelDistance),
"Testing Set/GetInterPixelDistance()");
79 filter->SetInput(image);
80 MITK_TEST_CONDITION_REQUIRED((image==filter->GetInput()),
"Testing Set/GetInput()");
83 MITK_INFO<<
"Test filter with subset without interpixeldistance ";
88 expectedResult->SetDataTypeToDouble();
89 double* point =
new double[3];
94 for (
unsigned int j=0; j<dimX; j++)
96 for (
unsigned int i=0; i<dimY; i++)
98 itk::Index<2> index = { {
static_cast<itk::IndexValueType
>(i),
static_cast< itk::IndexValueType
>( j) } };
103 mitk::ImagePixelReadAccessor<float,2> readAccess(image, image->GetSliceData());
104 distance = readAccess.GetPixelByIndex(index);
106 catch(mitk::Exception& e)
108 MITK_ERROR <<
"Image read exception!" << e.what();
118 point[0] = coordinate[0];
119 point[1] = coordinate[1];
120 point[2] = coordinate[2];
121 unsigned int pointID = index[0] + index[1]*dimY;
125 expectedResult->InsertPoint(pointID,point);
130 mitk::Surface::Pointer resultSurface = filter->GetOutput();
132 result->SetDataTypeToDouble();
133 result = resultSurface->GetVtkPolyData()->GetPoints();
135 MITK_TEST_CONDITION_REQUIRED((expectedResult->GetNumberOfPoints()==result->GetNumberOfPoints()),
"Test if number of points in surface is equal");
136 bool pointSetsEqual =
true;
137 for (
int i=0; i<expectedResult->GetNumberOfPoints(); i++)
139 double* expected = expectedResult->GetPoint(i);
140 double* res = result->GetPoint(i);
143 expectedPoint[0] = expected[0];
144 expectedPoint[1] = expected[1];
145 expectedPoint[2] = expected[2];
147 resultPoint[0] = res[0];
148 resultPoint[1] = res[1];
149 resultPoint[2] = res[2];
154 pointSetsEqual =
false;
157 MITK_TEST_CONDITION_REQUIRED(pointSetsEqual,
"Testing filter without subset");
160 MITK_INFO<<
"Test filter with subset with interpixeldistance ";
164 ToFScalarType focalLength = (focalLengthX*interPixelDistance[0]+focalLengthY*interPixelDistance[1])/2.0;
166 expectedResult->SetDataTypeToDouble();
167 point =
new double[3];
172 for (
unsigned int j=0; j<dimX; j++)
174 for (
unsigned int i=0; i<dimY; i++)
176 itk::Index<2> index = {{
static_cast<itk::IndexValueType
>(i),
static_cast< itk::IndexValueType
>( j )}};
177 float distance = 0.0;
180 mitk::ImagePixelReadAccessor<float,2> readAccess(image, image->GetSliceData());
181 distance = readAccess.GetPixelByIndex(index);
183 catch(mitk::Exception& e)
185 MITK_ERROR <<
"Image read exception!" << e.what();
193 point[0] = coordinate[0];
194 point[1] = coordinate[1];
195 point[2] = coordinate[2];
196 unsigned int pointID = index[0] + index[1]*dimY;
200 expectedResult->InsertPoint(pointID,point);
206 resultSurface = filter->GetOutput();
208 result->SetDataTypeToDouble();
209 result = resultSurface->GetVtkPolyData()->GetPoints();
210 MITK_TEST_CONDITION_REQUIRED((expectedResult->GetNumberOfPoints()==result->GetNumberOfPoints()),
"Test if number of points in surface is equal");
211 pointSetsEqual =
true;
212 for (
int i=0; i<expectedResult->GetNumberOfPoints(); i++)
214 double* expected = expectedResult->GetPoint(i);
215 double* res = result->GetPoint(i);
218 expectedPoint[0] = expected[0];
219 expectedPoint[1] = expected[1];
220 expectedPoint[2] = expected[2];
222 resultPoint[0] = res[0];
223 resultPoint[1] = res[1];
224 resultPoint[2] = res[2];
229 MITK_INFO<<
"expected: "<<expectedPoint;
230 MITK_INFO<<
"result: "<<resultPoint;
231 pointSetsEqual =
false;
234 MITK_TEST_CONDITION_REQUIRED(pointSetsEqual,
"Testing filter without subset");
238 bool backwardTransformationsPointsEqual =
true;
239 for (
int i=0; i<expectedResult->GetNumberOfPoints(); i++)
241 double* expected = expectedResult->GetPoint(i);
242 double* res = result->GetPoint(i);
245 expectedPoint[0] = expected[0];
246 expectedPoint[1] = expected[1];
247 expectedPoint[2] = expected[2];
249 resultPoint[0] = res[0];
250 resultPoint[1] = res[1];
251 resultPoint[2] = res[2];
259 if (!
mitk::Equal(expectedPointBackward,resultPointBackward))
264 backwardTransformationsPointsEqual =
false;
267 MITK_TEST_CONDITION_REQUIRED(backwardTransformationsPointsEqual,
"Testing backward transformation without interpixeldistance");
270 backwardTransformationsPointsEqual =
true;
271 for (
int i=0; i<expectedResult->GetNumberOfPoints(); i++)
273 double* expected = expectedResult->GetPoint(i);
274 double* res = result->GetPoint(i);
277 expectedPoint[0] = expected[0];
278 expectedPoint[1] = expected[1];
279 expectedPoint[2] = expected[2];
281 resultPoint[0] = res[0];
282 resultPoint[1] = res[1];
283 resultPoint[2] = res[2];
291 if (!
mitk::Equal(expectedPointBackward,resultPointBackward))
296 backwardTransformationsPointsEqual =
false;
299 MITK_TEST_CONDITION_REQUIRED(backwardTransformationsPointsEqual,
"Testing backward transformation with interpixeldistance");
303 bool compareToInput =
true;
304 for (
int i=0; i<result->GetNumberOfPoints(); i++)
306 double* res = result->GetPoint(i);
309 resultPoint[0] = res[0];
310 resultPoint[1] = res[1];
311 resultPoint[2] = res[2];
316 itk::Index<2> index = {{ (int) (resultPointBackward[0]+0.5), (int) (resultPointBackward[1]+0.5) }};
317 float distanceBackward = 0.0;
321 mitk::ImagePixelReadAccessor<float,2> readAccess(image, image->GetSliceData());
322 distanceBackward = readAccess.GetPixelByIndex(index);
324 catch(mitk::Exception& e)
326 MITK_ERROR <<
"Image read exception!" << e.what();
329 if (!
mitk::Equal(distanceBackward,(
float) resultPointBackward[2]))
331 MITK_INFO<<
"expected: " << resultPointBackward[2];
332 MITK_INFO<<
"result: "<< distanceBackward;
333 compareToInput =
false;
336 MITK_TEST_CONDITION_REQUIRED(compareToInput,
"Testing backward transformation compared to original image without interpixeldistance");
340 compareToInput =
true;
341 for (
int i=0; i<result->GetNumberOfPoints(); i++)
343 double* res = result->GetPoint(i);
346 resultPoint[0] = res[0];
347 resultPoint[1] = res[1];
348 resultPoint[2] = res[2];
353 itk::Index<2> pixelIndex = {{ (int) (resultPointBackward[0]+0.5), (int) (resultPointBackward[1]+0.5) }};
354 float distanceBackward = 0.0;
357 mitk::ImagePixelReadAccessor<float,2> readAccess(image, image->GetSliceData());
358 distanceBackward = readAccess.GetPixelByIndex(pixelIndex);
360 catch(mitk::Exception& e)
362 MITK_ERROR <<
"Image read exception!" << e.what();
365 if (!
mitk::Equal(distanceBackward, (
float) resultPointBackward[2]))
367 compareToInput =
false;
370 MITK_TEST_CONDITION_REQUIRED(compareToInput,
"Testing backward transformation compared to original image with interpixeldistance");