Esempio n. 1
0
import vtk.util.colors

points = vtk.vtkPoints()
points.InsertNextPoint(0, 0, 0)
points.InsertNextPoint(0, 1, 0)
points.InsertNextPoint(1, 0, 0)
points.InsertNextPoint(0, 0, 1)

pointsPolyData = vtk.vtkPolyData()
pointsPolyData.SetPoints(points)

pointsImageData = vtk.vtkImageData()
pointsImageData.GetPointData().ShallowCopy(pointsPolyData.GetPointData())
pointsImageData.GetCellData().ShallowCopy(pointsPolyData.GetCellData())

bsplineCoeff = vtk.vtkImageBSplineCoefficients()
bsplineCoeff.SetInputData(pointsImageData)
bsplineCoeff.SetSplineDegree(3)
bsplineCoeff.SetBorderModeToClamp()
bsplineCoeff.Update()

bsplineInter = vtk.vtkImageBSplineInterpolator()
bsplineInter.SetSplineDegree(3)
bsplineInter.SetBorderModeToClamp()
bsplineInter.Initialize(bsplineCoeff.GetOutput())
bsplineInter.Update()

#TO FINISH

vertexFilter = vtk.vtkVertexGlyphFilter()
vertexFilter.SetInputData(pointsPolyData)
Esempio n. 2
0
reader.ReleaseDataFlagOff()
reader.SetDataByteOrderToLittleEndian()
reader.SetDataExtent(0,63,0,63,1,93)
reader.SetDataSpacing(3.2,3.2,1.5)
reader.SetFilePrefix("" + str(VTK_DATA_ROOT) + "/Data/headsq/quarter")
reader.SetDataMask(0x7fff)
transform = vtk.vtkTransform()
# rotate about the center of the image
transform.Translate(+100.8,+100.8,+69.0)
transform.RotateWXYZ(10,1,1,0)
transform.Translate(-100.8,-100.8,-69.0)
bspline3 = vtk.vtkImageBSplineInterpolator()
bspline3.SetSplineDegree(3)
bspline9 = vtk.vtkImageBSplineInterpolator()
bspline9.SetSplineDegree(9)
coeffs1 = vtk.vtkImageBSplineCoefficients()
coeffs1.SetInputConnection(reader.GetOutputPort())
coeffs1.SetSplineDegree(3)
coeffs2 = vtk.vtkImageBSplineCoefficients()
coeffs2.SetInputConnection(reader.GetOutputPort())
coeffs2.SetSplineDegree(9)
reslice1 = vtk.vtkImageReslice()
reslice1.SetInputConnection(coeffs1.GetOutputPort())
reslice1.SetResliceTransform(transform)
reslice1.SetInterpolator(bspline3)
reslice1.SetOutputSpacing(2.0,2.0,1.5)
reslice1.SetOutputOrigin(-32,-32,40)
reslice1.SetOutputExtent(0,127,0,127,0,0)
reslice2 = vtk.vtkImageReslice()
reslice2.SetInputConnection(coeffs1.GetOutputPort())
reslice2.SetInterpolator(bspline3)
Esempio n. 3
0
reader.ReleaseDataFlagOff()
reader.SetDataByteOrderToLittleEndian()
reader.SetDataExtent(0, 63, 0, 63, 1, 93)
reader.SetDataSpacing(3.2, 3.2, 1.5)
reader.SetFilePrefix("" + str(VTK_DATA_ROOT) + "/Data/headsq/quarter")
reader.SetDataMask(0x7fff)
transform = vtk.vtkTransform()
# rotate about the center of the image
transform.Translate(+100.8, +100.8, +69.0)
transform.RotateWXYZ(10, 1, 1, 0)
transform.Translate(-100.8, -100.8, -69.0)
bspline3 = vtk.vtkImageBSplineInterpolator()
bspline3.SetSplineDegree(3)
bspline9 = vtk.vtkImageBSplineInterpolator()
bspline9.SetSplineDegree(9)
coeffs1 = vtk.vtkImageBSplineCoefficients()
coeffs1.SetInputConnection(reader.GetOutputPort())
coeffs1.SetSplineDegree(3)
coeffs2 = vtk.vtkImageBSplineCoefficients()
coeffs2.SetInputConnection(reader.GetOutputPort())
coeffs2.SetSplineDegree(9)
reslice1 = vtk.vtkImageReslice()
reslice1.SetInputConnection(coeffs1.GetOutputPort())
reslice1.SetResliceTransform(transform)
reslice1.SetInterpolator(bspline3)
reslice1.SetOutputSpacing(2.0, 2.0, 1.5)
reslice1.SetOutputOrigin(-32, -32, 40)
reslice1.SetOutputExtent(0, 127, 0, 127, 0, 0)
reslice2 = vtk.vtkImageReslice()
reslice2.SetInputConnection(coeffs1.GetOutputPort())
reslice2.SetInterpolator(bspline3)
Esempio n. 4
0
def convert_transform_to_vtk(transform):
    """Produce an output vtkBSplineTransform corresponding to the

    registration results. Input is a numpy array corresponding to the displacement field.
    """
    displacement_field_vtk = vtk.util.numpy_support.numpy_to_vtk(
        num_array=transform, deep=True, array_type=vtk.VTK_FLOAT)
    displacement_field_vtk.SetNumberOfComponents(3)
    displacement_field_vtk.SetName('DisplacementField')
    grid_image = vtk.vtkImageData()
    if (vtk.vtkVersion().GetVTKMajorVersion() >= 6.0):
        grid_image.AllocateScalars(vtk.VTK_FLOAT, 3)
        grid_image.GetPointData().SetScalars(displacement_field_vtk)
    else:
        grid_image.SetScalarTypeToFloat()
        grid_image.SetNumberOfScalarComponents(3)
        grid_image.GetPointData().SetScalars(displacement_field_vtk)
        grid_image.Update()
    #print "CONVERT TXFORM 1:", grid_image.GetExtent(), displacement_field_vtk.GetSize()

    # this is a hard-coded assumption about where the polydata is located in space.
    # other code should check that it is centered.
    # This code uses a grid of 240mm x 240mm x 240mm
    #spacing origin extent
    num_vectors = len(transform) / 3
    dims = round(numpy.power(num_vectors, 1.0 / 3.0))
    # This MUST correspond to the size used in congeal_multisubject update_nonrigid_grid
    #size_mm = 240.0
    size_mm = 200.0
    origin = -size_mm / 2.0
    # assume 240mm x 240mm x 240mm grid
    spacing = size_mm / (dims - 1)
    grid_image.SetOrigin(origin, origin, origin)
    grid_image.SetSpacing(spacing, spacing, spacing)
    #grid_image.SetExtent(0, dims-1.0, 0, dims-1.0, 0, dims-1.0)
    grid_image.SetDimensions(int(dims), int(dims), int(dims))
    #print "CONVERT TXFORM:", num_vectors, dims, int(dims), dims-1.0, grid_image.GetExtent(),

    #print "GRID:", grid_image
    coeff = vtk.vtkImageBSplineCoefficients()
    if (vtk.vtkVersion().GetVTKMajorVersion() >= 6.0):
        coeff.SetInputData(grid_image)
    else:
        coeff.SetInput(grid_image)

    coeff.Update()
    # this was in the test code.
    coeff.UpdateWholeExtent()
    #print "TX:", transform.shape, transform, displacement_field_vtk, grid_image.GetExtent(), coeff.GetOutput().GetExtent()

    vtktrans = vtk.vtkBSplineTransform()
    if (vtk.vtkVersion().GetVTKMajorVersion() >= 6.0):
        vtktrans.SetCoefficientData(coeff.GetOutput())
    else:
        vtktrans.SetCoefficients(coeff.GetOutput())
    vtktrans.SetBorderModeToZero()

    ## print "~~~~~~~~~~~~~~~~~~~~~~~~"
    ## print "COEFF:",  coeff.GetOutput()
    ## print "*********"
    ## print "COEFF2:", vtktrans.GetCoefficients()
    ## print "======="

    return vtktrans
