mac 新建VTK和ITK工程:读mhd 或 mha 实现3D可视化

版权声明:小薛薛的博客 https://blog.csdn.net/qq_35007834/article/details/84097484

****只要会其中一个,另外的也就不难理解了。****

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

猜你喜欢

转载自blog.csdn.net/qq_35007834/article/details/84097484
mha
今日推荐