Presentation is loading. Please wait.

Presentation is loading. Please wait.

ITK Statistical Classification Kitware Inc.. Statistical Classification Multiple Components Images K-Means Markov Random Fields.

Similar presentations


Presentation on theme: "ITK Statistical Classification Kitware Inc.. Statistical Classification Multiple Components Images K-Means Markov Random Fields."— Presentation transcript:

1 ITK Statistical Classification Kitware Inc.

2 Statistical Classification Multiple Components Images K-Means Markov Random Fields

3 Creating Images with Multiple Components

4 Multiple-Component Images 3 Images of 1 component per pixel 1 Image of 3 component per pixel

5 Image to Vector Image Filter #include "itkImage.h" #include "itkVectorImage.h" #include "itkImageFileReader.h“ #include "itkImageFileWriter.h" #include "itkImageToVectorImageFilter.h" int main( int argc, char * argv[] ) typedef itk::Image ImageType; typedef itk::ImageToVectorImageFilter FilterType; typedef FilterType::OutputImageType OutputImageType; typedef itk::ImageFileReader ReaderType; typedef itk::ImageFileWriter WriterType; FilterType::Pointer filter = FilterType::New();

6 Image to Vector Image Filter for (unsigned int k = 1; k < argc-1; k++ ) { ReaderType ::Pointer reader = ReaderType ::New(); reader->SetFileName( argv[ k ] ); reader->Update(); filter->SetNthInput( k-1, reader->GetOutput() ); } WriterType::Pointer writer = WriterType::New(); writer->SetInput( filter->GetOutput() ); writer->SetFileName( argv[ argc-1 ] ); writer->Update();

7 Image to Vector Image Filter Run Command: ConvertImagesToVectorImage brainweb165a10f17_Slice94.png brainweb1e1a10f20_Slice94.png brainweb1e5a10f17_Slice94.png brainwebSlice94.vtk In ParaView: Load the brainwebSlice94.vtk image Use the Calculator to verify the components

8 Exercise 36a

9 K-Means Classifier

10 Image K-Means Estimation N Components Image Image to List Adaptor List K-d Tree Generator K-d Tree K-Means Estimator K-d Tree Array of Means

11 Image K-Means Estimation #include "itkKdTree.h" #include "itkKdTreeBasedKmeansEstimator.h" #include "itkWeigthedCentroidKdTreeGenerator.h“ #include "itkImageToListAdaptor.h“ #include "itkImageFileReader.h“ #include "itkImage.h“ int main( int argc, char * argv[] ) { typedef itk::Vector PixelType; typedef itk::Image ImageType;

12 Image K-Means Estimation typedef itk::Statistics::ImageToListAdaptor AdaptorType; AdaptorType::Pointer adaptor = AdaptorType::New(); adaptor->SetImage( reader->GetOutput() ); typedef itk::Statistics::WeightedCentroidKdTreeGenerator< AdaptorType > TreeGeneratorType; TreeGeneratorType::Pointer treeGenerator = TreeGeneratorType::New(); treeGenerator->SetSample( adaptor ); treeGenerator->SetBucketSize( 16 ); treeGenerator->Update();

13 Image K-Means Estimation typedef TreeGeneratorType::KdTreeType TreeType; typedef itk:: Statistics:: KdTreeBasedKmeansEstimator EstimatorType; EstimatorType::Pointer estimator = EstimatorType::New(); EstimatorType::ParametersType initialMeans( NumberOfClasses * NumberOfComponents ); estimator->SetParameters( initialMeans ); estimator->SetKdTree( treeGenerator->GetOutput() ); estimator->SetMaximumIteration( 200 ); estimator->SetCentroidPositionChangesThreshold(0.0); estimator->StartOptimization(); EstimatorType::ParametersType estimatedMeans = estimator->GetParameters();

14 Image K-Means Estimation for ( unsigned int i = 0 ; i < numberOfClasses ; ++i ) { std::cout << "cluster[" << i << "] "; std::cout << " estimated mean : "; for ( unsigned int j = 0 ; j < NumberOfComponents ; ++j ) { std::cout << " " << estimatedMeans[ i * NumberOfComponents + j ]; } std::cout << std::endl; }

15 Vector Image K-Means Estimation Run Command: ImageKmeansModeleEstimator brainwebSlice94.vtk 4 Output: Locations of the Means in the N-Components Space

16 Exercise 36b

17 Image K-Means Estimation N Components Image Image to List Adaptor List K-d Tree Generator K-d Tree K-Means Estimator K-d Tree Array of Means itk::ImageKmeansImageFilter

