mac 新建VTK和ITK工程:讀mhd 或 mha 實現3D視覺化
阿新 • • 發佈:2018-11-15
****只要會其中一個,另外的也就不難理解了。****
以新建VTK為例:
1、首先確保已經安裝VTK;
2、在VTK目錄下新建一個資料夾Mycode;
3、Mycode裡面新建 .cpp檔案,cmakelist.txt檔案;(這裡是我們的原碼)
4、Mycode裡面新建一個資料夾bin,用來生成工程;
5、在.cpp裡複製:
//VTK 讀mhd檔案資料 //根據 vesselExtractor->SetValue(0, 70); //提取出CT值為70的可能是血管的物件; //上面的 value值 70是閾值,可以更改 //code: #include <vtkSmartPointer.h> #include <vtkMetaImageReader.h> #include "vtkVolume16Reader.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include "vtkMarchingCubes.h" #include "vtkStripper.h" #include "vtkActor.h" #include "vtkPolyDataMapper.h" #include "vtkProperty.h" #include <vtkLookupTable.h> // VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2 VTK_MODULE_INIT(vtkInteractionStyle); int main(){ vtkSmartPointer<vtkMetaImageReader> Reader =vtkSmartPointer<vtkMetaImageReader>::New(); Reader->SetFileName("/Users/xiaoxuexue/VTK-8.1-2.1/3D_vessel/data/Sato.mhd"); //讀血管mhd或者mha檔案 Reader->Update(); cout<<"讀取資料完成"<<endl; //用Marching Cubes 演算法 vtkMarchingCubes *vesselExtractor = vtkMarchingCubes::New(); //建立一個Marching Cubes 演算法的物件 vesselExtractor->SetInputConnection(Reader->GetOutputPort()); //獲得所讀取的CT 資料 vesselExtractor->SetNumberOfContours(10); vesselExtractor->SetValue(0, 72 ); //***********提取出CT值為70的可能是血管的物件************* //將提取的等值面拼接成連續的 vtkStripper *vesselStripper = vtkStripper::New(); //建立三角帶物件 vesselStripper->SetInputConnection(vesselExtractor->GetOutputPort()); //將生成的三角片連線成三角帶 //映成集合資料,將其屬性賦給視窗中代表它的演員,將結果顯示出來。 vtkPolyDataMapper *vesselMapper = vtkPolyDataMapper::New(); //建立一個數據對映物件 vesselMapper->SetInputConnection(vesselStripper->GetOutputPort()); //將三角帶對映為幾何資料 vesselMapper->SetScalarRange(0,7); //物件和物件屬性等設定 vtkActor *vessel = vtkActor::New(); //建立一個代表血管的演員 vessel->SetMapper(vesselMapper); //獲得血管幾何資料的屬性 vessel->GetProperty()->SetDiffuseColor(-4, -4, 0); //設定顏色的屬性 vessel->GetProperty()->SetSpecular(.3); //設定反射率 vessel->GetProperty()->SetSpecularPower(20); //設定反射光強度 vessel->GetProperty()->SetColor(1,0.75,0); //直接設定物件的顏色 //顯示資料 vtkRenderer *ren = vtkRenderer::New(); //建立繪製者 ren->SetBackground( 120, 120, 120 ); //視窗顏色,0-255從黑到白 //新建視窗 vtkRenderWindow *renWindow = vtkRenderWindow::New(); renWindow->SetSize(1000, 1000); //設定視窗大小 renWindow->AddRenderer(ren); //將繪製者加入繪製視窗 //互動 cout<<"正在繪製..."<<endl; vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); //對繪製結果進行互動操作 iren->SetRenderWindow (renWindow); // 告訴繪製者將要在繪製視窗中進行顯示的演員 ren->AddActor(vessel); //血管 iren->Initialize(); iren->Start(); cout<<"繪製完成!"<<endl; return 0; }
6、在cmakelist.txt檔案裡複製:
cmake_minimum_required(VERSION 3.3 FATAL_ERROR) PROJECT (3D_vessel) #工程名字 find_package(VTK REQUIRED) #新增VTK包 include(${VTK_USE_FILE}) add_executable(3D_vessel 3D_vessel.cxx) #這裡是你的CPP檔名 target_link_libraries(3D_vessel ${VTK_LIBRARIES}) #
7、開啟cmake,設定如下:
8、配置以後,出現下面,預設選擇Xcode,done;
點選Configure,等待完成後,Generate即可。
有可能出現的報錯:
這是因為找不到VTK_DIR所致:
解決這個問題,只需在你的資料夾裡搜尋VTKconfig.cmake 的位置新增到上面的位置即可:例如我搜索的結果是
把這個目錄放在
再點選Configure,等待完成,Generate即可。
9、之後會顯示Configure done,
Generate done;說明你生成工程成功了!!!!
執行open project,開啟工程,執行:
或者在你的bin資料夾裡也可以找到工程,這樣的:
10、最後一步:執行
11、結果: