用python中的vtk插值点

2024-10-01 04:51:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用VTK插值“src”,一个numpy数组(30,3)。输入是这个数组,输出应该是一个颜色映射,数组中的每个点都分配了一个颜色。为此,我使用了vtk probefilter,vtk contourfilter和vtk delaunay,但并不是所有的点都是完全内插的。以下是代码的一部分:

import vtk 
import numpy as np
src=np.random.rand(32,3)

vtkPoints=vtk.vtkPoints()

for i in range(0,src.shape[0]):
    x=src[i,0]
    y=src[i,1]
    z=src[i,2]
    p=[x,y,z]
    vtkPoints.InsertNextPoint(p)                                                                    
    poly = vtk.vtkPolyData()
poly.SetPoints(vtkPoints)
#Triangulate the grid points. 
#Create a grid of points to interpolate over
gridPoints =vtk.vtkPoints()
for x in range (0,src.shape[0]):
    for y in range (0,src.shape[1]):
        gridPoints.InsertNextPoint(x,y,0)

#Triangulate the grid points. 
vtkDelaunay=vtk.vtkDelaunay2D()
vtkDelaunay.SetInputData(poly)
vtkDelaunay.Update()

#Create a dataset from the grid points
gridPolyData =vtk.vtkPolyData()
gridPolyData.SetPoints(gridPoints)

#Perform the interpolation
probeFilter =vtk.vtkProbeFilter()
probeFilter.SetSourceConnection(vtkDelaunay.GetOutputPort())
probeFilter.SetInputData(gridPolyData)
probeFilter.Update()

gridWarpScalar =vtk.vtkWarpScalar()
gridWarpScalar.SetInputConnection(probeFilter.GetOutputPort())
gridWarpScalar.Update()

#contour filter:
surf = vtk.vtkSurfaceReconstructionFilter()
surf.SetInputData(poly)
surf.GetOutput().GetPointData().SetScalars(weights)
surf.Update()

contourFilter = vtk.vtkContourFilter()
contourFilter.SetInputConnection(surf.GetOutputPort())
contourFilter.SetValue(0, 0.0)
contourFilter.Update()

# visualization 
Mapper =vtk.vtkPolyDataMapper()
Mapper.SetInputConnection(contourFilter.GetOutputPort())
Mapper.ScalarVisibilityOff()

Actor=vtk.vtkActor()
Actor.SetMapper(Mapper)
Actor.GetProperty().SetColor(1.0, 0, 0)
Actor.GetProperty().SetPointSize(3)

gridMapper =vtk.vtkDataSetMapper()
gridMapper.SetInputConnection(vtkDelaunay.GetOutputPort())
gridMapper.ScalarVisibilityOff()

gridActor =vtk.vtkActor()
gridActor.SetMapper(gridMapper);
gridActor.GetProperty().SetColor(0, 0, 1.0)
gridActor.GetProperty().SetPointSize(3)

renderer =vtk.vtkRenderer()
renderWindow =vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor =vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)

style =vtk.vtkInteractorStyleTrackballCamera()
renderWindowInteractor.SetInteractorStyle(style)
renderer.AddActor(Actor)
renderer.AddActor(gridActor) 
renderWindow.Render()
renderWindowInteractor.Start()

Tags: thesrcupdatesurfpointsgridactorvtk