#include <iostream>
#include <string>
#include <cmath>
#define NUM_CLASSES 3
#define MAX_NUM_ITER 1
int
main(int argc, char * argv[])
{
if (argc != 4)
{
std::cerr << "Missing Parameters " << std::endl;
std::cerr << "Usage: " << argv[0];
std::cerr << " inputImage trainimage outputImage" << std::endl;
return EXIT_FAILURE;
}
std::cout << "Gibbs Prior Test Begins: " << std::endl;
constexpr unsigned short NUMBANDS = 1;
constexpr unsigned short NDIMENSION = 3;
using VecImageType =
auto vecImage = VecImageType::New();
using VecImagePixelType = VecImageType::PixelType;
constexpr VecImageType::SizeType vecImgSize = { { 181, 217, 1 } };
constexpr VecImageType::IndexType index{};
VecImageType::RegionType region;
region.SetSize(vecImgSize);
region.SetIndex(index);
vecImage->SetLargestPossibleRegion(region);
vecImage->SetBufferedRegion(region);
vecImage->Allocate();
enum
{
VecImageDimension = VecImageType::ImageDimension
};
VecIterator vecIt(vecImage, vecImage->GetBufferedRegion());
vecIt.GoToBegin();
ClassIterator inputIt(input_image, input_image->GetBufferedRegion());
inputIt.GoToBegin();
using DataVector = VecImageType::PixelType;
DataVector dblVec;
while (!vecIt.IsAtEnd())
{
dblVec[0] = inputIt.Get();
vecIt.Set(dblVec);
++vecIt;
++inputIt;
}
using VecImagePixelType = VecImageType::PixelType;
using MembershipFunctionType =
stat::MahalanobisDistanceMembershipFunction<VecImagePixelType>;
using MembershipFunctionPointer = MembershipFunctionType::Pointer;
using MembershipFunctionPointerVector =
std::vector<MembershipFunctionPointer>;
using ImageGaussianModelEstimatorType =
MembershipFunctionType,
ClassImageType>;
auto applyEstimateModel = ImageGaussianModelEstimatorType::New();
applyEstimateModel->SetNumberOfModels(NUM_CLASSES);
applyEstimateModel->SetInputImage(vecImage);
applyEstimateModel->SetTrainingImage(training_image);
applyEstimateModel->Update();
std::cout << " site 1 " << std::endl;
applyEstimateModel->Print(std::cout);
MembershipFunctionPointerVector membershipFunctions =
applyEstimateModel->GetMembershipFunctions();
std::cout << " site 2 " << std::endl;
auto myDecisionRule = DecisionRuleType::New();
std::cout << " site 3 " << std::endl;
using ClassifierType =
using ClassifierPointer = ClassifierType::Pointer;
const ClassifierPointer myClassifier = ClassifierType::New();
myClassifier->SetNumberOfClasses(NUM_CLASSES);
myClassifier->SetDecisionRule((DecisionRuleBasePointer)myDecisionRule);
for (unsigned int i = 0; i < NUM_CLASSES; ++i)
{
myClassifier->AddMembershipFunction(membershipFunctions[i]);
}
using GibbsPriorFilterType =
auto applyGibbsImageFilter = GibbsPriorFilterType::New();
applyGibbsImageFilter->SetNumberOfClasses(NUM_CLASSES);
applyGibbsImageFilter->SetMaximumNumberOfIterations(MAX_NUM_ITER);
applyGibbsImageFilter->SetClusterSize(10);
applyGibbsImageFilter->SetBoundaryGradient(6);
applyGibbsImageFilter->SetObjectLabel(1);
applyGibbsImageFilter->SetInput(vecImage);
applyGibbsImageFilter->SetClassifier(myClassifier);
applyGibbsImageFilter->SetTrainingImage(training_image);
applyGibbsImageFilter->Update();
std::cout << "applyGibbsImageFilter: " << applyGibbsImageFilter;
return EXIT_SUCCESS;
}
Base class for the ImageClassifierBase object.
Base class for ImageGaussianModelEstimator object.
A multi-dimensional iterator templated over image type that walks a region of pixels.
Templated n-dimensional image class.
The RGBGibbsPriorFilter applies Gibbs Prior model for the segmentation of MRF images.
SmartPointer< Self > Pointer
A decision rule that returns the class label with the smallest discriminant score.
ITK_TEMPLATE_EXPORT void WriteImage(TImagePointer &&image, const std::string &filename, bool compress=false)
TOutputImage::Pointer ReadImage(const std::string &filename)