コード例 #1
0
ファイル: mitkOtsuTool3D.cpp プロジェクト: danielknorr/MITK
void mitk::OtsuTool3D::RunSegmentation(int regions, bool useValley, int numberOfBins)
{
  //this->m_OtsuSegmentationDialog->setCursor(Qt::WaitCursor);

  int numberOfThresholds = regions - 1;

  unsigned int timestep = mitk::RenderingManager::GetInstance()->GetTimeNavigationController()->GetTime()->GetPos();

  mitk::Image::Pointer image3D = Get3DImage(m_OriginalImage, timestep);

  mitk::OtsuSegmentationFilter::Pointer otsuFilter = mitk::OtsuSegmentationFilter::New();
  otsuFilter->SetNumberOfThresholds( numberOfThresholds );
  otsuFilter->SetValleyEmphasis( useValley );
  otsuFilter->SetNumberOfBins( numberOfBins );
  otsuFilter->SetInput( image3D );

  try
  {
    otsuFilter->Update();
  }
  catch( ... )
  {
    mitkThrow() << "itkOtsuFilter error (image dimension must be in {2, 3} and image must not be RGB)";
  }

  m_ToolManager->GetDataStorage()->Remove( this->m_MultiLabelResultNode );
  m_MultiLabelResultNode = NULL;
  m_MultiLabelResultNode = mitk::DataNode::New();
  m_MultiLabelResultNode->SetName("Otsu_Preview");
  m_MultiLabelResultNode->SetVisibility(true);
  m_ToolManager->GetDataStorage()->Add( this->m_MultiLabelResultNode );
  m_MultiLabelResultNode->SetOpacity(1.0);

  this->m_MultiLabelResultNode->SetData( otsuFilter->GetOutput() );
  m_MultiLabelResultNode->SetProperty("binary", mitk::BoolProperty::New(false));
  mitk::RenderingModeProperty::Pointer renderingMode = mitk::RenderingModeProperty::New();
  renderingMode->SetValue( mitk::RenderingModeProperty::LOOKUPTABLE_LEVELWINDOW_COLOR );
  m_MultiLabelResultNode->SetProperty("Image Rendering.Mode", renderingMode);
  mitk::LookupTable::Pointer lut = mitk::LookupTable::New();
  mitk::LookupTableProperty::Pointer prop = mitk::LookupTableProperty::New(lut);
  vtkSmartPointer<vtkLookupTable> lookupTable = vtkSmartPointer<vtkLookupTable>::New();
  lookupTable->SetHueRange(1.0, 0.0);
  lookupTable->SetSaturationRange(1.0, 1.0);
  lookupTable->SetValueRange(1.0, 1.0);
  lookupTable->SetTableRange(-1.0, 1.0);
  lookupTable->Build();
  lut->SetVtkLookupTable(lookupTable);
  prop->SetLookupTable(lut);
  m_MultiLabelResultNode->SetProperty("LookupTable",prop);
  mitk::LevelWindowProperty::Pointer levWinProp = mitk::LevelWindowProperty::New();
  mitk::LevelWindow levelwindow;
  levelwindow.SetRangeMinMax(0, numberOfThresholds + 1);
  levWinProp->SetLevelWindow( levelwindow );
  m_MultiLabelResultNode->SetProperty( "levelwindow", levWinProp );

  //m_BinaryPreviewNode->SetVisibility(false);
//  m_MultiLabelResultNode->SetVisibility(true);
  //this->m_OtsuSegmentationDialog->setCursor(Qt::ArrowCursor);
  mitk::RenderingManager::GetInstance()->RequestUpdateAll();
}
コード例 #2
0
void mitk::WatershedTool::DoIt()
{

  // get image from tool manager
  mitk::DataNode::Pointer referenceData = m_ToolManager->GetReferenceData(0);
  mitk::Image::Pointer input = dynamic_cast<mitk::Image*>(referenceData->GetData());
  if (input.IsNull())
    return;

  unsigned int timestep = mitk::RenderingManager::GetInstance()->GetTimeNavigationController()->GetTime()->GetPos();
  input = Get3DImage(input, timestep);

  mitk::Image::Pointer output;

  try {
    // create and run itk filter pipeline
    AccessByItk_1(input.GetPointer(),ITKWatershed,output);

    // create a new datanode for output
    mitk::DataNode::Pointer dataNode = mitk::DataNode::New();
    dataNode->SetData(output);

    // set properties of datanode
    dataNode->SetProperty("binary", mitk::BoolProperty::New(false));
    dataNode->SetProperty("name", mitk::StringProperty::New("Watershed Result"));
    mitk::RenderingModeProperty::Pointer renderingMode = mitk::RenderingModeProperty::New();
    renderingMode->SetValue( mitk::RenderingModeProperty::LOOKUPTABLE_LEVELWINDOW_COLOR );
    dataNode->SetProperty("Image Rendering.Mode", renderingMode);

    // since we create a multi label image, define a vtk lookup table
    mitk::LookupTable::Pointer lut = mitk::LookupTable::New();
    mitk::LookupTableProperty::Pointer prop = mitk::LookupTableProperty::New(lut);
    vtkSmartPointer<vtkLookupTable> lookupTable = vtkSmartPointer<vtkLookupTable>::New();
    lookupTable->SetHueRange(1.0, 0.0);
    lookupTable->SetSaturationRange(1.0, 1.0);
    lookupTable->SetValueRange(1.0, 1.0);
    lookupTable->SetTableRange(-1.0, 1.0);
    lookupTable->Build();
    lookupTable->SetTableValue(1,0,0,0);
    lut->SetVtkLookupTable(lookupTable);
    prop->SetLookupTable(lut);
    dataNode->SetProperty("LookupTable",prop);

    // make the levelwindow fit to right values
    mitk::LevelWindowProperty::Pointer levWinProp = mitk::LevelWindowProperty::New();
    mitk::LevelWindow levelwindow;
    levelwindow.SetRangeMinMax(0, output->GetStatistics()->GetScalarValueMax());
    levWinProp->SetLevelWindow( levelwindow );
    dataNode->SetProperty( "levelwindow", levWinProp );
    dataNode->SetProperty( "opacity", mitk::FloatProperty::New(0.5));

    // set name of data node
    std::string name = referenceData->GetName() + "_Watershed";
    dataNode->SetName( name );

    // look, if there is already a node with this name
    mitk::DataStorage::SetOfObjects::ConstPointer children = m_ToolManager->GetDataStorage()->GetDerivations(referenceData);
    mitk::DataStorage::SetOfObjects::ConstIterator currentNode = children->Begin();
    mitk::DataNode::Pointer removeNode;
    while(currentNode != children->End())
    {
      if(dataNode->GetName().compare(currentNode->Value()->GetName()) == 0)
      {
        removeNode = currentNode->Value();
      }
      currentNode++;
    }
    // remove node with same name
    if(removeNode.IsNotNull())
      m_ToolManager->GetDataStorage()->Remove(removeNode);

    // add output to the data storage
    m_ToolManager->GetDataStorage()->Add(dataNode,referenceData);
  }
  catch(itk::ExceptionObject& e)
  {
    MITK_ERROR<<"Watershed Filter Error: " << e.GetDescription();
  }

  RenderingManager::GetInstance()->RequestUpdateAll();

}