def convert_transform_to_vtk(transform):
    """Produce an output vtkBSplineTransform corresponding to the

    registration results. Input is a numpy array corresponding to the displacement field.
    """
    displacement_field_vtk = vtk.util.numpy_support.numpy_to_vtk(num_array=transform, deep=True, array_type=vtk.VTK_FLOAT)
    displacement_field_vtk.SetNumberOfComponents(3)
    displacement_field_vtk.SetName('DisplacementField')
    grid_image = vtk.vtkImageData()
    if (vtk.vtkVersion().GetVTKMajorVersion() >= 6.0):
        grid_image.AllocateScalars(vtk.VTK_FLOAT, 3)
        grid_image.GetPointData().SetScalars(displacement_field_vtk)
    else:
        grid_image.SetScalarTypeToFloat()
        grid_image.SetNumberOfScalarComponents(3)
        grid_image.GetPointData().SetScalars(displacement_field_vtk)
        grid_image.Update()
    #print "CONVERT TXFORM 1:", grid_image.GetExtent(), displacement_field_vtk.GetSize()

    # this is a hard-coded assumption about where the polydata is located in space.
    # other code should check that it is centered.
    # This code uses a grid of 240mm x 240mm x 240mm
    #spacing origin extent
    num_vectors = len(transform) / 3
    dims = round(numpy.power(num_vectors, 1.0/3.0))
    # This MUST correspond to the size used in congeal_multisubject update_nonrigid_grid
    #size_mm = 240.0
    size_mm = 200.0
    origin = -size_mm / 2.0
    # assume 240mm x 240mm x 240mm grid
    spacing = size_mm / (dims - 1)
    grid_image.SetOrigin(origin, origin, origin)
    grid_image.SetSpacing(spacing, spacing, spacing)
    #grid_image.SetExtent(0, dims-1.0, 0, dims-1.0, 0, dims-1.0)
    grid_image.SetDimensions(int(dims), int(dims), int(dims))
    #print "CONVERT TXFORM:", num_vectors, dims, int(dims), dims-1.0, grid_image.GetExtent(), 
    
    #print "GRID:", grid_image
    coeff = vtk.vtkImageBSplineCoefficients()
    if (vtk.vtkVersion().GetVTKMajorVersion() >= 6.0):
        coeff.SetInputData(grid_image)
    else:
        coeff.SetInput(grid_image)

    coeff.Update()
    # this was in the test code.
    coeff.UpdateWholeExtent()
    #print "TX:", transform.shape, transform, displacement_field_vtk, grid_image.GetExtent(), coeff.GetOutput().GetExtent()

    vtktrans = vtk.vtkBSplineTransform()
    if (vtk.vtkVersion().GetVTKMajorVersion() >= 6.0):
        vtktrans.SetCoefficientData(coeff.GetOutput())
    else:
        vtktrans.SetCoefficients(coeff.GetOutput())
    vtktrans.SetBorderModeToZero()

    ## print "~~~~~~~~~~~~~~~~~~~~~~~~"
    ## print "COEFF:",  coeff.GetOutput()
    ## print "*********"
    ## print "COEFF2:", vtktrans.GetCoefficients()
    ## print "======="
    
    return vtktrans