#include <SimpleITK.h>
using namespace std;
namespace sitk = itk::simple;
int main()
{
sitk::ImageFileReader reader;
reader.SetFileName(std::string("NCCT1.nii.gz"));
reader.ReadImageInformation();
sitk::Image image = reader.Execute();
Blur using CurvatureFlowImageFilter
//sitk::CurvatureFlowImageFilter blurFilter;
//blurFilter.SetNumberOfIterations(5);
//blurFilter.SetTimeStep(0.125);
//image = blurFilter.Execute(image);
//threshold img using a Hounsfield unit(HU) value and output is a binary image
double Thr = 100;
sitk::BinaryThresholdImageFilter thresholder;
//thresholder.SetLowerThreshold(0.0);
thresholder.SetUpperThreshold(Thr);
thresholder.SetOutsideValue(255);
thresholder.SetInsideValue(0);
sitk::Image ThresholderImg = thresholder.Execute(image);
// This filters perform a gaussian bluring with sigma in physical
// space. The output image will be of real type.
sitk::SmoothingRecursiveGaussianImageFilter gaussian;
gaussian.SetSigma(1.0);
sitk::Image blurredImage = gaussian.Execute(ThresholderImg);
// Covert the real output image back to the original pixel type, to
// make writing easier, as many file formats don't support real
// pixels.
sitk::CastImageFilter caster;
caster.SetOutputPixelType(image.GetPixelID());
sitk::Image outputImage = caster.Execute(blurredImage);
//Local initial slice index
double darea = 0;
unsigned int unmaxIndex = 0;
//Img_smooth = 1 - ImgSubjBW;
std::vector<unsigned int> size = image.GetSize();
for (unsigned int i = 0; i < size.at(2); i++)
{
sitk::ExtractImageFilter Extractor;
std::vector<unsigned int> vectorSize;
vectorSize[0] = size.at(0);
vectorSize[1] = size.at(1);
vectorSize[2] = 0;
std::vector<int> index = [0, 0, zslice];
Extractor.SetSize(vectorSize);
Extractor.SetIndex(index);
sitk::BinaryMorphologicalClosingImageFilter bwCloseImg;
bwCloseImg.SetKernelType(sitk::sitkBall);
bwCloseImg.SetKernelRadius(10);
bwCloseImg.SetForegroundValue(0);
sitk::Image outputImage1 = bwCloseImg.Execute(outputImage);
sitk::WriteImage(outputImage1, std::string("NCCT_brain3.nii.gz"));
}
// Configure a filter to import the buffer
sitk::ImportImageFilter importer;
importer.SetSpacing(image.GetSpacing());
importer.SetOrigin(image.GetOrigin());
importer.SetSize(size);
importer.SetBufferAsInt16(buffer);
// actually convert the buffer to a simpleITK image
sitk::Image BufferImg = importer.Execute();
// write the image
//sitk::ImageFileWriter writer;
//writer.SetFileName(std::string("NCCT_brain2.nii.gz"));
//writer.Execute(ThresholderImg);
return EXIT_SUCCESS;
}
只是代码备份,不一定全正确