VTK教程6--------保存三维重建结果

考虑一个问题,如果通过调整参数得到了一个较好三维重建结果,如何进行保存?
比如下面这个图形,如何保存这个重建结果?
在这里插入图片描述
上图是一个CT的脚踝扫描结果,通过调整体绘制的颜色映射和透明度映射,最终得到了只显示骨骼的结果。现在想要把这个结果保存,避免每次使用的时候都要进行参数调整。在vtk中可以通过抽取等值面来实现,流程图如下:
在这里插入图片描述
从流程图中可以看出,通过vtkContourFilter类可以将vtkImagedata中的等值面提取出来,具体代码如下:

	this->pvtkContourFilter->SetInputData(this->pvtkImageData);
	this->pvtkContourFilter->SetValue(0, 1300);  // 等值面的值
	this->pvtkPolyDataMapper->SetInputConnection(this->pvtkContourFilter->GetOutputPort());

提取等值面的显示效果图如下:
在这里插入图片描述
是不是和上面体绘制的绘制效果一样?
接下来是保存为vtk格式的代码:

	if (this->input_path != "")
	{
		static char BASED_CODE szFilter[] = "VTK Files (*.vtk)|*.vtk|All Files (*.*)|*.*||";
		CFileDialog cFileDialog(FALSE, ".vtk", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);  // 使用了MFC的创建对话框的形式来选择存储路径,输入文件名
		if (cFileDialog.DoModal() == IDOK)
		{
			UpdateData(true);
			auto writer = vtkPolyDataWriter::New();  // 存储为vtk格式的类
			writer->SetInputData(pvtkContourFilter->GetOutput());  // 数据来源于等值面提取
			writer->SetFileTypeToBinary();
			writer->SetFileName(cFileDialog.GetPathName());   // 存储的文件名
			writer->Update();
			writer->Delete();
		}
	}

再使用第三讲编写的程序打开该vtk文件,和提取等值面前的对比效果图如下:
在这里插入图片描述
是不是除了颜色不一样,其他都一样,滑稽.jpg

好了,把这个图像再共享一下,比较大120多M。
脚踝CT图像,点这里

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章