コード例 #1
0
    bool PointSetWrite(mitk::BaseGeometry* geometry = nullptr)
    {
        try
        {
            m_SavedPointSet = NULL;

            std::ofstream tmpStream;
            m_FilePath = mitk::IOUtil::CreateTemporaryFile(tmpStream) + ".mps";
            MITK_INFO << "PointSet test file at " << m_FilePath;
            mitk::IOUtil::Save(CreateTestPointSet(geometry), m_FilePath);
        }
        catch (std::exception& e)
        {
            MITK_ERROR << "Error during pointset creation: " << e.what();
            return false;
        }

        return true;
    }
コード例 #2
0
int mitkToFDistanceImageToPointSetFilterTest(int /* argc */, char* /*argv*/[])
{
  MITK_TEST_BEGIN("ToFDistanceImageToPointSetFilter");

  mitk::ToFDistanceImageToPointSetFilter::Pointer filter = mitk::ToFDistanceImageToPointSetFilter::New();
  //create test sub set
  MITK_INFO<<"Create test pointset";
  mitk::PointSet::Pointer subSet = CreateTestPointSet();
  //create test image
  unsigned int dimX = 204;
  unsigned int dimY = 204;
  MITK_INFO<<"Create test image";
  mitk::Image::Pointer image = CreateTestImageWithPointSet(1000.0f,dimX,dimY,subSet);
  //initialize intrinsic parameters
  //initialize intrinsic parameters with some arbitrary values
  mitk::ToFProcessingCommon::ToFPoint2D interPixelDistance;
  interPixelDistance[0] = 0.04564;
  interPixelDistance[1] = 0.0451564;
  mitk::ToFProcessingCommon::ToFScalarType focalLengthX = 295.78960;
  mitk::ToFProcessingCommon::ToFScalarType focalLengthY = 296.348535;
  mitk::ToFProcessingCommon::ToFScalarType focalLength = (focalLengthX*interPixelDistance[0]+focalLengthY*interPixelDistance[1])/2.0;
  mitk::ToFProcessingCommon::ToFScalarType k1=-0.36,k2=-0.14,p1=0.001,p2=-0.00;
  mitk::ToFProcessingCommon::ToFPoint2D principalPoint;
  principalPoint[0] = 103.576546;
  principalPoint[1] = 100.1532;
  mitk::CameraIntrinsics::Pointer cameraIntrinsics = mitk::CameraIntrinsics::New();
  cameraIntrinsics->SetFocalLength(focalLengthX,focalLengthY);
  cameraIntrinsics->SetPrincipalPoint(principalPoint[0],principalPoint[1]);
  cameraIntrinsics->SetDistorsionCoeffs(k1,k2,p1,p2);
  // test SetCameraIntrinsics()
  filter->SetCameraIntrinsics(cameraIntrinsics);
  MITK_TEST_CONDITION_REQUIRED((focalLengthX==filter->GetCameraIntrinsics()->GetFocalLengthX()),"Testing SetCameraIntrinsics with focalLength");
  mitk::ToFProcessingCommon::ToFPoint2D pp;
  pp[0] = filter->GetCameraIntrinsics()->GetPrincipalPointX();
  pp[1] = filter->GetCameraIntrinsics()->GetPrincipalPointY();
  MITK_TEST_CONDITION_REQUIRED(mitk::Equal(principalPoint,pp),"Testing SetCameraIntrinsics with principalPoint()");
  // test SetInterPixelDistance()

  filter->SetInterPixelDistance(interPixelDistance);
  mitk::ToFProcessingCommon::ToFPoint2D ipD = filter->GetInterPixelDistance();
  MITK_TEST_CONDITION_REQUIRED(mitk::Equal(ipD,interPixelDistance),"Testing Set/GetInterPixelDistance()");

  // test Set/GetInput()
  filter->SetInput(image);
  MITK_TEST_CONDITION_REQUIRED((image==filter->GetInput()),"Testing Set/GetInput()");

  // test filter without subset
  MITK_INFO<<"Test filter without subset";
  mitk::PointSet::Pointer expectedResult = mitk::PointSet::New();
  unsigned int counter = 0;
  for (unsigned int j=0; j<dimY; j++)
  {
    for (unsigned int i=0; i<dimX; i++)
    {
      mitk::Index3D index;
      index[0] = i;
      index[1] = j;
      index[2] = 0;
      mitk::ScalarType distance = image->GetPixelValueByIndex(index);
      mitk::Point3D coordinate = mitk::ToFProcessingCommon::IndexToCartesianCoordinates(i,j,distance,focalLength,interPixelDistance,principalPoint);
      expectedResult->InsertPoint(counter,coordinate);
      counter++;
    }
  }
  filter->Update();
  mitk::PointSet::Pointer result = filter->GetOutput();
  MITK_TEST_CONDITION_REQUIRED((expectedResult->GetSize()==result->GetSize()),"Test if point set size is equal");
  MITK_TEST_CONDITION_REQUIRED(PointSetsEqual(expectedResult,result),"Testing filter without subset");

  // compare filter result with ToFDistanceImageToSurfaceFilter
  mitk::ToFDistanceImageToSurfaceFilter::Pointer surfaceFilter = mitk::ToFDistanceImageToSurfaceFilter::New();
  surfaceFilter->SetInput(image);
  surfaceFilter->SetInterPixelDistance(interPixelDistance);
  surfaceFilter->SetCameraIntrinsics(cameraIntrinsics);  
  mitk::Surface::Pointer surface = surfaceFilter->GetOutput();
  surface->Update();
  // create point set from surface
  vtkPolyData* polyData = surface->GetVtkPolyData();
  int numberOfPoints = polyData->GetNumberOfPoints();
  mitk::PointSet::Pointer pointSet = mitk::PointSet::New();
  for (int i=0; i<numberOfPoints; i++)
  {
    double* currentPoint = polyData->GetPoint(i);
    mitk::Point3D point;
    point[0] = currentPoint[0];
    point[1] = currentPoint[1];
    point[2] = currentPoint[2];
    pointSet->InsertPoint(i,point);
  }
  MITK_TEST_CONDITION_REQUIRED((pointSet->GetSize()==result->GetSize()),"Test if point set size is equal");
  MITK_TEST_CONDITION_REQUIRED(PointSetsEqual(pointSet,result),"Compare with surface points");
  
  // test filter with subset
  MITK_INFO<<"Test filter with subset";
  filter = mitk::ToFDistanceImageToPointSetFilter::New();
  filter->SetInput(image);
  filter->SetInterPixelDistance(interPixelDistance);
  filter->SetCameraIntrinsics(cameraIntrinsics);
  expectedResult = mitk::PointSet::New();
  counter = 0;
  for (unsigned int i=0; i<subSet->GetSize(); i++)
  {
    mitk::Point3D point = subSet->GetPoint(i);
    mitk::Index3D index;
    index[0] = point[0];
    index[1] = point[1];
    index[2] = 0;
    mitk::ScalarType distance = image->GetPixelValueByIndex(index);
    mitk::Point3D coordinate = mitk::ToFProcessingCommon::IndexToCartesianCoordinates(point[0],point[1],
                                                                                      distance,focalLength,interPixelDistance,principalPoint);
    expectedResult->InsertPoint(counter,coordinate);
    counter++;
  }
  filter->SetSubset(subSet);
  filter->Modified();
  filter->Update();
  result = filter->GetOutput();
  MITK_TEST_CONDITION_REQUIRED((expectedResult->GetSize()==result->GetSize()),"Test if point set size is equal");
  MITK_TEST_CONDITION_REQUIRED(PointSetsEqual(expectedResult,result),"Testing filter with subset");

  MITK_TEST_END();

}