import vtk
import numpy as np
from vtk.util.numpy_support import numpy_to_vtk
import tifffile

def save_vti(filename, arr, dataTag="scalar", spacing=(1,1,1)):
    nz, ny, nx = arr.shape
    image = vtk.vtkImageData()
    image.SetSpacing(*spacing)
    image.SetExtent(0, nx, 0, ny, 0, nz)

    flat = np.ascontiguousarray(arr).ravel(order="C")
    vtk_arr = numpy_to_vtk(num_array=flat, deep=True)
    vtk_arr.SetName(dataTag)

    image.GetCellData().SetScalars(vtk_arr)

    writer = vtk.vtkXMLImageDataWriter()
    writer.SetFileName(filename)
    writer.SetInputData(image)
    writer.SetDataModeToBinary()
    writer.Write()

G = tifffile.imread("test.tiff")
save_vti("test.vti", G, "phase")