[IGSTK-Users] question about example LandmarkRegistration1 ?
Patrick Cheng
patrick.p.cheng at gmail.com
Sun Jul 31 09:24:51 EDT 2011
Hi Agata,
If you want to return a double pointer, you can try this code:
Double pReturn[16];
if(lrtcb->GotTransform())
{
igstk::Transform transform = lrtcb->GetTransform();
vtkMatrix4x4 * t = vtkMatrix4x4::New();;
transform.ExportTransform( * t );
for ( int i = 0; i < 3; i++ )
{
for ( int j = 0; j < 3; j++ )
{
pReturn = t->GetElement(i,j);
}
}
t->Delete();
}
return pReturn;
On Sun, Jul 31, 2011 at 8:40 AM, Agata Krasoń <agatakrason at gmail.com> wrote:
> Hi all Users & Developers,
>
>
> I' m fresh user. I'm begining my adventure with IGSTK...
> I 'm just working with example LandmarkRegistration1(Sandbox).
> I have to do a DLL & wrapper with this example.
> I have already made a method with this transformation but I have a problem
> with *returned type*.
> I want to return for example 1 element (point) after transformation .
> Could You help me please ?
> I would appreciate for any help .
>
>
> Code :
>
> extern "C"
> {
>
> * __declspec(dllexport) double RegistrationDLL(double tab[30])*
> {
>
> igstk::RealTimeClock::Initialize();
>
>
> // BeginCodeSnippet
> typedef igstk::Object::LoggerType LoggerType;
> typedef itk::StdStreamLogOutput LogOutputType;
>
> typedef igstk::Landmark3DRegistration
> Landmark3DRegistrationType;
> typedef igstk::Landmark3DRegistration::LandmarkPointContainerType
> LandmarkPointContainerType;
> typedef igstk::Landmark3DRegistration::LandmarkImagePointType
> LandmarkImagePointType;
> typedef igstk::Landmark3DRegistration::LandmarkTrackerPointType
> LandmarkTrackerPointType;
> typedef Landmark3DRegistrationType::TransformType::OutputVectorType
> OutputVectorType;
> typedef igstk::Transform TransformType;
> // EndCodeSnippet
>
>
> // BeginLatex
> //
> // Then, the registration component is instantiated as follows:
> //
> // EndLatex
>
> // BeginCodeSnippet
> Landmark3DRegistrationType::Pointer landmarkRegister =
> Landmark3DRegistrationType::New();
> // EndCodeSnippet
>
>
> // BeginLatex
> //
> // Next, the landmark containers that hold the landmark image and tracker
> // coordinates are instantiated:
> //
> // EndLatex
>
> // BeginCodeSnippet
> LandmarkPointContainerType imagePointContainer;
> LandmarkPointContainerType trackerPointContainer;
> // EndCodeSnippet
>
>
> LandmarkImagePointType imagePoint;
> LandmarkTrackerPointType trackerPoint;
>
> // BeginLatex
> //
> // Then, error event callback objects are instantiated and added to the
> observer
> // list of the registration component, as follows:
> //
> // EndLatex
>
> // BeginCodeSnippet
> Landmark3DRegistrationInvalidRequestCallback::Pointer
> lrcb =
> Landmark3DRegistrationInvalidRequestCallback::New();
>
> typedef igstk::InvalidRequestErrorEvent InvalidRequestEvent;
>
> landmarkRegister->AddObserver( InvalidRequestEvent(), lrcb );
>
> Landmark3DRegistrationErrorCallback::Pointer ecb =
> Landmark3DRegistrationErrorCallback::New();
> typedef igstk::Landmark3DRegistration::TransformComputationFailureEvent
>
> ComputationFailureEvent;
> landmarkRegister->AddObserver( ComputationFailureEvent(), ecb );
>
> // EndCodeSnippet
>
> // BeginLatex
> //
> // A logger can then be connected to the registration component for
> // debugging purpose, as follows:
> //
> // EndLatex
>
>
> // BeginCodeSnippet
> LoggerType::Pointer logger = LoggerType::New();
> LogOutputType::Pointer logOutput = LogOutputType::New();
> logOutput->SetStream( std::cout );
> logger->AddLogOutput( logOutput );
> logger->SetPriorityLevel( LoggerType::DEBUG );
> landmarkRegister->SetLogger( logger );
> // EndCodeSnippet
>
>
> // BeginLatex
> //
> // Next, landmark points are added to the image and tracker containers.
> The
> // state machine of this registration component is designed so that the
> image
> // and tracker coordinates that correspond to each landmark are added
> // consecutively. This scheme prevents the mismatch in landmark
> correspondence
> // that could occur when all landmarks image coordinates are recorded first
> and
> // followed by the tracker coordinates. This design choice is consistent
> with
> // the ``safety by design'' philosophy of IGSTK. The commands are as
> follows:
> //
> //EndLatex
>
> // BeginCodeSnippet
> // Add entry
> imagePoint[0] = tab[0];
> imagePoint[1] = tab[1];
> imagePoint[2] = tab[2];
> imagePointContainer.push_back(imagePoint);
> landmarkRegister->RequestAddImageLandmarkPoint(imagePoint);
>
> trackerPoint[0] = tab[3];
> trackerPoint[1] = tab[4];
> trackerPoint[2] = tab[5];
> trackerPointContainer.push_back(trackerPoint);
> landmarkRegister->RequestAddTrackerLandmarkPoint(trackerPoint);
>
> // Add 1st landmark
> imagePoint[0] = tab[6];
> imagePoint[1] = tab[7];
> imagePoint[2] = tab[8];
> imagePointContainer.push_back(imagePoint);
> landmarkRegister->RequestAddImageLandmarkPoint(imagePoint);
>
> trackerPoint[0] = tab[9];
> trackerPoint[1] = tab[10];
> trackerPoint[2] = tab[11];
> trackerPointContainer.push_back(trackerPoint);
> landmarkRegister->RequestAddTrackerLandmarkPoint(trackerPoint);
>
> // Add 2nd landmark
> imagePoint[0] = tab[12];
> imagePoint[1] = tab[13];
> imagePoint[2] = tab[14];
> imagePointContainer.push_back(imagePoint);
> landmarkRegister->RequestAddImageLandmarkPoint(imagePoint);
>
> trackerPoint[0] = tab[15];
> trackerPoint[1] = tab[16];
> trackerPoint[2] = tab[17];
> trackerPointContainer.push_back(trackerPoint);
> landmarkRegister->RequestAddTrackerLandmarkPoint(trackerPoint);
>
> // EndCodeSnippet
>
> // BeginLatex
> //
> // More landmarks can be added for the transform computation.
> //
> // EndLatex
>
> // Add 3n landmark
> imagePoint[0] = tab[18];
> imagePoint[1] = tab[19];
> imagePoint[2] = tab[20];
> imagePointContainer.push_back(imagePoint);
> landmarkRegister->RequestAddImageLandmarkPoint(imagePoint);
>
> trackerPoint[0] = tab[21];
> trackerPoint[1] = tab[22];
> trackerPoint[2] = tab[23];
> trackerPointContainer.push_back(trackerPoint);
> landmarkRegister->RequestAddTrackerLandmarkPoint(trackerPoint);
>
> // Add target
> imagePoint[0] = tab[24];
> imagePoint[1] = tab[25];
> imagePoint[2] = tab[26];
> imagePointContainer.push_back(imagePoint);
> landmarkRegister->RequestAddImageLandmarkPoint(imagePoint);
>
> trackerPoint[0] = tab[27];
> trackerPoint[1] = tab[28];
> trackerPoint[2] = tab[29];
> trackerPointContainer.push_back(trackerPoint);
> landmarkRegister->RequestAddTrackerLandmarkPoint(trackerPoint);
>
> // BeginLatex
> //
> // After all landmark coordinates are added, the transform computation
> is
> // requested as follows:
> //
> // EndLatex
>
> // Calculate transform
>
> // BeginCodeSnippet
> landmarkRegister->RequestComputeTransform();
> // EndCodeSnippet
>
> typedef itk::VersorRigid3DTransform<double>
> VersorRigid3DTransformType;
> typedef VersorRigid3DTransformType::ParametersType ParametersType;
>
>
>
>
> TransformType transform;
> ParametersType parameters(6);
>
> // BeginLatex
> //
> // To access the transform parameters, a GetTransform callback is
> instantiated
> // to observe the transform event, as follows:
> //
> // EndLatex
>
> // BeginCodeSnippet
> Landmark3DRegistrationGetTransformCallback::Pointer lrtcb =
> Landmark3DRegistrationGetTransformCallback::New();
>
> landmarkRegister->AddObserver(
> igstk::CoordinateSystemTransformToEvent(), lrtcb );
> //EndCodeSnippet
>
>
> // BeginLatex
> //
> // To request that the registration component throw an event loaded with
> // transform parameters, a \code{RequestGetTransform} function is invoked
> as
> // follows:
> //
> // EndLatex
>
> // BeginCodeSnippet
> landmarkRegister->RequestGetTransformFromTrackerToImage();
> std::cout<<" "<<std::endl;
> std::cout << "Transform " << transform << std::endl;
>
> // EndCodeSnippet
>
>
>
>
>
> * // return tab[4]; // ????? *
> *
> *
> *return ... ?? *
> }
>
> }
>
> Best,
> Agata
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/cgi-bin/mailman/listinfo/igstk-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/igstk-users/attachments/20110731/c50ded68/attachment.html>
More information about the IGSTK-Users
mailing list