[Insight-users] rotating with itkVersorTransform
J. Pura
puraj at mail.nih.gov
Fri Feb 26 10:29:43 EST 2010
Here is my code. Thanks. Blob1 is ITKimg3Datlas, Blob2 is ITKimg3Dconv.
// Setup rotation
ImageType3D::Pointer ITKimg3Dconv = ImageType3D::New();
ImageType3D::Pointer ITKimg3Datlas = ImageType3D::New();
TransformType::Pointer transform = TransformType::New();
InterpolatorType::Pointer interpolator = InterpolatorType::New();
CenterType center;
center[0] = fixedCOM_x;
center[1] = fixedCOM_y;
center[2] = fixedCOM_z;
Copy_CISImage_to_ITKImage(img3Dconv, ITKimg3Dconv);
Copy_CISImage_to_ITKImage(img3Datlas, ITKimg3Datlas);
ParametersType initialParameters( transform->GetNumberOfParameters() );
// Set Versors
// Define axis of rotation = vector normal to both primary axes
double rotax1 = primaryAxis_conv.y * primaryAxis_atlas.z -
primaryAxis_conv.z * primaryAxis_atlas.y;
double rotax2 = primaryAxis_conv.z * primaryAxis_atlas.x -
primaryAxis_conv.x * primaryAxis_atlas.z;
double rotax3 = primaryAxis_conv.x * primaryAxis_atlas.y -
primaryAxis_conv.y * primaryAxis_atlas.x;
// factor to create unit vector
double sqrtsumsq = sqrt(pow(rotax1,2.0) + pow(rotax2,2.0) +
pow(rotax3,2.0));
initialParameters[0] = (-rotax1/sqrtsumsq) * sin (angleoffset / 2.0 );
initialParameters[1] = (-rotax2/sqrtsumsq) * sin (angleoffset / 2.0 );
initialParameters[2] = (-rotax3/sqrtsumsq) * sin (angleoffset / 2.0 );
//initialParameters[0] = rotax1 * sin (angleoffsetx / 2.0 );
//initialParameters[1] = rotax2 * sin (angleoffsety / 2.0 );
//initialParameters[2] = rotax3 * sin (angleoffsetz / 2.0 );
// TransformType::OutputVectorType axis;
//axis[0] = 1;
//axis[1] = 0;
//axis[2] = 0;
transform->SetParameters (initialParameters);
transform->SetCenter(center);
//transform->Rotate3D(axis,angleoffsetx,false);
TransformType::Pointer finalTransform = TransformType::New();
finalTransform->SetParameters( transform->GetParameters() );
ResampleFilterType::Pointer resampler = ResampleFilterType::New();
resampler->SetInput( ITKimg3Datlas );
resampler->SetTransform( finalTransform );
resampler->SetInterpolator(interpolator);
resampler->SetSize( ITKimg3Dconv->GetLargestPossibleRegion().GetSize() );
resampler->SetOutputOrigin( ITKimg3Dconv->GetOrigin() );
resampler->SetOutputSpacing( ITKimg3Dconv->GetSpacing() );
resampler->SetDefaultPixelValue( 0 );
resampler->Update();
--
View this message in context: http://n2.nabble.com/rotating-with-itkVersorTransform-tp4638986p4639781.html
Sent from the ITK Insight Users mailing list archive at Nabble.com.
More information about the Insight-users
mailing list