def VTKGrowN(x,n=2,m=None,numret=False,origsize=None,interp=False,wrap=False, constant=None,mirror=False,xshift=0,yshift=0): if type(x) == np.ndarray: i = NumToVTKImage(x) else: i = x d = i.GetDimensions() if not m: m = n if d[0] == 1: n = 1 if d[1] == 1: m = 1 im = vtk.vtkImageMagnify() im.SetMagnificationFactors(n,m,1) if interp: im.InterpolateOn() else: im.InterpolateOff() im.SetInputData(i) o = im.GetOutput() im.Update() o.SetSpacing(1,1,1) #o.Update() o = VTKImageShift(o,xshift,yshift,interp=True,wrap=wrap,constant=constant, mirror=mirror) if origsize is not None: if len(origsize) == 1: origsize=(1,)+origsize p = vtk.vtkImageMirrorPad() p.SetOutputWholeExtent(0,origsize[1]-1,0,origsize[0]-1,0,0) p.SetInputData(o) f = p.GetOutput() p.Update() o = f if numret: return VTKImageToNum(o) else: return o
def __init__(self, module_manager): SimpleVTKClassModuleBase.__init__( self, module_manager, vtk.vtkImageMirrorPad(), 'Processing.', ('vtkImageData',), ('vtkImageData',), replaceDoc=True, inputFunctions=None, outputFunctions=None)
def __init__(self, module_manager): SimpleVTKClassModuleBase.__init__(self, module_manager, vtk.vtkImageMirrorPad(), 'Processing.', ('vtkImageData', ), ('vtkImageData', ), replaceDoc=True, inputFunctions=None, outputFunctions=None)
def tiling(self, nx=4, ny=4, shift=(0,0)): """ Generate a tiling from the current picture by mirroring and repeating it. Parameters ---------- nx : float, optional number of repeats along x. The default is 4. ny : float, optional number of repeats along x. The default is 4. shift : list, optional shift in x and y in pixels. The default is 4. """ x0,x1,y0,y1,z0,z1 = self._data.GetExtent() constantPad = vtk.vtkImageMirrorPad() constantPad.SetInputData(self._data) constantPad.SetOutputWholeExtent(int(x0+shift[0]+0.5), int(x1*nx+shift[0]+0.5), int(y0+shift[1]+0.5), int(y1*ny+shift[1]+0.5), z0,z1) constantPad.Update() return Picture(constantPad.GetOutput())
#!/usr/bin/env python import vtk from vtk.test import Testing from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() # Make an image larger by repeating the data. Tile. # Image pipeline reader = vtk.vtkPNMReader() reader.ReleaseDataFlagOff() reader.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/earth.ppm") pad = vtk.vtkImageMirrorPad() pad.SetInputConnection(reader.GetOutputPort()) pad.SetOutputWholeExtent(-120, 320, -120, 320, 0, 0) quant = vtk.vtkImageQuantizeRGBToIndex() quant.SetInputConnection(pad.GetOutputPort()) quant.SetNumberOfColors(16) quant.Update() map = vtk.vtkImageMapToRGBA() map.SetInputConnection(quant.GetOutputPort()) map.SetLookupTable(quant.GetLookupTable()) viewer = vtk.vtkImageViewer() viewer.SetInputConnection(map.GetOutputPort()) viewer.SetColorWindow(256) viewer.SetColorLevel(127) viewer.GetActor2D().SetDisplayPosition(110, 110) viewer.Render() # --- end of script --
def main(): colors = vtk.vtkNamedColors() fileName = get_program_parameters() # Read the image. readerFactory = vtk.vtkImageReader2Factory() reader = readerFactory.CreateImageReader2(fileName) reader.SetFileName(fileName) reader.Update() # Pipelines constantPad = vtk.vtkImageConstantPad() constantPad.SetInputConnection(reader.GetOutputPort()) constantPad.SetConstant(800) constantPad.SetOutputWholeExtent(-127, 383, -127, 383, 22, 22) mirrorPad = vtk.vtkImageMirrorPad() mirrorPad.SetInputConnection(reader.GetOutputPort()) mirrorPad.SetOutputWholeExtent(constantPad.GetOutputWholeExtent()) # Create actors constantPadColor = vtk.vtkImageMapToWindowLevelColors() constantPadColor.SetWindow(2000) constantPadColor.SetLevel(1000) constantPadColor.SetInputConnection(constantPad.GetOutputPort()) constantPadActor = vtk.vtkImageActor() constantPadActor.GetMapper().SetInputConnection( constantPadColor.GetOutputPort()) constantPadActor.GetProperty().SetInterpolationTypeToNearest() mirrorPadColor = vtk.vtkImageMapToWindowLevelColors() mirrorPadColor.SetWindow(2000) mirrorPadColor.SetLevel(1000) mirrorPadColor.SetInputConnection(mirrorPad.GetOutputPort()) mirrorPadActor = vtk.vtkImageActor() mirrorPadActor.GetMapper().SetInputConnection( mirrorPadColor.GetOutputPort()) mirrorPadActor.GetProperty().SetInterpolationTypeToNearest() # Setup the renderers. constantPadRenderer = vtk.vtkRenderer() constantPadRenderer.SetViewport(0.0, 0.0, 0.5, 1.0) constantPadRenderer.AddActor(constantPadActor) constantPadRenderer.ResetCamera() constantPadRenderer.SetBackground(colors.GetColor3d("SlateGray")) mirrorPadRenderer = vtk.vtkRenderer() mirrorPadRenderer.SetViewport(0.5, 0.0, 1.0, 1.0) mirrorPadRenderer.AddActor(mirrorPadActor) mirrorPadRenderer.SetActiveCamera(constantPadRenderer.GetActiveCamera()) mirrorPadRenderer.SetBackground(colors.GetColor3d("LightSlateGray")) renderWindow = vtk.vtkRenderWindow() renderWindow.SetSize(600, 300) renderWindow.SetWindowName('Pad') renderWindow.AddRenderer(constantPadRenderer) renderWindow.AddRenderer(mirrorPadRenderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() style = vtk.vtkInteractorStyleImage() renderWindowInteractor.SetInteractorStyle(style) renderWindowInteractor.SetRenderWindow(renderWindow) constantPadRenderer.GetActiveCamera().Dolly(1.2) constantPadRenderer.ResetCameraClippingRange() renderWindowInteractor.Initialize() renderWindowInteractor.Start()
def VTKConvolve(im,numret=0,k=5,clip=1,x=1,y=1,wrap=0,mirror=1,constant=None, kernel=None): if type(im) == np.ndarray: i = NumToVTKImage(im) else: i = im d = i.GetDimensions() e = i.GetExtent() dtest = np.sort(d) if sum(dtest[:2]) == 2: onedim=1 else: onedim = 0 if (d[0] == 1): oned = 1 elif (d[1] == 1): oned = 2 else: oned = 0 if x and not y: oned = 2 if y and not x: oned = 1 if onedim: oned = 1 if constant is not None: ip = vtk.vtkImageConstantPad() if d[0] > 1: x0,x1=-k,d[0]+k-1 else: x0,x1=0,0 if d[1] > 1: y0,y1=-k,d[1]+k-1 else: y0,y1=0,0 ip.SetOutputWholeExtent(x0,x1,y0,y1,0,0) ip.SetConstant(constant) ip.SetInputData(i) i = ip.GetOutput() ip.Update() elif mirror: ip = vtk.vtkImageMirrorPad() if d[0] > 1: x0,x1=-k,d[0]+k-1 else: x0,x1=0,0 if d[1] > 1: y0,y1=-k,d[1]+k-1 else: y0,y1=0,0 ip.SetOutputWholeExtent(x0,x1,y0,y1,0,0) ip.SetInputData(i) i = ip.GetOutput() ip.Update() elif wrap: ip = vtk.vtkImageWrapPad() if d[0] > 1: x0,x1=-k,d[0]+k-1 else: x0,x1=0,0 if d[1] > 1: y0,y1=-k,d[1]+k-1 else: y0,y1=0,0 ip.SetOutputWholeExtent(x0,x1,y0,y1,0,0) ip.SetInputData(i) i = ip.GetOutput() ip.Update() c = vtk.vtkImageConvolve() if kernel is None: if k == 3: k1 = np.asarray([0.25,0.5,0.25]) elif k == 5: k1 = np.asarray([0.0625,0.25,0.375,0.25,0.0625]) if onedim: ke = np.ones((k,k),np.float64) * k1 elif not oned: ke = k1[::,np.newaxis]*k1[np.newaxis,::] elif oned == 1: ke = np.zeros((k,k),np.float64); ke[::,2] = k1 elif oned == 2: ke = np.zeros((k,k),np.float64); ke[2] = k1 ke = np.ravel(ke) ke = ke / np.sum(ke) if onedim: ke = len(k1)*ke else: k = kernel.shape[0] ke = np.ravel(kernel) if k == 3: c.SetKernel3x3(ke) if k == 5: c.SetKernel5x5(ke) if k == 7: c.SetKernel7x7(ke) c.SetInputData(i) o = c.GetOutput() c.Update() if clip: ic = vtk.vtkImageClip() notx = -(not x) * 0 noty = -(not y) * 0 ic.SetOutputWholeExtent(notx,d[0]-1+notx,noty,d[1]-1+noty,0,0) ic.SetInputData(o) ic.ClipDataOn() o = ic.GetOutput() ic.Update() if numret: return VTKImageToNum(o) else: return o
def VTKImageTransform(x,dx,dy,numret=False,reverse=False,origsize=None, cubic=False,interp=True,scalex=1,scaley=1,constant=0,wrap=False, mirror=False): maxdx = max([int(max(abs(dx.ravel()))+1),(dx.shape[1]-x.shape[1])]) maxdy = max([int(max(abs(dy.ravel()))+1),(dx.shape[0]-x.shape[0])]) dx = dx.astype(np.float32) dy = dy.astype(np.float32) if scalex > 1: xx = np.arange(x.shape[1]) dx = (xx[np.newaxis,::]+dx).astype(np.float32) dy = VTKGrowN(dy,scalex,1,numret=True) dx = VTKGrowN(dx,scalex,1,numret=True) dx = (dx-np.arange(scalex*x.shape[1])[np.newaxis,::]).\ astype(np.float32) if scaley > 1: yy = np.arange(x.shape[0]) dy = (yy[::,np.newaxis]+dy).astype(np.float32) dy = VTKGrowN(dy,1,scaley,numret=True) dx = VTKGrowN(dx,1,scaley,numret=True) dy = (dy-np.arange(scaley*x.shape[0])[::,np.newaxis]).\ astype(np.float32) if type(x) == np.ndarray: i = NumToVTKImage(x) else: i = x if type(dx) == np.ndarray: tx = NumToVTKImage(dx) else: tx = dx if type(dy) == np.ndarray: ty = NumToVTKImage(dy) else: ty = dy dm = ty.GetDimensions() dz = np.zeros(dy.shape,dy.dtype) tz = NumToVTKImage(dz) a = vtk.vtkImageAppendComponents() a.AddInputData(tx) a.AddInputData(ty) a.AddInputData(tz) a.Update() t = a.GetOutput() r = vtk.vtkGridTransform() r.SetDisplacementGridData(t) r.Update() s = vtk.vtkImageReslice() s.WrapOff() s.MirrorOn() if interp: s.InterpolateOn() if cubic: s.SetInterpolationModeToCubic() else: s.SetInterpolationModeToLinear() s.SetOutputDimensionality(2) if reverse: r.SetInterpolationModeToLinear() r.SetInverseTolerance(0.001) r.SetInverseIterations(1000) r.DebugOff() ir = r.GetInverse() ir.SetInterpolationModeToLinear() ir.SetInverseTolerance(0.001) ir.SetInverseIterations(1000) ir.GlobalWarningDisplayOff() s.SetResliceTransform(ir) s.AutoCropOutputOff() if origsize: s.SetOutputExtent(0,origsize[1]-1,0,origsize[0]-1,0,0) else: s.SetOutputExtent(0,scalex*dm[0]-1,0,scaley*dm[1]-1,0,0) else: r.SetInterpolationModeToCubic() r.SetInverseTolerance(0.001) r.SetInverseIterations(1000) r.GlobalWarningDisplayOff() s.SetOutputExtent(0,scalex*dm[0]-1,0,scaley*dm[1]-1,0,0) s.AutoCropOutputOff() s.SetResliceTransform(r) if mirror: ip = vtk.vtkImageMirrorPad() elif wrap: ip = vtk.vtkImageWrapPad() else: ip = vtk.vtkImageConstantPad(); ip.SetConstant(constant) ip.SetOutputWholeExtent(0-maxdx,dm[0]-1+maxdx,0-maxdy,dm[1]-1+maxdy,0,0) ip.SetInputData(i) ip.Update() s.SetInputData(ip.GetOutput()) o=s.GetOutput() s.Update() if numret: ri = VTKImageToNum(o) else: ri = o return ri
#!/usr/bin/env python import vtk from vtk.test import Testing from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() # Make an image larger by repeating the data. Tile. # Image pipeline reader = vtk.vtkPNMReader() reader.ReleaseDataFlagOff() reader.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/earth.ppm") pad = vtk.vtkImageMirrorPad() pad.SetInputConnection(reader.GetOutputPort()) pad.SetOutputWholeExtent(-120,320,-120,320,0,0) quant = vtk.vtkImageQuantizeRGBToIndex() quant.SetInputConnection(pad.GetOutputPort()) quant.SetNumberOfColors(16) quant.Update() map = vtk.vtkImageMapToRGBA() map.SetInputConnection(quant.GetOutputPort()) map.SetLookupTable(quant.GetLookupTable()) viewer = vtk.vtkImageViewer() viewer.SetInputConnection(map.GetOutputPort()) viewer.SetColorWindow(256) viewer.SetColorLevel(127) viewer.GetActor2D().SetDisplayPosition(110,110) viewer.Render() # --- end of script --