主要實現的部分是利用NameGeneratorType讀入系列圖像,見頭文件#include "itkNumericSeriesFileNames.h"。
需要包含的頭文件有:
#include "itkImage.h"
#include "itkImageSeriesReader.h"
#include "itkImageFileWriter.h"#include "itkNumericSeriesFileNames.h"
#include "itkPNGImageIO.h"//轉成JPG格式,將PNG替換成JPEG就可以。
int main( int argc, char ** argv )
{
// 需要四個參數,分別是程序起點,第一張圖像的編號和最後一張圖像的變化,輸出文件的名稱(包含路徑)
if( argc < 4 )
{
std::cerr << "Usage: " << std::endl;
std::cerr << argv[0] << " firstSliceValue lastSliceValue outputImageFile " << std::endl;
return EXIT_FAILURE;
}
//定義讀入圖像類型,創建對應的reader
typedef unsigned char PixelType;
const unsigned int Dimension = 3;
typedef itk::Image< PixelType, Dimension > ImageType;
typedef itk::ImageSeriesReader< ImageType > ReaderType;
typedef itk::ImageFileWriter< ImageType > WriterType;
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
//輸入參數定義
const unsigned int first = atoi( argv[1] );const unsigned int last = atoi( argv[2] );
const char * outputFilename = argv[3];//輸出的文件名加上對應格式的後綴即可,如mha或nii.gz
//系列圖像讀入
typedef itk::NumericSeriesFileNames NameGeneratorType;
NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
nameGenerator->SetSeriesFormat( "vwe%03d.png" );
nameGenerator->SetStartIndex( first );
nameGenerator->SetEndIndex( last );
nameGenerator->SetIncrementIndex( 1 );//張數的增長間距
//讀入圖像,寫出圖像,進行Update
reader->SetImageIO( itk::PNGImageIO::New() );
reader->SetFileNames( nameGenerator->GetFileNames() );
writer->SetFileName( outputFilename );
writer->SetInput( reader->GetOutput() );
try
{
writer->Update();
}
catch( itk::ExceptionObject & err )
{
std::cerr << "ExceptionObject caught !" << std::endl;
std::cerr << err << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}