VTK画椭球 C++

Ubuntu18 + vtk6测试通过

处理NDT地图的时候要对NDT地图可视化 借助VTK实现,先从话一个椭球体开始

#include <iostream>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkActor.h>
#include <vtkConeSource.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindowInteractor.h>
#include<vtkLight.h>
#include <vtkParametricEllipsoid.h>
#include <vtkParametricFunctionSource.h>
#include  <vtkTransform.h>


#define vtkSPtr vtkSmartPointer
#define vtkSPtrNew(Var, Type) vtkSPtr<Type> Var = vtkSPtr<Type>::New();

using namespace std;
int main()
{
    vtkSPtrNew( ellipsoid, vtkParametricEllipsoid );
    //三轴长度
    ellipsoid->SetXRadius(2);
    ellipsoid->SetXRadius(3);
    ellipsoid->SetXRadius(4);

    vtkSPtrNew( source, vtkParametricFunctionSource );
    source->SetParametricFunction(ellipsoid);


    vtkSPtrNew( mapper, vtkPolyDataMapper );
    mapper->SetInputConnection( source->GetOutputPort() );

    vtkSPtrNew( actor, vtkActor );
    actor->SetMapper( mapper );

    vtkSPtrNew( renderer, vtkRenderer );
    renderer->AddActor(actor);
    renderer->SetBackground( 0, 0, 0 );

    vtkSPtrNew( renderWindow, vtkRenderWindow );
    renderWindow->AddRenderer( renderer );

    vtkSPtrNew( renderWindowInteractor, vtkRenderWindowInteractor );
    renderWindowInteractor->SetRenderWindow( renderWindow );


    renderer->ResetCamera();
    renderWindow->Render();
    renderWindowInteractor->Start();
    return 0;
}

效果
在这里插入图片描述

VTK ( Visualization Toolkit ) 中,C++ 语言可以用于处理医学图像数据,例如CT扫描。分割CT图像通常涉及以下几个步骤: 1. **读取数据**:首先,你需要使用VTK的`vtkDICOMImageReader` 或 `vtkXMLImageDataReader` 来加载CT数据文件。 ```cpp vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New(); reader->SetDirectoryName("path_to_your_ct_scan"); ``` 2. **预处理**:可能需要对图像进行灰度化、平滑、噪声去除等操作,这可以通过`vtkImageShiftScale`, `vtkImageSmoothFilter`, `vtkMedian滤波器`等滤波器实现。 3. **分割阈值/区域生长**:根据需要,你可以使用`vtkThresholdSegmenter` 进行二值分割,或利用`vtkMarchingCubes` 进行基于灰度值的表面提取。如果想通过形态学操作如膨胀或腐蚀来进行分割,可以使用`vtkBinaryMathematics vtkWatershedSegmentation` 等工具。 4. **创建分割结果**:分割完成后,`vtkPolyData` 结构会被用来存储分割出的对象,你可以进一步将其可视化或保存到其他格式。 5. **可视化**:使用`vtkActor` 和 `vtkRenderer` 创建分割后的模型,并显示在渲染窗口(`vtkRenderWindow`)中。 ```cpp vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(segmentationFilter->GetOutputPort()); vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); // 添加到渲染窗口 renderer->AddActor(actor); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值