使用vtkExtractVOI时未抽取出VOI的问题解决

本文介绍如何使用VTK中的vtkExtractVOI类从大型体数据中精确切取所需的小型体数据块。通过明确vtkExtractVOI的SetVOI()方法参数含义,并给出具体实现代码,帮助读者理解并正确应用此方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是由Markdown语法编辑器编辑完成。

1. 问题提出:

今天要解决的问题是,希望能够用一个类似于BoxWidget的模型来切割一个原始体数据,最后希望从原始体数据中抽取出BoxWidget范围内的体数据。即从一个大的体数据中抽取出一块小的体数据。
说到这里,大家可能也猜出在VTK中有一个现成的类就是来完成这个需求的,它就是vtkExtractVOI。关于该类的详细解释可以查看链接:
http://www.vtk.org/doc/nightly/html/classvtkExtractVOI.html

这个类主要有三个接口,分别是:

vtkExtractVOI->SetInputData();
vtkExtractVOI->SetVOI(int,int,int,int,int,int);
vtkExtractVOI->SetSampleRate(int,int,int);

顾名思义,这三个接口分别是设置要抽取VOI的原始体数据,抽取VOI的范围,以及抽取数据后的采样率。
而今天在编码时,主要就是对于第二个接口没有理解对,导致没有正确地抽取出子体数据。

这里的SetVOI()的6个参数值都是Int型的数字。而这个int型的数字是指抽取的范围在图像的Extent上的,而不是在图像的Bounds上的值。

2. 问题解决

明确了产生问题的根源后,便可以解决问题了。
当读入一组Dicom序列的图像时便形成了体数据,读取出该体数据的相关参数(origin, spacing, extent等),在vtkBoxWidget的六个顶点bounds(XMin,XMax, YMin, YMax, ZMin, ZMax)形成的盒子区域,利用vtkExtractVOI抽取出这个盒子包围的区域。

vtkSmartPointer<vtkExtractVOI> extractVOI = 
vtkSmartPointer<vtkExtractVOI>::New();

int extractXMin = (XMin-origin[0])/spacing[0];
int extractXMax = (XMax-origin[0])/spacing[0];
int extractYMin = (YMin-origin[1])/spacing[1];
int extractYMax = (YMax-origin[1])/spacing[1];
int extractZMin = (ZMin-origin[2])/spacing[2];
int extractZMax = (ZMax-origin[2])/spacing[2];

extractVOI ->SetInputData();
extractVOI->SetVOI(extractXMin ,extractXMax ,extractYMin ,extractYMax ,extractZMin ,extractZMax );
extractVOI->SetSampleRate(1,1,1);
extractVOI->Update();

未完待续……

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inter_peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值