SimpleITK 讀入圖像、閾值、濾波等簡單應用

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

}

只是代碼備份,不一定全正確

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章