2015-02-14 2 views
1

У меня есть стек черно-белых изображений, который я храню в своем коде на C++ в виде 3D-вектора, содержащего 0 и 1. Я хочу преобразовать этот 3D-вектор в неструктурированную сетку vtk, причем каждый воксел является ортогональным элементом. Есть ли библиотека, которая может это сделатьПреобразование 3D-массива (вектор) в vtk неструктурированной сетки

+0

Что вы подразумеваете под «ортогональным элементом»? –

+0

Под кубическим я имею в виду гексаэдрический (HEX_8) тип элемента. Так что во время сетки каждый воксел становится элементом. – Lalit

ответ

0

Можно создать неструктурированные сетки с vtk, имеющими воксели в качестве элементарных ячеек. Проверьте это document, в котором приведены сведения о других доступных типах ячеек. Чтобы создать такую ​​сетку, вы должны проанализировать содержимое вашего вектора и создать каждый воксель, а затем добавить его в сетку, как это сделано в следующем коде на языке python (теперь нет возможности для тестирования C++, но синтаксис легко переносится):

import vtk 

voxelPoints = vtk.vtkPoints() 
voxelPoints.SetNumberOfPoints(8) 
voxelPoints.InsertPoint(0, 0, 0, 0) 
voxelPoints.InsertPoint(1, 1, 0, 0) 
voxelPoints.InsertPoint(2, 0, 1, 0) 
voxelPoints.InsertPoint(3, 1, 1, 0) 
voxelPoints.InsertPoint(4, 0, 0, 1) 
voxelPoints.InsertPoint(5, 1, 0, 1) 
voxelPoints.InsertPoint(6, 0, 1, 1) 
voxelPoints.InsertPoint(7, 1, 1, 1) 

aVoxel = vtk.vtkVoxel() 
aVoxel.GetPointIds().SetId(0, 0) 
aVoxel.GetPointIds().SetId(1, 1) 
aVoxel.GetPointIds().SetId(2, 2) 
aVoxel.GetPointIds().SetId(3, 3) 
aVoxel.GetPointIds().SetId(4, 4) 
aVoxel.GetPointIds().SetId(5, 5) 
aVoxel.GetPointIds().SetId(6, 6) 
aVoxel.GetPointIds().SetId(7, 7) 

aVoxelGrid = vtk.vtkUnstructuredGrid() 
aVoxelGrid.InsertNextCell(aVoxel.GetCellType(), aVoxel.GetPointIds()) 
aVoxelGrid.SetPoints(voxelPoints) 

aVoxelMapper = vtk.vtkDataSetMapper() 
aVoxelMapper.SetInputData(aVoxelGrid) 

aVoxelActor = vtk.vtkActor() 
aVoxelActor.SetMapper(aVoxelMapper) 
aVoxelActor.GetProperty().SetDiffuseColor(1, 0, 0) 

ren = vtk.vtkRenderer() 
renWin = vtk.vtkRenderWindow() 
renWin.AddRenderer(ren) 
iren = vtk.vtkRenderWindowInteractor() 
iren.SetRenderWindow(renWin) 
ren.AddActor(aVoxelActor) 

# Render the scene and start interaction. 
iren.Initialize() 
renWin.Render() 
iren.Start() 
Смежные вопросы