18 Image K-Means Classification N Components Image Array of Means itk::ImageKmeansImageFilter …. Sample Classifier Decision Rule K-d Tree Membership Functions Membership Sample Image of Labels Label List

19 Image K-Means Classification #include "itkImage.h“ #include "itkImageFileReader.h“ #include "itkImageFileWriter.h“ #include "itkImageKmeansImageFilter.h“ int main( int argc, char * argv[] ) { typedef itk::Vector PixelType; typedef itk::Image ImageType;

20 Image K-Means Classification typedef itk:: ImageKmeansImageFilter KMeansFilterType; KMeansFilterType::Pointer kmeansFilter = KMeansFilterType::New(); kmeansFilter->SetInput( reader->GetOutput() ); kmeansFilter->SetUseNonContiguousLabels( useNonContiguousLabels ); KMeansFilterType::RealPixelType initialMean; initialMean.Fill(0.0); // N-Components array for( unsigned int cc = 0; cc < numberOfClasses; ++cc ) { kmeansFilter->AddClassWithInitialMean( initialMean ); }

21 Image K-Means Classification typedef KMeansFilterType::OutputImageType OutputImageType; typedef itk::ImageFileWriter WriterType; WriterType::Pointer writer = WriterType::New(); writer->SetInput( kmeansFilter->GetOutput() ); writer->Update(); KMeansFilterType::ParametersType estimatedMeans = kmeansFilter->GetFinalMeans(); // Array of NumberOfClasses X NumberOfComponents

22 Image K-Means Classification Run Command: ImageKmeansModeleClassifier brainwebSlice94.vtk labelsImage.vtk 4 0 Output: Locations of the Means in the N-components space Image of labels associated to classes

23 K-Means Classification Result

24 Exercise 36c

25 Markov Random Fields

26 N Components Image Number of Iterations Markov Random Fields Filter Error Tolerance Number of Classes Smoothing Factor Neighborhood Weights Image of Labels Classifier Markov Random Field Filter Neighborhood Radius

27 N Components Image Array of Means Image Classifier Decision Rule Membership Functions Image of Labels Markov Random Field Filter Markov Random Fields Filter

28 Markov Random Field Output Smoothing Factor = 1 Smoothing Factor = 10 Smoothing Factor = 20

29 Markov Random Field Classification #include "itkImage.h“ #include "itkImageFileReader.h“ #include "itkImageFileWriter.h“ #include "itkMRFImageFilter.h“ #include "itkDistanceToCentroidMembershipFunction.h“ #include "itkMinimumDecisionRule.h“ #include "itkImageClassifierBase.h“ int main( int argc, char * argv[] ) { typedef itk::Vector PixelType; typedef itk::Image ImageType;

30 typedef itk:: MRFImageFilter MarkovFilterType; MarkovFilterType::Pointer markovFilter = MarkovFilterType::New(); markovFilter->SetInput( reader->GetOutput() ); markovFilter->SetNumberOfClasses( numberOfClasses ); markovFilter->SetMaximumNumberOfIterations( maxNumberIterations ); markovFilter->SetSmoothingFactor( smoothingFactor ); markovFilter->SetErrorTolerance( 1e-7 ); markovFilter->SetNeighborhoodRadius( 1 ); markovFilter->SetMRFNeighborhoodWeight( weights ); markovFilter->Classifier( classifier ); writer->SetInput( markovFilter->GetOutput() ); Markov Random Field Classification

31 typedef itk:: ImageClassifierBase ClassifierType; ClassifierType::Pointer classifier = ClassifierType::New(); classifier->SetDecisionRule( reader->GetOutput() ); typedef itk:: Statistics:: DistanceToCentroidMembershipFunction MembershipFunctionType; MembershipFunctionType::Pointer membershipFunction; MembershipFunctionType ::New(); for( unsigned int cc = 0; cc < numberOfClasses; ++cc ) { membershipFunction = MembershipFunctionType ::New(); membershipFunction ->SetCentroid( classMean[cc] ); classifier->AddMembershipFunction( membershipFunction ); } Markov Random Field Classification

32 Markov Random Fields Run Command: ImageMarkovRandomField brainwebSlice94.vtk labelsImage.vtk outputLabelsImage.vtk 50 1 4 means…. Output: Image of labels smoothed Termination criteria: (max num iterations or convergence)

33 Exercise 36d

34 Enjoy ITK !


Download ppt "ITK Statistical Classification Kitware Inc.. Statistical Classification Multiple Components Images K-Means Markov Random Fields."

Similar presentations


Ads by Google