【问题标题】:VTK apply translation and rotation to vtkImageDataVTK 对 vtkImageData 应用平移和旋转
【发布时间】:2017-02-15 19:10:29
【问题描述】:

我正在使用 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:

@肯尼斯

我试过这样:

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

你知道如何解决吗?

【问题讨论】:

  • 您尝试过使用 vtkTransformFilter 吗?它应该支持转换 vtkImageData。

标签: c++ image transform vtk paraview


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我在这里找到了答案:

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

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

    【讨论】:

    • 我记得,如果输入 vtkImageDatavtkTransformFilter 会生成 vtkStructuredGrid
    猜你喜欢
    • 2016-01-19
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多