コード例 #1
0
void QmitkQBallReconstructionView::TemplatedAnalyticalQBallReconstruction(
  mitk::DiffusionImage<DiffusionPixelType>* vols, float lambda,
  std::string nodename, std::vector<mitk::DataNode::Pointer>* nodes,
  int normalization)
{
  typedef itk::AnalyticalDiffusionQballReconstructionImageFilter
    <DiffusionPixelType,DiffusionPixelType,TTensorPixelType,L,QBALL_ODFSIZE> FilterType;
  typename FilterType::Pointer filter = FilterType::New();
  filter->SetGradientImage( vols->GetDirections(), vols->GetVectorImage() );
  filter->SetNumberOfThreads( m_Controls->m_QBallReconstructionNumberThreadsSpinbox->value() );
  filter->SetBValue(vols->GetB_Value());
  filter->SetThreshold( m_Controls->m_QBallReconstructionThreasholdEdit->text().toFloat() );
  filter->SetLambda(lambda);

  switch(normalization)
  {
  case 0:
    {
      filter->SetNormalizationMethod(FilterType::QBAR_STANDARD);
      break;
    }
  case 1:
    {
      filter->SetNormalizationMethod(FilterType::QBAR_B_ZERO_B_VALUE);
      break;
    }
  case 2:
    {
      filter->SetNormalizationMethod(FilterType::QBAR_B_ZERO);
      break;
    }
  case 3:
    {
      filter->SetNormalizationMethod(FilterType::QBAR_NONE);
      break;
    }
  case 4:
    {
      filter->SetNormalizationMethod(FilterType::QBAR_ADC_ONLY);
      break;
    }
  case 5:
    {
      filter->SetNormalizationMethod(FilterType::QBAR_RAW_SIGNAL);
      break;
    }
  case 6:
    {
      filter->SetNormalizationMethod(FilterType::QBAR_SOLID_ANGLE);
      break;
    }
  case 7:
    {
      filter->SetNormalizationMethod(FilterType::QBAR_NONNEG_SOLID_ANGLE);
      break;
    }
  default:
    {
      filter->SetNormalizationMethod(FilterType::QBAR_STANDARD);
    }
  }

  filter->Update();

  // ODFs TO DATATREE
  mitk::QBallImage::Pointer image = mitk::QBallImage::New();
  image->InitializeByItk( filter->GetOutput() );
  image->SetVolume( filter->GetOutput()->GetBufferPointer() );
  mitk::DataNode::Pointer node=mitk::DataNode::New();
  node->SetData( image );
  QString newname;
  newname = newname.append(nodename.c_str());
  newname = newname.append("_QA%1").arg(normalization);
  SetDefaultNodeProperties(node, newname.toStdString());
  nodes->push_back(node);


//  mitk::Image::Pointer image5 = mitk::Image::New();
//  image5->InitializeByItk( filter->GetODFSumImage().GetPointer() );
//  image5->SetVolume( filter->GetODFSumImage()->GetBufferPointer() );
//  mitk::DataNode::Pointer node5=mitk::DataNode::New();
//  node5->SetData( image5 );
//  node5->SetProperty( "name", mitk::StringProperty::New(
//    QString(nodename.c_str()).append("_ODF").toStdString()) );
//  nodes->push_back(node5);

  // B-Zero TO DATATREE
  if(m_Controls->m_OutputB0Image->isChecked())
  {
    mitk::Image::Pointer image4 = mitk::Image::New();
    image4->InitializeByItk( filter->GetBZeroImage().GetPointer() );
    image4->SetVolume( filter->GetBZeroImage()->GetBufferPointer() );
    mitk::DataNode::Pointer node4=mitk::DataNode::New();
    node4->SetData( image4 );
    node4->SetProperty( "name", mitk::StringProperty::New(
      QString(nodename.c_str()).append("_b0").toStdString()) );
    nodes->push_back(node4);
  }
}