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圖像,點這裏

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