随便一玩啊 随便一玩啊
关注数: 8 粉丝数: 35 发帖数: 421 关注贴吧数: 7
ITK读 VTK显示的代码 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();
1 下一页