tomas
(tomas)
September 9, 2018, 11:24pm
1
Operating system: Windows 10
Slicer version: 4.9.0
Hi,
I have some query regarding “Fidutial Registration wizard”.
I am using the ‘fiducial registration wizard’ module transform type “rigid” and “Similarity" Registration for my master thesis. I need some extra information about it:
Is the registration algorithm ICP method? or what is the mathematical model?
How can I quantify or compare the performance of registration by this module?
Does exist a way to calculate an error after the registration (for qualitative assessment and visualization options)?
Thanks
Tomas
Hi Thomas,
I am assuming you are referring to the the Fiducial Registration Module in SlicerIGT.
Is the registration algorithm ICP method? or what is the mathematical model?
This module uses vtkIterativeClosestPointTransform
vtkSmartPointer< vtkPolyData > unmatchedSourcePointsPolyData = vtkSmartPointer< vtkPolyData >::New();
vtkPointMatcher::GeneratePolyDataFromPoints( this->InputSourcePoints, unmatchedSourcePointsPolyData );
vtkSmartPointer< vtkTransformPolyDataFilter > initialRegistrationTransformFilter = vtkSmartPointer< vtkTransformPolyDataFilter >::New();
initialRegistrationTransformFilter->SetTransform( initialRegistrationTransform );
initialRegistrationTransformFilter->SetInputData( unmatchedSourcePointsPolyData );
initialRegistrationTransformFilter->Update();
vtkPolyData* initiallyRegisteredSourcePointsPolyData = vtkPolyData::SafeDownCast( initialRegistrationTransformFilter->GetOutput() );
if ( initiallyRegisteredSourcePointsPolyData == NULL )
{
vtkWarningMacro( "Initially registered source points poly data is null." );
return false;
}
vtkSmartPointer< vtkPolyData > unmatchedTargetPointsPolyData = vtkSmartPointer< vtkPolyData >::New();
vtkPointMatcher::GeneratePolyDataFromPoints( this->InputTargetPoints, unmatchedTargetPointsPolyData );
// Do some ICP to refine the result
vtkSmartPointer< vtkIterativeClosestPointTransform > icpTransform = vtkSmartPointer< vtkIterativeClosestPointTransform >::New();
How can I quantify or compare the performance of registration by this module?
The module returns RMS error.
Does exist a way to calculate an error after the registration (for qualitative assessment and visualization options)?
You can use Checkerboard or subtract image modules to evaluate the registration visually.
HTH,
Andinet
lassoan
(Andras Lasso)
September 11, 2018, 6:28pm
4
Note that ICP is only used as an optional pre-processing step for automatic matching of out-of-order or missing points. Transform is computed using vtkLandmarkTransform class:
return false;
}
// compute registration
int registrationMode = fiducialRegistrationWizardNode->GetRegistrationMode();
if (registrationMode == vtkMRMLFiducialRegistrationWizardNode::REGISTRATION_MODE_RIGID ||
registrationMode == vtkMRMLFiducialRegistrationWizardNode::REGISTRATION_MODE_SIMILARITY)
{
// Compute transformation matrix. We don't set the landmark transform in the node directly because
// vtkLandmarkTransform is not fully supported (e.g., it cannot be stored in file).
vtkNew<vtkLandmarkTransform> landmarkTransform;
landmarkTransform->SetSourceLandmarks(fromPointsOrdered);
landmarkTransform->SetTargetLandmarks(toPointsOrdered);
if (registrationMode == vtkMRMLFiducialRegistrationWizardNode::REGISTRATION_MODE_RIGID)
{
landmarkTransform->SetModeToRigidBody();
}
else
{
landmarkTransform->SetModeToSimilarity();
}
vtkLandmarkTransform class implements Horn’s method:
The solution is based on
Berthold K. P. Horn (1987),
"Closed-form solution of absolute orientation using unit quaternions,"
Journal of the Optical Society of America A, 4:629-642
1 Like