Hello!
I have been trying to create a 4D image from several 3D images. I manage
to visualize each 3D image correctly by adding a node to the data tree
but I now wanted to organize them in a 4D image and just control the
current timepoint. This would get the data more organized and ease the
visualization of different overlays, etc.
I have an ITK pipeline to generate some binary masks from the different
volumes.
I have something like this:
//============================================================
mitk::Image::Pointer resultImage;
mitk::DataTreeNode::Pointer newNode4D = mitk::DataTreeNode::New();
mitk::Image::Pointer image4D = mitk::Image::New();
mitk::TimeSlicedGeometry::Pointer geom = mitk::TimeSlicedGeometry::New();
//perform processing on all three 3D images
for(int t=0; t<(3);t++) {
(... ITK processing ...)
resultImage = mitk::ImportItkImage(itkImage);
// To init the 4D image with the first resultImage. Is this correct?
if (t==0) {
geom->InitializeEvenlyTimed(resultImage->GetGeometry(),3);
image4D->Initialize ( resultImage->GetPixelType(), *geom);
}
image4D->SetImportVolume(resultImage, t, 0,
mitk::Image::ReferenceMemory);
//----------------------------------------------------------------------------
// Adding each image to a separate node works fine...
//
// mitk::DataTreeNode::Pointer newNode =
mitk::DataTreeNode::New();
// newNode->SetData( resultImage );
//
// newNode->SetProperty("color",
mitk::ColorProperty::New(1.0,0.0,0.0));
//
//
//
// // set some properties
// mitk::DataTreeNodeFactory::SetDefaultImageProperties(
newNode );
// newNode->SetProperty("binary",
mitk::BoolProperty::New(true));
// newNode->SetProperty("name",
mitk::StringProperty::New("output"));
// newNode->SetProperty("color",
mitk::ColorProperty::New(1.0,0.0,0.0));
// //newNode->SetProperty("volumerendering",
mitk::BoolProperty::New(true));
// newNode->SetProperty("layer", mitk::IntProperty::New(1));
// newNode->SetProperty("opacity",
mitk::FloatProperty::New(0.5));
// newNode->SetVisibility(true);
//
// mitk::DataStorage::GetInstance()->Add(newNode);
//
//
//----------------------------------------------------------------------------
} //end of for cycle
newNode4D->SetData( image4D );
newNode4D->SetProperty("color", mitk::ColorProperty::New(1.0,0.0,0.0));
// set some properties
mitk::DataTreeNodeFactory::SetDefaultImageProperties( newNode );
newNode4D->SetProperty("binary", mitk::BoolProperty::New(true));
newNode4D->SetProperty("name", mitk::StringProperty::New("4D"));
newNode4D->SetProperty("color", mitk::ColorProperty::New(1.0,0.0,0.0));
//newNode->SetProperty("volumerendering",
mitk::BoolProperty::New(true));
newNode4D->SetProperty("layer", mitk::IntProperty::New(1));
newNode4D->SetProperty("opacity", mitk::FloatProperty::New(0.5));
newNode4D->SetVisibility(false);
mitk::DataStorage::GetInstance()->Add( newNode4D );
//============================================================
I am using
image4D->SetImportVolume(resultImage, t, 0, mitk::Image::ReferenceMemory);
because SetVolume(resultImage, t) would also crash with a memcpy error.
With the code above it crashes when inside
itkdefaultpixelaccessorfunctor.h. Probably when the image is going to be
rendered?
Can anyone with experience in accomplishing similar operations using
MITK see anything wrong in my code? What is puzzling me is that it works
when I add each image to a separate node.
Thanks in advance for all the help!
Best regards,
Sam
------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
_______________________________________________
mitk-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mitk-users