VTK 将平移和旋转应用到 vtkImageData
VTK apply translation and rotation to vtkImageData
我正在使用 VTK+Paraview 为演示文稿生成一些漂亮的图像。我的问题如下:我有一系列带有相应灰度图像的相机姿势,我想在 3D 中可视化它们 space。对于相机,我使用圆锥体并将其放在正确的位置,然后对其应用变换滤镜:
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。
另一种可能性是在 actor/prop 上 set a user transform 而不是实际转换对象。您无需更改对象,只需修改场景即可。
您可能会发现 TransformActor
示例很有用。
我正在使用 VTK+Paraview 为演示文稿生成一些漂亮的图像。我的问题如下:我有一系列带有相应灰度图像的相机姿势,我想在 3D 中可视化它们 space。对于相机,我使用圆锥体并将其放在正确的位置,然后对其应用变换滤镜:
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。
另一种可能性是在 actor/prop 上 set a user transform 而不是实际转换对象。您无需更改对象,只需修改场景即可。
您可能会发现 TransformActor
示例很有用。