bool itkDataSHImageWriterBase::write(const QString& path, PixelType dummyArgument) { typedef typename itk::VectorImage<PixelType, 3> SHImageType; typedef typename SHImageType::Pointer SHImageTypePointer; SHImageTypePointer image = dynamic_cast< SHImageType* >( (itk::Object*)(this->data()->output()) ); typedef typename itk::ImageFileWriter<SHImageType>::Pointer ImageFileWriterPointer; ImageFileWriterPointer myWriter = itk::ImageFileWriter<SHImageType>::New(); myWriter->SetFileName(path.toLatin1().constData()); myWriter->SetInput(/*mySH*/image); try { myWriter->Write(); } catch(itk::ExceptionObject &e) { dtkDebug() << e.GetDescription(); return false; } return true; }
bool itkDataTensorImageWriterBase::write(const QString& path, PixelType dummyArgument) { typedef typename itk::Vector<PixelType, 6> VectorType; typedef typename itk::Image<VectorType, 3> VectorImageType; typedef typename itk::Tensor<PixelType, 3> TensorType; typedef typename itk::Image<TensorType, 3> TensorImageType; typedef typename VectorImageType::Pointer VectorImageTypePointer; VectorImageTypePointer myTensorImage = VectorImageType::New(); typedef typename TensorImageType::Pointer TensorImageTypePointer; TensorImageTypePointer image = dynamic_cast< TensorImageType* >( (itk::Object*)(this->data()->output()) ); typedef typename TensorImageType::RegionType TensorImageTypeRegionType; TensorImageTypeRegionType region = image->GetLargestPossibleRegion(); myTensorImage->SetRegions (region); myTensorImage->SetSpacing (image->GetSpacing()); myTensorImage->SetOrigin (image->GetOrigin()); myTensorImage->SetDirection (image->GetDirection()); try { myTensorImage->Allocate(); } catch (itk::ExceptionObject &e) { std::cerr << e; throw itk::ExceptionObject (__FILE__,__LINE__,"Error during memory allocation."); } typedef itk::ImageRegionConstIterator<TensorImageType> IteratorType; IteratorType it (image, image->GetLargestPossibleRegion()); itk::ImageRegionIteratorWithIndex<VectorImageType> itOut(myTensorImage, myTensorImage->GetLargestPossibleRegion()); while( !it.IsAtEnd() ) { TensorType tensor = it.Get(); VectorType vec; for( unsigned int i=0; i<6; i++) { vec[i] = static_cast<float>(tensor[i]); } itOut.Set (vec); ++it; ++itOut; } typedef typename itk::ImageFileWriter<VectorImageType>::Pointer ImageFileWriterPointer; ImageFileWriterPointer myWriter = itk::ImageFileWriter<VectorImageType>::New(); myWriter->SetFileName(path.toAscii().constData()); myWriter->SetInput(myTensorImage); try { myWriter->Write(); } catch(itk::ExceptionObject &e) { qDebug() << e.GetDescription(); return false; } return true; }