c++ - VTK 将平移和旋转应用于 vtkImageData

标签 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:

@肯尼斯

我尝试过这种方法:

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();

但我收到此错误:

ERROR: In /build/buildd/vtk-5.8.0/Filtering/vtkExecutive.cxx, line 756 vtkStreamingDemandDrivenPipeline (0x13106e0): Algorithm vtkTransformFilter(0x130fc80) returned failure for request: vtkInformation (0x1310220)

Debug: Off

Modified Time: 1961

Reference Count: 1

Registered Events: (none)

Request: REQUEST_DATA_OBJECT

ALGORITHM_AFTER_FORWARD: 1

FROM_OUTPUT_PORT: 0

FORWARD_DIRECTION: 0

知道如何解决这个问题吗?

最佳答案

在这里我找到了答案:

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

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

关于c++ - VTK 将平移和旋转应用于 vtkImageData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39906161/

相关文章:

c++ - 有没有办法知道当前程序消耗的总内存?

java - Android 中的实时图像源?

xslt - 通过 XSLT 替换 XHTML 中的 style= 属性时的模糊规则匹配

ios - UIView 转换后拖动行为错误

c++ - 整数和 float 转换

c++ - 你如何在 Emacs、Ubuntu 上使用 Clang 格式?

c++ - 实现可被接受为 std::ostringstream 引用的无操作 std::ostringstream

android - 背景图像或背景颜色?

android - 有什么方法可以存储图像以便用户看不到或删除它们?

Swift - 旋转图像,然后放大并裁剪以保持宽度/高度纵横比不变