VTK применяет перевод и ротацию к vtkImageData

Я использую VTK + Paraview для создания хороших изображений для презентации. Моя проблема заключается в следующем: у меня есть последовательность поз камеры с соответствующими изображениями в градациях серого, и я хотел бы визуализировать их в трехмерном пространстве. Для камеры я использую конус, и чтобы поставить его в правильное положение, я применяю к нему фильтр преобразования:

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

Есть идеи, как это решить?

2

Решение

Здесь я нашел ответ:

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

По сути, vtkImageData всегда должен быть выровнен по оси. Если вы хотите применить преобразование к сетке, лучше использовать vtkStructuredGrid.

2

Другие решения

Другая возможность заключается в установить пользовательское преобразование на актера / опору вместо фактического преобразования объекта. Вместо того, чтобы менять объект, вы просто изменяете сцену.

Вы можете найти TransformActor пример полезный.

0

По вопросам рекламы [email protected]