74 connect((QObject*)(
m_Controls->m_RegisterFiducialsBtn), SIGNAL(clicked()),
this, SLOT(
Register()));
279 mitk::DataNode::Pointer ImageFiducialsNode = mitk::DataNode::New();
280 mitk::PointSet::Pointer imagePointSet = mitk::PointSet::New();
281 ImageFiducialsNode->SetData(imagePointSet);
282 ImageFiducialsNode->SetName(
"Image Point Set");
287 mitk::DataNode::Pointer TrackerFiducialsNode = mitk::DataNode::New();
288 mitk::PointSet::Pointer trackerPointSet = mitk::PointSet::New();
289 TrackerFiducialsNode->SetData(trackerPointSet);
290 TrackerFiducialsNode->SetName(
"Tracker Point Set");
319 mitk::PointSet::Pointer imageFiducials =
dynamic_cast<mitk::PointSet*
>(
m_ImageFiducialsNode->GetData());
320 mitk::PointSet::Pointer trackerFiducials =
dynamic_cast<mitk::PointSet*
>(
m_TrackerFiducialsNode->GetData());
321 if (trackerFiducials->GetSize() != imageFiducials->GetSize())
323 MITK_WARN <<
"Not the same number of fiducials, cannot register";
326 else if (trackerFiducials->GetSize() < 3)
328 MITK_WARN <<
"Need at least 3 fiducials, cannot register";
336 for (
int i = 0; i<imageFiducials->GetSize(); i++)
338 double point[3] = { imageFiducials->GetPoint(i)[0], imageFiducials->GetPoint(i)[1], imageFiducials->GetPoint(i)[2] };
339 sourcePoints->InsertNextPoint(point);
340 double point_targets[3] = { trackerFiducials->GetPoint(i)[0], trackerFiducials->GetPoint(i)[1], trackerFiducials->GetPoint(i)[2] };
341 targetPoints->InsertNextPoint(point_targets);
347 transform->SetSourceLandmarks(sourcePoints);
348 transform->SetTargetLandmarks(targetPoints);
349 transform->SetModeToRigidBody();
350 transform->Modified();
361 itk::Matrix<float, 3, 3> rotationFloat = itk::Matrix<float, 3, 3>();
362 itk::Vector<float, 3> translationFloat = itk::Vector<float, 3>();
363 itk::Matrix<double, 3, 3> rotationDouble = itk::Matrix<double, 3, 3>();
364 itk::Vector<double, 3> translationDouble = itk::Vector<double, 3>();
367 for (
int k = 0; k<3; k++)
for (
int l = 0; l<3; l++)
369 rotationFloat[k][l] = m->GetElement(k, l);
370 rotationDouble[k][l] = m->GetElement(k, l);
373 for (
int k = 0; k<3; k++)
375 translationFloat[k] = m->GetElement(k, 3);
376 translationDouble[k] = m->GetElement(k, 3);
379 mitk::AffineTransform3D::Pointer mitkTransform = mitk::AffineTransform3D::New();
380 mitkTransform->SetMatrix(rotationDouble);
381 mitkTransform->SetOffset(translationDouble);
393 mitk::AffineTransform3D::Pointer imageTransform =
m_ImageNode->GetData()->GetGeometry()->GetIndexToWorldTransform();
394 imageTransform->Compose(mitkTransform);
395 mitk::AffineTransform3D::Pointer newImageTransform = mitk::AffineTransform3D::New();
396 itk::Matrix<mitk::ScalarType, 3, 3> rotationFloatNew = imageTransform->GetMatrix();
397 itk::Vector<mitk::ScalarType, 3> translationFloatNew = imageTransform->GetOffset();
398 newImageTransform->SetMatrix(rotationFloatNew);
399 newImageTransform->SetOffset(translationFloatNew);
400 m_ImageNode->GetData()->GetGeometry()->SetIndexToWorldTransform(newImageTransform);
404 if (this->
m_Controls->m_MoveImagePoints->isChecked())
407 mitk::PointSet::Pointer pointSet_moved = mitk::PointSet::New();
409 for (
int i = 0; i < pointSet_orig->GetSize(); i++)
411 pointSet_moved->InsertPoint(mitkTransform->TransformPoint(pointSet_orig->GetPoint(i)));
414 pointSet_orig->Clear();
415 for (
int i = 0; i < pointSet_moved->GetSize(); i++)
416 pointSet_orig->InsertPoint(pointSet_moved->GetPoint(i));
420 mitk::RenderingManager::GetInstance()->InitializeViewsByBoundingObjects(
m_DataStorage);