Go to the documentation of this file.00001 #include "Step6.h"
00002
00003 #include <mitkProperties.h>
00004 #include <mitkPointSet.h>
00005
00006 #include <itkCurvatureFlowImageFilter.h>
00007 #include <itkConnectedThresholdImageFilter.h>
00008
00009 #include <mitkImageAccessByItk.h>
00010 #include <mitkLevelWindowProperty.h>
00011
00012 template < typename TPixel, unsigned int VImageDimension >
00013 void RegionGrowing( itk::Image<TPixel, VImageDimension>* itkImage, Step6* step6 )
00014 {
00015 typedef itk::Image< TPixel, VImageDimension > ImageType;
00016
00017 typedef float InternalPixelType;
00018 typedef itk::Image< InternalPixelType, VImageDimension > InternalImageType;
00019
00020 mitk::Geometry3D* geometry = step6->m_FirstImage->GetGeometry();
00021
00022
00023 typedef itk::CurvatureFlowImageFilter< ImageType, InternalImageType >
00024 CurvatureFlowFilter;
00025 typename CurvatureFlowFilter::Pointer smoothingFilter = CurvatureFlowFilter::New();
00026
00027 smoothingFilter->SetInput( itkImage );
00028 smoothingFilter->SetNumberOfIterations( 4 );
00029 smoothingFilter->SetTimeStep( 0.0625 );
00030
00031
00032 typedef itk::ConnectedThresholdImageFilter< InternalImageType, ImageType > RegionGrowingFilterType;
00033 typedef typename RegionGrowingFilterType::IndexType IndexType;
00034 typename RegionGrowingFilterType::Pointer regGrowFilter = RegionGrowingFilterType::New();
00035
00036 regGrowFilter->SetInput( smoothingFilter->GetOutput() );
00037 regGrowFilter->SetLower( step6->GetThresholdMin() );
00038 regGrowFilter->SetUpper( step6->GetThresholdMax() );
00039
00040
00041
00042
00043 mitk::PointSet::PointsConstIterator pit, pend = step6->m_Seeds->GetPointSet()->GetPoints()->End();
00044 IndexType seedIndex;
00045 for (pit = step6->m_Seeds->GetPointSet()->GetPoints()->Begin(); pit != pend; ++pit)
00046 {
00047 geometry->WorldToIndex(pit.Value(), seedIndex);
00048 regGrowFilter->AddSeed( seedIndex );
00049 }
00050
00051 regGrowFilter->GetOutput()->Update();
00052 mitk::Image::Pointer mitkImage = mitk::Image::New();
00053 mitk::CastToMitkImage(regGrowFilter->GetOutput(), mitkImage);
00054
00055 if (step6->m_ResultNode.IsNull())
00056 {
00057 step6->m_ResultNode = mitk::DataNode::New();
00058 step6->m_DataStorage->Add(step6->m_ResultNode);
00059 }
00060 step6->m_ResultNode->SetData(mitkImage);
00061
00062 step6->m_ResultNode->SetProperty("name", mitk::StringProperty::New("segmentation"));
00063 step6->m_ResultNode->SetProperty("binary", mitk::BoolProperty::New(true));
00064 step6->m_ResultNode->SetProperty("color", mitk::ColorProperty::New(1.0,0.0,0.0));
00065 step6->m_ResultNode->SetProperty("volumerendering", mitk::BoolProperty::New(true));
00066 step6->m_ResultNode->SetProperty("layer", mitk::IntProperty::New(1));
00067 mitk::LevelWindowProperty::Pointer levWinProp = mitk::LevelWindowProperty::New();
00068 mitk::LevelWindow levelwindow;
00069 levelwindow.SetAuto( mitkImage );
00070 levWinProp->SetLevelWindow( levelwindow );
00071 step6->m_ResultNode->SetProperty( "levelwindow", levWinProp );
00072
00073 step6->m_ResultImage = static_cast<mitk::Image*>(step6->m_ResultNode->GetData());
00074 }
00075