1. 程式人生 > >mac 新建VTK和ITK工程:讀mhd 或 mha 實現3D視覺化

mac 新建VTK和ITK工程:讀mhd 或 mha 實現3D視覺化

****只要會其中一個,另外的也就不難理解了。****

以新建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、結果: