当我在itk中阅读带有系列阅读器的dicom系列时,
我总是发现原点 = [0 0 0]和间距 = [1 1 1],对于所有不同的数据集都相同
void main()
{
reader = READ_DCM(Input_DCM_Paths[0]);
cout<<" Reading Done!!"<<endl;
cout<< " Origin: " <<reader->GetOutput()->GetOrigin()<< endl;
cout<< " Spacing: " <<reader->GetOutput()->GetSpacing()<< endl;
}
SeriesReaderType::Pointer READ_DCM (std::string InputFolder)
{
SeriesReaderType::Pointer seriesReader = SeriesReaderType::New();
seriesReader->SetImageIO(itk::GDCMImageIO::New());
itk::GDCMSeriesFileNames::Pointer nameGenerator = itk::GDCMSeriesFileNames::New();
nameGenerator->SetUseSeriesDetails(true);
nameGenerator->SetDirectory(InputFolder);
std::string seriesID = nameGenerator->GetSeriesUIDs().begin()->c_str();
seriesReader->SetFileNames(nameGenerator->GetFileNames(seriesID));
seriesReader->Update();
return seriesReader;
}
我的'系列读者'代码有什么用? 我跟着this example中的“阅读部分”。
答案 0 :(得分:0)
我有同样的问题,我使用以下类似的代码来读取dicom系列,但切片之间的间距输出有时是正确的但不总是:
// 1) Read the input series
typedef itk::GDCMImageIO ImageIOType;
typedef itk::GDCMSeriesFileNames InputNamesGeneratorType;
ImageIOType::Pointer gdcmIO = ImageIOType::New();
InputNamesGeneratorType::Pointer inputNames=InputNamesGeneratorType::New();
inputNames->SetInputDirectory( dirPath );
inputNames->AddSeriesRestriction("0020|0013");
//然后我选择一个系列标识符并将其传递给阅读器
typedef itk::ImageSeriesReader< CTImageType > ReaderType;
ReaderType::Pointer reader = ReaderType::New(); ;
reader->SetImageIO( gdcmIO );
reader->SetFileNames( inputNames->GetFileNames( seriesIdentifier.c_str() ));
reader->UpdateOutputInformation();
---&GT;&GT;&GT; reader-&gt; GetOutput() - &gt; GetSpacing()[2]总是不正确!!!
答案 1 :(得分:0)
ITK / SimpleITK假设当您提供一系列图像时,文件的顺序与切片的顺序相同。对于许多集合,情况并非如此,您必须根据Slice Location标记(或.GetOrigin)预先分配文件(python here的更多详细信息)。