ITK读 VTK显示的代码
vtk吧
全部回复
仅看楼主
level 7
m_dirPath =dir;
if (m_dirPath == "")
{
return 0;
}
typedef itk::ImageSeriesReader< GrayColorImageType > SeriesReaderType;
SeriesReaderType::Pointer t_SeriesReader = SeriesReaderType::New();
typedef itk::GDCMImageIO ImageIOType;//读DICOM图片;
ImageIOType::Pointer t_ImageIO = ImageIOType::New();
t_SeriesReader->SetImageIO(t_ImageIO);
typedef itk::GDCMSeriesFileNames NamesGeneratorType;
NamesGeneratorType::Pointer t_NameGenerator = NamesGeneratorType::New();
t_NameGenerator->SetUseSeriesDetails(false);
t_NameGenerator->AddSeriesRestriction("0008|0021");
//t_NameGenerator->SetUseSeriesDetails(false);
std::string sPathName =
std::string((const char*)m_dirPath.toLocal8Bit());
t_NameGenerator->SetDirectory( sPathName);//设置文件目录;
typedef std::vector<std::string> SeriesIdContainer;
const SeriesIdContainer &t_SeriesUID = t_NameGenerator->GetSeriesUIDs();
string t_str = "", t_Representation = "";
// 该文件夹下无可读的DICOM文件;
if (t_SeriesUID.size() == 0) return 0;
//迭代器;
SeriesIdContainer::const_iterator seriesItr = t_SeriesUID.begin();
SeriesIdContainer::const_iterator seriesEnd = t_SeriesUID.end();
// 这里只读入了第一个序列的图像;
//通过迭代器读取所有单张切片;
std::string t_SeriesIdentifier;
t_SeriesIdentifier = t_SeriesUID.begin()->c_str();
typedef std::vector< std::string > FileNamesContainer;
FileNamesContainer t_FileNames;
t_FileNames = t_NameGenerator->GetFileNames(t_SeriesIdentifier);
m_Names = t_NameGenerator->GetFileNames(t_SeriesIdentifier);
t_SeriesReader->SetFileNames(t_FileNames);
t_SeriesReader->Update();
//获取DIOCM头文件中信息;
itk::MetaDataDictionary t_DataDictionary = t_ImageIO->GetMetaDataDictionary();
//vector<string> vec = t_ImageIO->GetMetaDataDictionary().GetKeys();
t_ITKImage = t_SeriesReader->GetOutput();
k_ImageData->setITKImageData(t_ITKImage);
// itkImage转vtkImageData;
typedef itk::ImageToVTKImageFilter <GrayColorImageType> ITK2VTKDataFilterType;
ITK2VTKDataFilterType::Pointer t_DataTransformFilter = ITK2VTKDataFilterType::New();
t_DataTransformFilter->SetInput(t_ITKImage);
t_DataTransformFilter->Update();
// 图像按Y轴反转;
vtkImageFlip *t_FlipFilter = vtkImageFlip::New();
t_FlipFilter->SetInputData(t_DataTransformFilter->GetOutput());
t_FlipFilter->SetFilteredAxes(1);//Y轴;
t_FlipFilter->Update();
vtkImageData *t_VTKImageData = t_FlipFilter->GetOutput();
// 设置空间分辨率;
GrayColorImageType::SpacingType t_Spacing = t_ITKImage->GetSpacing();
t_VTKImageData->SetSpacing(t_Spacing[0], t_Spacing[1], t_Spacing[2]);
// 设置图像原点;
t_VTKImageData->SetOrigin(0, 0, 0);
vtkSmartPointer<vtkImageActor> actor = vtkSmartPointer<vtkImageActor>::New();
actor->GetMapper()->SetInputData(t_VTKImageData);
actor->SetDisplayExtent(t_VTKImageData->GetExtent());
actor->SetZSlice(10);
vtkSmartPointer<vtkRenderWindow>renderWindow=vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkRenderWindowInteractor> interactor=vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkRenderer>render=vtkSmartPointer<vtkRenderer>::New();
render->SetRenderWindow(renderWindow);
render->AddActor(actor);
renderWindow->SetInteractor(interactor);
renderWindow->render();
interactor->start();
2017年04月27日 07点04分 1
1