ITK 读取Dicom序列 +VTK重建 +VTK显示

https://blog.csdn.net/qq_35007834/article/details/88569821

	using ReaderType = itk::ImageSeriesReader< ImageType >;
	using ImageIOType = itk::GDCMImageIO;
	ReaderType::Pointer reader = ReaderType::New();
	ImageIOType::Pointer dicomIO = ImageIOType::New();
	reader->SetImageIO(dicomIO);
	//获取读取序列名称
	using NamesGeneratorType = itk::GDCMSeriesFileNames;
	NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();
	nameGenerator->SetUseSeriesDetails(true);
	nameGenerator->SetDirectory("/Users/mac/Desktop/我的文件/血管分割项目/CT数据/CT扫描数据");
	using SeriesIdContainer = std::vector< std::string >;
	const SeriesIdContainer & seriesUID = nameGenerator->GetSeriesUIDs();
	auto seriesItr = seriesUID.begin();
	auto seriesEnd = seriesUID.end();
	using FileNamesContainer = std::vector< std::string >;
	FileNamesContainer fileNames;
	std::string seriesIdentifier;
	while (seriesItr != seriesEnd)
	{
		seriesIdentifier = seriesItr->c_str();
		fileNames = nameGenerator->GetFileNames(seriesIdentifier);
		++seriesItr;
	}
        //读取序列
	reader->SetFileNames(fileNames);
	try
	{
		reader->Update();
	}
	catch (itk::ExceptionObject &ex)
	{
		std::cout << ex << std::endl;
		return EXIT_FAILURE;
	}
	ImageType::SizeType imgSize = reader->GetOutput()->GetLargestPossibleRegion().GetSize();
	cout << "read done!Original size: " << imgSize << endl;

	typedef itk::ImageToVTKImageFilter< ImageType> itkTovtkFilterType;
	itkTovtkFilterType::Pointer itkTovtkImageFilter = itkTovtkFilterType::New();
	itkTovtkImageFilter->SetInput(reader->GetOutput());
	itkTovtkImageFilter->Update();

	vtkSmartPointer<vtkMarchingCubes> vesselExtractor = vtkMarchingCubes::New();
	vesselExtractor->SetInputData(itkTovtkImageFilter->GetOutput());
	vesselExtractor->SetNumberOfContours(10);
	vesselExtractor->SetValue(0, 1);   //轮廓

									   //将提取的等值面拼接成连续的
	vtkSmartPointer<vtkStripper> vesselStripper = vtkStripper::New();                           //建立三角带对象
	vesselStripper->SetInputConnection(vesselExtractor->GetOutputPort());

	vtkSmartPointer<vtkPolyDataMapper>  vesselMapper = vtkPolyDataMapper::New();     //建立一个数据映射对象
	vesselMapper->SetInputConnection(vesselStripper->GetOutputPort());                     //将三角带映射为几何数据
	vesselMapper->SetScalarRange(0, 7);

	//对象和对象属性等设置
	vtkSmartPointer<vtkActor> vessel = vtkActor::New();
	vessel->SetMapper(vesselMapper);
	vessel->GetProperty()->SetColor(0, 0, 1);

	// A renderer and render window
	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
	renderWindow->AddRenderer(renderer);
	renderWindow->SetSize(1000, 1000);
	renderer->AddActor(vessel);
	// An interactor
	vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
		vtkSmartPointer<vtkRenderWindowInteractor>::New();
	renderWindowInteractor->SetRenderWindow(renderWindow);
	renderWindow->Render();
	renderWindow->SetWindowName(“啦啦啦,我是卖报的小行家”);//这一句一定是在render()后面,否则无效,为什么没人告诉我
	renderWindowInteractor->Initialize();
	renderWindow->Render();
	renderWindowInteractor->Start();
	return 0;

  

原文地址:https://www.cnblogs.com/wllwqdeai/p/12044424.html

时间: 2024-09-28 12:47:42

ITK 读取Dicom序列 +VTK重建 +VTK显示的相关文章

ITK读取CT DICOM,如何设置窗位和窗宽?

