VTK将转换和旋转应用于vtkImageData

时间:2016-10-06 21:51:29

标签: c++ image transform vtk paraview

我使用VTK + Paraview为演示文稿生成一些不错的图像。我的问题如下:我有一系列相机姿势和相应的灰度图像,我想在3D空间中将它们可视化。对于相机,我使用一个圆锥体并将其置于正确的位置,我将变换滤镜应用于它:

vtkSmartPointer<vtkConeSource> coneSource = vtkSmartPointer<vtkConeSource>::New();
coneSource->SetHeight(0.02);
coneSource->SetRadius(0.01);
coneSource->SetResolution(4);
double direction[3] = {-1,0,0};
coneSource->SetDirection(direction);
coneSource->Update();

vtkSmartPointer<vtkTransform> cone_transform = vtkSmartPointer<vtkTransform>::New();
cone_transform->Translate(translation.x()+0.16,translation.y()+0.12,translation.z()-0.2);
cone_transform->RotateWXYZ(rotation.angle(),rotation.axis().x(),rotation.axis().y(),rotation.axis().z());
vtkSmartPointer<vtkTransformPolyDataFilter> cone_transformFilter = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
cone_transformFilter->SetInputConnection(coneSource->GetOutputPort());
cone_transformFilter->SetTransform(cone_transform);
cone_transformFilter->Update();

然后我将其保存为.vtp文件。

对于图像,我认为将它存储在vtkImageData对象中是个好主意,但后来我不知道如何对其应用变换。

在网上搜索没有帮助。

拜托,有人可以告诉我如何正确地做到这一点吗?

谢谢!

编辑:

我尝试使用vtkImageReslice,如下所述:

http://www.vtk.org/pipermail/vtkusers/2010-July/061266.html

但没有结果:(

编辑2:

@Kenneth

我试过这种方式:

vtkSmartPointer<vtkImageData> imageData = vtkSmartPointer<vtkImageData>::New();
...
vtkSmartPointer<vtkTransformFilter> transformFilter = vtkSmartPointer<vtkTransformFilter>::New();
//transformFilter->SetInput(imageData);
transformFilter->SetInputConnection(imageData->GetProducerPort());
transformFilter->SetInformation(imageData->GetInformation());
transformFilter->SetTransform(vTransform);
transformFilter->Update();

但是我收到了这个错误:

  

错误:在/build/buildd/vtk-5.8.0/Filtering/vtkExecutive.cxx,第756行   vtkStreamingDemandDrivenPipeline(0x13106e0):算法vtkTransformFilter(0x130fc80)返回请求失败:vtkInformation(0x1310220)

     

调试:关闭

     

修改时间:1961年

     

参考人数:1

     

注册事件:(无)

     

请求:REQUEST_DATA_OBJECT

     

ALGORITHM_AFTER_FORWARD:1

     

FROM_OUTPUT_PORT:0

     

FORWARD_DIRECTION:0

有关如何解决它的想法吗?

2 个答案:

答案 0 :(得分:2)

我在这里找到答案:

http://public.kitware.com/pipermail/vtkusers/2009-January/050239.html

基本上,vtkImageData必须始终是轴对齐的。如果要将变换应​​用于网格,最好使用vtkStructuredGrid。

答案 1 :(得分:0)

另一种可能性是在actor / prop上set a user transform而不是实际转换对象。您只需修改场景,而不是更改对象。

您可能会发现TransformActor示例很有用。