[docs]defload_image(file_name,as_vtktype=False):"""Load an image. Parameters ---------- file_name: string should be png, bmp, jpeg or jpg files as_vtktype: bool, optional if True, return vtk output otherwise a ndarray. Default False. Returns ------- image: ndarray or vtk output desired image array """d_reader={".png":vtk.vtkPNGReader,".bmp":vtk.vtkBMPReader,".jpeg":vtk.vtkJPEGReader,".jpg":vtk.vtkJPEGReader,".tiff":vtk.vtkTIFFReader,".tif":vtk.vtkTIFFReader,}extension=os.path.splitext(os.path.basename(file_name).lower())[1]ifextension.lower()notind_reader.keys():raiseIOError("Impossible to read the file {0}: Unknown extension {1}".format(file_name,extension))reader=d_reader.get(extension)()reader.SetFileName(file_name)reader.Update()reader.GetOutput().GetPointData().GetArray(0).SetName("original")ifas_vtktype:returnreader.GetOutput()h,w,_=reader.GetOutput().GetDimensions()vtk_array=reader.GetOutput().GetPointData().GetScalars()components=vtk_array.GetNumberOfComponents()image=numpy_support.vtk_to_numpy(vtk_array).reshape(h,w,components)returnimage
[docs]defsave_image(arr,file_name,compression_quality=100,compression_type='deflation'):"""Save a 2d or 3d image. Parameters ---------- arr: ndarray array to save file_name: string should be png, bmp, jpeg or jpg files compression_quality: int compression_quality for jpeg data. 0 = Low quality, 100 = High quality compression_type: str compression type for tiff file select between: None, lzw, deflation (default) """ifarr.ndim>3:raiseIOError("Image Dimensions should be <=3")ifarr.ndim==2:arr=arr[...,None]d_writer={".png":vtk.vtkPNGWriter,".bmp":vtk.vtkBMPWriter,".jpeg":vtk.vtkJPEGWriter,".jpg":vtk.vtkJPEGWriter,".tiff":vtk.vtkTIFFWriter,".tif":vtk.vtkTIFFWriter,}extension=os.path.splitext(os.path.basename(file_name).lower())[1]ifextension.lower()notind_writer.keys():raiseIOError("Impossible to save the file {0}: Unknown extension {1}".format(file_name,extension))vtk_array_type=numpy_support.get_vtk_array_type(arr.dtype)vtk_array=numpy_support.numpy_to_vtk(num_array=arr.ravel(),deep=True,array_type=vtk_array_type)# Todo, look the following link for managing png 16bit# https://stackoverflow.com/questions/15667947/vtkpngwriter-printing-out-black-imagesvtk_data=vtk.vtkImageData()vtk_data.SetDimensions(arr.shape)vtk_data.SetSpacing(1.0,1.0,1.0)vtk_data.SetOrigin(0.0,0.0,0.0)vtk_data.GetPointData().SetScalars(vtk_array)writer=d_writer.get(extension)()writer.SetFileName(file_name)writer.SetInputData(vtk_data)ifextension.lower()in[".jpg",".jpeg"]:writer.ProgressiveOn()writer.SetQuality(compression_quality)ifextension.lower()in[".tif",".tiff"]:ifnotcompression_type:writer.SetCompressionToNoCompression()elifcompression_type.lower()=='lzw':writer.SetCompressionToLZW()elifcompression_type.lower()=='deflation':writer.SetCompressionToDeflate()writer.Write()
[docs]defload_polydata(file_name,is_mni_obj=False):"""Load a vtk polydata to a supported format file. Supported file formats are OBJ, VTK, FIB, PLY, STL and XML Parameters ---------- file_name : string is_mni_obj : bool Returns ------- output : vtkPolyData """file_extension=file_name.split(".")[-1].lower()iffile_extension=="vtk":reader=vtk.vtkPolyDataReader()eliffile_extension=="fib":reader=vtk.vtkPolyDataReader()eliffile_extension=="ply":reader=vtk.vtkPLYReader()eliffile_extension=="stl":reader=vtk.vtkSTLReader()eliffile_extension=="xml":reader=vtk.vtkXMLPolyDataReader()eliffile_extension=="obj"andis_mni_obj:reader=vtk.vtkMNIObjectReader()eliffile_extension=="obj":try:# try to read as a normal objreader=vtk.vtkOBJReader()exceptException:# than try load a MNI obj formatreader=vtk.vtkMNIObjectReader()else:raiseIOError("polydata "+file_extension+" is not suported")reader.SetFileName(file_name)reader.Update()returnreader.GetOutput()
[docs]defsave_polydata(polydata,file_name,binary=False,color_array_name=None,is_mni_obj=False):"""Save a vtk polydata to a supported format file. Save formats can be VTK, FIB, PLY, STL and XML. Parameters ---------- polydata : vtkPolyData file_name : string binary : bool color_array_name: ndarray is_mni_obj : bool """# get file extension (type)file_extension=file_name.split(".")[-1].lower()iffile_extension=="vtk":writer=vtk.vtkPolyDataWriter()eliffile_extension=="fib":writer=vtk.vtkPolyDataWriter()eliffile_extension=="ply":writer=vtk.vtkPLYWriter()eliffile_extension=="stl":writer=vtk.vtkSTLWriter()eliffile_extension=="xml":writer=vtk.vtkXMLPolyDataWriter()eliffile_extension=="obj":ifis_mni_obj:writer=vtk.vtkMNIObjectWriter()else:# vtkObjWriter not available on python# vtk.vtkOBJWriter()raiseIOError("OBJ Writer not available. MNI obj is the only"" available writer so set mni_tag option to True")else:raiseIOError("Unknown extension ({})".format(file_extension))writer.SetFileName(file_name)writer=set_input(writer,polydata)ifcolor_array_nameisnotNoneandfile_extension=="ply":writer.SetArrayName(color_array_name)ifbinary:writer.SetFileTypeToBinary()writer.Update()writer.Write()