#include "Step6.h"#include <mitkProperties.h>#include <mitkPointSet.h>#include <itkCurvatureFlowImageFilter.h>#include <itkConnectedThresholdImageFilter.h>#include <mitkImageAccessByItk.h>#include <mitkLevelWindowProperty.h>Go to the source code of this file.
Functions | |
| template<typename TPixel , unsigned int VImageDimension> | |
| void | RegionGrowing (itk::Image< TPixel, VImageDimension > *itkImage, Step6 *step6) |
| void RegionGrowing | ( | itk::Image< TPixel, VImageDimension > * | itkImage, |
| Step6 * | step6 | ||
| ) |
Definition at line 13 of file Step6RegionGrowing.txx.
References mitk::CastToMitkImage(), Step6::GetThresholdMax(), Step6::GetThresholdMin(), Step6::m_DataStorage, Step6::m_FirstImage, Step6::m_ResultImage, Step6::m_ResultNode, Step6::m_Seeds, mitk::LevelWindowProperty::New(), mitk::IntProperty::New(), mitk::ColorProperty::New(), mitk::BoolProperty::New(), mitk::StringProperty::New(), mitk::DataNode::New(), mitk::Image::New(), mitk::LevelWindow::SetAuto(), and mitk::Geometry3D::WorldToIndex().
{
typedef itk::Image< TPixel, VImageDimension > ImageType;
typedef float InternalPixelType;
typedef itk::Image< InternalPixelType, VImageDimension > InternalImageType;
mitk::Geometry3D* geometry = step6->m_FirstImage->GetGeometry();
// create itk::CurvatureFlowImageFilter for smoothing and set itkImage as input
typedef itk::CurvatureFlowImageFilter< ImageType, InternalImageType >
CurvatureFlowFilter;
typename CurvatureFlowFilter::Pointer smoothingFilter = CurvatureFlowFilter::New();
smoothingFilter->SetInput( itkImage );
smoothingFilter->SetNumberOfIterations( 4 );
smoothingFilter->SetTimeStep( 0.0625 );
// create itk::ConnectedThresholdImageFilter and set filtered image as input
typedef itk::ConnectedThresholdImageFilter< InternalImageType, ImageType > RegionGrowingFilterType;
typedef typename RegionGrowingFilterType::IndexType IndexType;
typename RegionGrowingFilterType::Pointer regGrowFilter = RegionGrowingFilterType::New();
regGrowFilter->SetInput( smoothingFilter->GetOutput() );
regGrowFilter->SetLower( step6->GetThresholdMin() );
regGrowFilter->SetUpper( step6->GetThresholdMax() );
// convert the points in the PointSet m_Seeds (in world-coordinates) to
// "index" values, i.e. points in pixel coordinates, and add these as seeds
// to the RegionGrower
mitk::PointSet::PointsConstIterator pit, pend = step6->m_Seeds->GetPointSet()->GetPoints()->End();
IndexType seedIndex;
for (pit = step6->m_Seeds->GetPointSet()->GetPoints()->Begin(); pit != pend; ++pit)
{
geometry->WorldToIndex(pit.Value(), seedIndex);
regGrowFilter->AddSeed( seedIndex );
}
regGrowFilter->GetOutput()->Update();
mitk::Image::Pointer mitkImage = mitk::Image::New();
mitk::CastToMitkImage(regGrowFilter->GetOutput(), mitkImage);
if (step6->m_ResultNode.IsNull())
{
step6->m_ResultNode = mitk::DataNode::New();
step6->m_DataStorage->Add(step6->m_ResultNode);
}
step6->m_ResultNode->SetData(mitkImage);
// set some additional properties
step6->m_ResultNode->SetProperty("name", mitk::StringProperty::New("segmentation"));
step6->m_ResultNode->SetProperty("binary", mitk::BoolProperty::New(true));
step6->m_ResultNode->SetProperty("color", mitk::ColorProperty::New(1.0,0.0,0.0));
step6->m_ResultNode->SetProperty("volumerendering", mitk::BoolProperty::New(true));
step6->m_ResultNode->SetProperty("layer", mitk::IntProperty::New(1));
mitk::LevelWindowProperty::Pointer levWinProp = mitk::LevelWindowProperty::New();
mitk::LevelWindow levelwindow;
levelwindow.SetAuto( mitkImage );
levWinProp->SetLevelWindow( levelwindow );
step6->m_ResultNode->SetProperty( "levelwindow", levWinProp );
step6->m_ResultImage = static_cast<mitk::Image*>(step6->m_ResultNode->GetData());
}
1.7.2