关键字: dicom itk CT 不清晰 窗位 窗宽 碎碎念: 最近忽然要用到ITK读取DICOM,在听到任务之前,我连ITK和DICOM是个啥东西都不知道.当然,刚听到任务的时候,我脑子里也只有"这特码是啥?""这特码又是啥?"... 在被进度恶心了几天之后,对这些概念我大概有了些认识.然后在试图将DICOM显示成jpeg时候,按照guide里的例子改了改,结果发现JPEG的图像呈现灰蒙蒙的感觉,完全不如另一款软件读出的清晰. 尝试过程中,由于概念认识有限,搜索

十ITK读取一张dcm图像然后通过vtk显示

一.功能 通过ITK读取一张图片(dcm格式),然后通过vtk显示出来. 版本:VS2019 itk5.0.1 vtk 8.2.0 二.程序主要思路 1-读取dcm格式图片 2-转换为vtk可以读取的数据类型 3-设置显示参数,然后显示出来 三.代码 工程构建参见前面的博客,代码部分如下: //保证VTK正常运行 #include "vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vt

VTK中文文本显示及简单的医学图像浏览软件

用VTK做的一个简单的医学图像浏览软件(在http://blog.csdn.net/www_doling_net/article/details/8668870这篇博文的基础上改的),支持标准的医学图像四视图(横断面.矢状面.冠状面和三维视图),并在每个二维视图上显示对应层数的图像信息. 程序运行截图如下: 可执行文件的下载地址:http://download.csdn.net/detail/www_doling_net/7501129 利用VTK实现中文文本显示的示例程序,可以支持多行文本即"

利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据

登录界面 <body><form action="login1.php" method="post"><div>用户名:<input type="text" name="uid" /></div><br /><div>密码:<input type="password" name="pwd" />

linux awk常用操作(快速将fasta格式的序列改成一行显示)

Some time when you want to change the fasta seq into one line For awk:         awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" ":$0 }'  YourFile > newfilename For sed:             sed -n '1{x;d;x};${H;x

【Android】读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示

尽管以下的app还没有做到快图浏览.ES文件浏览器的水平,遇到大sdcard还是会存在读取过久.内存溢出等问题,可是基本思想是这种. 例如以下图.在sdcard卡上有4张图片, 打开app,则会吧sd卡上的全部图片读取,并显示出来.读取的过程有进度条显示. 制作步骤例如以下: 1.首先,res\values\strings.xml对字符设置例如以下,没有什么特别的. <? xml version="1.0" encoding="utf-8"?> <

【php】读取&quot;文件列表&quot;按时间倒序显示,并递归显示各层目录、!

思路: 1.读取该php所在目录的文件列表,用"修改时间.文件名"做键值对,塞入数组.对"修改时间"倒序.(貌似不能直接按时间倒序读取文件列表,此处为间接方法) 2.读取的若为文件直接输出,为目录就输出目录并递归扫描其下文件. <?php //遍历当前目录下所有文件的和目录,并以树装形式显示 //1.打开目录句柄,获取句柄资源 //2.读取句柄资源,并显示当前和子目录下的(目录和文件名称) function getDirFile($path){ if(!($f

【Android】读取sdcard卡上的所有图片并且显示,读取的过程有进度条显示

虽然下面的app还没有做到快图浏览.ES文件浏览器的水平,遇到大sdcard还是会存在读取过久.内存溢出等问题,但是基本思想是这样的. 如下图,在sdcard卡上有4张图片, 打开app,则会吧sd卡上的所有图片读取,并显示出来,读取的过程有进度条显示. 制作过程如下: 1.首先,res\values\strings.xml对字符设置如下,没有什么特别的. <?xml version="1.0" encoding="utf-8"?> <resour

[VTK]基于VTK的三维重建

https://www.cnblogs.com/dawnWind/archive/2013/02/17/3D_06.html 0. Background 很久很久以前记录了一下使用WPF进行三维重建的一些探索,后来了解到了VTK这个开发包, 觉得功能很强大,因此后续都在基于VTK进行三维重建,在前文中对于VTK的一些相关网站进行了介绍 http://www.cnblogs.com/dawnWind/archive/2013/01/14/3D_04.html 这里就不再累赘了,感兴趣的Google