ITK Statistical Classification

34
ITK Statistical Classification Kitware Inc.

description

ITK Statistical Classification. Kitware Inc. Statistical Classification. Multiple Components Images K-Means Markov Random Fields. Creating Images with Multiple Components. Multiple-Component Images. 3 Images of 1 component per pixel. 1 Image of 3 component per pixel. - PowerPoint PPT Presentation

Transcript of ITK Statistical Classification

Page 1: ITK Statistical Classification

ITKStatistical Classification

Kitware Inc.

Page 2: ITK Statistical Classification

Statistical Classification

Multiple Components Images K-Means Markov Random Fields

Page 3: ITK Statistical Classification

Creating Images with Multiple Components

Page 4: ITK Statistical Classification

Multiple-Component Images

3 Images of 1 component per pixel

1 Image of 3 component per pixel

Page 5: ITK Statistical Classification

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< unsigned char, 2 > ImageType;

typedef itk::ImageToVectorImageFilter< ImageType > FilterType;

typedef FilterType::OutputImageType OutputImageType;

typedef itk::ImageFileReader< ImageType > ReaderType; typedef itk::ImageFileWriter< OutputImageType > WriterType;

FilterType::Pointer filter = FilterType::New();

Page 6: ITK Statistical Classification

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();

Page 7: ITK Statistical Classification

Image to Vector Image Filter

Run Command:

ConvertImagesToVectorImagebrainweb165a10f17_Slice94.pngbrainweb1e1a10f20_Slice94.pngbrainweb1e5a10f17_Slice94.png

brainwebSlice94.vtk

In ParaView:

Load the brainwebSlice94.vtk image

Use the Calculator to verify the components

Page 8: ITK Statistical Classification

Exercise 36a

Page 9: ITK Statistical Classification

K-Means Classifier

Page 10: ITK Statistical Classification

Image K-Means Estimation

NComponents

Image

Image to List Adaptor

List

K-d TreeGenerator

K-d TreeK-MeansEstimator

K-d TreeArray ofMeans

Page 11: ITK Statistical Classification

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< unsigned char, 3 > PixelType;

typedef itk::Image< PixelType, 2 > ImageType;

Page 12: ITK Statistical Classification

Image K-Means Estimation

typedef itk::Statistics::ImageToListAdaptor< ImageType > 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();

Page 13: ITK Statistical Classification

Image K-Means Estimation typedef TreeGeneratorType::KdTreeType TreeType;

typedef itk:: Statistics:: KdTreeBasedKmeansEstimator< TreeType > 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();

Page 14: ITK Statistical Classification

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; }

Page 15: ITK Statistical Classification

Vector Image K-Means Estimation

Run Command:

ImageKmeansModeleEstimator brainwebSlice94.vtk 4

Output:

Locations of the Means

in the N-Components Space

Page 16: ITK Statistical Classification

Exercise 36b

Page 17: ITK Statistical Classification

Image K-Means Estimation

NComponents

Image

Image to List Adaptor

List

K-d TreeGenerator

K-d TreeK-MeansEstimator

K-d TreeArray ofMeans

itk::ImageKmeansImageFilter

Page 18: ITK Statistical Classification

Image K-Means Classification

NComponents

Image

Array ofMeans

itk::ImageKmeansImageFilter

….

SampleClassifier

DecisionRule

K-d TreeMembership

Functions

MembershipSample

Imageof

Labels

LabelList

Page 19: ITK Statistical Classification

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< unsigned char, 3 > PixelType;

typedef itk::Image< PixelType, 2 > ImageType;

Page 20: ITK Statistical Classification

Image K-Means Classification

typedef itk:: ImageKmeansImageFilter< ImageType > 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 ); }

Page 21: ITK Statistical Classification

Image K-Means Classification

typedef KMeansFilterType::OutputImageType OutputImageType;

typedef itk::ImageFileWriter< OutputImageType > WriterType;

WriterType::Pointer writer = WriterType::New(); writer->SetInput( kmeansFilter->GetOutput() );

writer->Update();

KMeansFilterType::ParametersType estimatedMeans = kmeansFilter-

>GetFinalMeans();

// Array of NumberOfClasses X NumberOfComponents

Page 22: ITK Statistical Classification

Image K-Means Classification

Run Command:

ImageKmeansModeleClassifierbrainwebSlice94.vtk labelsImage.vtk 4 0

Output:

Locations of the Means in the N-components space

Image of labels associated to classes

Page 23: ITK Statistical Classification

K-Means Classification Result

Page 24: ITK Statistical Classification

Exercise 36c

Page 25: ITK Statistical Classification

Markov Random Fields

Page 26: ITK Statistical Classification

NComponents

Image

Number ofIterations

Markov RandomFields Filter

ErrorTolerance

Numberof Classes

SmoothingFactor

NeighborhoodWeights

Imageof

Labels Classifier

Markov Random Field Filter

NeighborhoodRadius

Page 27: ITK Statistical Classification

NComponents

Image

Array ofMeans

ImageClassifier

DecisionRule

MembershipFunctions

Imageof

Labels

Markov Random Field Filter

Markov RandomFields Filter

Page 28: ITK Statistical Classification

Markov Random Field Output

SmoothingFactor = 1

SmoothingFactor = 10

SmoothingFactor = 20

Page 29: ITK Statistical Classification

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< unsigned char, 3 > PixelType;

typedef itk::Image< PixelType, 2 > ImageType;

Page 30: ITK Statistical Classification

typedef itk:: MRFImageFilter< ImageType > 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

Page 31: ITK Statistical Classification

typedef itk:: ImageClassifierBase< ImageType, LabelImageType > ClassifierType;

ClassifierType::Pointer classifier = ClassifierType::New();

classifier->SetDecisionRule( reader->GetOutput() );

typedef itk:: Statistics:: DistanceToCentroidMembershipFunction< PixelType > 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

Page 32: ITK Statistical Classification

Markov Random Fields

Run Command:

ImageMarkovRandomFieldbrainwebSlice94.vtk labelsImage.vtk outputLabelsImage.vtk 50 1

4 means….

Output:

Image of labels smoothed

Termination criteria:

(max num iterations or convergence)

Page 33: ITK Statistical Classification

Exercise 36d

Page 34: ITK Statistical Classification

Enjoy ITK !