From a061025c5234b4dd6c78c60ffbafef6b8c2aaba8 Mon Sep 17 00:00:00 2001 From: paulojamorim Date: Mon, 30 May 2011 19:42:42 +0000 Subject: [PATCH] FIX: Fixed error in generate surface in the win32 and win64 ticket #271 --- invesalius/data/imagedata_utils.py | 37 +------------------------------------ invesalius/data/slice_.py | 9 +++++---- invesalius/data/surface_process.py | 12 ++++++------ invesalius/session.py | 19 +++++++++++++++++++ 4 files changed, 31 insertions(+), 46 deletions(-) diff --git a/invesalius/data/imagedata_utils.py b/invesalius/data/imagedata_utils.py index 17e2811..68ce7af 100644 --- a/invesalius/data/imagedata_utils.py +++ b/invesalius/data/imagedata_utils.py @@ -546,39 +546,4 @@ def analyze2mmap(analyze): matrix.flush() return matrix, temp_file -def to_vtk(n_array, spacing, slice_number, orientation): - try: - dz, dy, dx = n_array.shape - except ValueError: - dy, dx = n_array.shape - dz = 1 - - v_image = numpy_support.numpy_to_vtk(n_array.flat) - - print orientation - if orientation == 'AXIAL': - extent = (0, dx -1, 0, dy -1, slice_number, slice_number + dz - 1) - elif orientation == 'SAGITAL': - dx, dy, dz = dz, dx, dy - extent = (slice_number, slice_number + dx - 1, 0, dy - 1, 0, dz - 1) - elif orientation == 'CORONAL': - dx, dy, dz = dx, dz, dy - extent = (0, dx - 1, slice_number, slice_number + dy - 1, 0, dz - 1) - - # Generating the vtkImageData - image = vtk.vtkImageData() - image.SetOrigin(0, 0, 0) - image.SetSpacing(spacing) - image.SetNumberOfScalarComponents(1) - image.SetDimensions(dx, dy, dz) - image.SetExtent(extent) - image.SetScalarType(numpy_support.get_vtk_array_type(n_array.dtype)) - image.AllocateScalars() - image.GetPointData().SetScalars(v_image) - image.Update() - - image_copy = vtk.vtkImageData() - image_copy.DeepCopy(image) - image_copy.Update() - - return image_copy + diff --git a/invesalius/data/slice_.py b/invesalius/data/slice_.py index a879108..e82ddf2 100644 --- a/invesalius/data/slice_.py +++ b/invesalius/data/slice_.py @@ -23,6 +23,7 @@ import vtk import wx.lib.pubsub as ps import constants as const +import converters import imagedata_utils as iu import style as st import session as ses @@ -358,7 +359,7 @@ class Slice(object): image = self.buffer_slices[orientation].vtk_image else: n_image = self.get_image_slice(orientation, slice_number) - image = iu.to_vtk(n_image, self.spacing, slice_number, orientation) + image = converters.to_vtk(n_image, self.spacing, slice_number, orientation) ww_wl_image = self.do_ww_wl(image) image = self.do_colour_image(ww_wl_image) if self.current_mask and self.current_mask.is_shown: @@ -368,7 +369,7 @@ class Slice(object): else: print "Do not getting from buffer" n_mask = self.get_mask_slice(orientation, slice_number) - mask = iu.to_vtk(n_mask, self.spacing, slice_number, orientation) + mask = converters.to_vtk(n_mask, self.spacing, slice_number, orientation) mask = self.do_colour_mask(mask) self.buffer_slices[orientation].mask = n_mask final_image = self.do_blend(image, mask) @@ -378,13 +379,13 @@ class Slice(object): self.buffer_slices[orientation].vtk_image = image else: n_image = self.get_image_slice(orientation, slice_number) - image = iu.to_vtk(n_image, self.spacing, slice_number, orientation) + image = converters.to_vtk(n_image, self.spacing, slice_number, orientation) ww_wl_image = self.do_ww_wl(image) image = self.do_colour_image(ww_wl_image) if self.current_mask and self.current_mask.is_shown: n_mask = self.get_mask_slice(orientation, slice_number) - mask = iu.to_vtk(n_mask, self.spacing, slice_number, orientation) + mask = converters.to_vtk(n_mask, self.spacing, slice_number, orientation) mask = self.do_colour_mask(mask) final_image = self.do_blend(image, mask) else: diff --git a/invesalius/data/surface_process.py b/invesalius/data/surface_process.py index 1782810..d645993 100644 --- a/invesalius/data/surface_process.py +++ b/invesalius/data/surface_process.py @@ -6,8 +6,7 @@ import numpy import vtk import i18n -import imagedata_utils - +import converters from scipy import ndimage class SurfaceProcess(multiprocessing.Process): @@ -33,11 +32,12 @@ class SurfaceProcess(multiprocessing.Process): self.flip_image = flip_image self.q_in = q_in self.q_out = q_out - - self.mask = numpy.memmap(filename, mode='r', dtype=dtype, - shape=shape) + self.dtype = dtype + self.shape = shape def run(self): + self.mask = numpy.memmap(self.filename, mode='r', dtype=self.dtype, + shape=self.shape) while 1: roi = self.q_in.get() print roi @@ -51,7 +51,7 @@ class SurfaceProcess(multiprocessing.Process): def CreateSurface(self, roi): smoothed = numpy.array(self.mask[roi]) - image = imagedata_utils.to_vtk(smoothed, self.spacing, roi.start, + image = converters.to_vtk(smoothed, self.spacing, roi.start, "AXIAL") flip = vtk.vtkImageFlip() flip.SetInput(image) diff --git a/invesalius/session.py b/invesalius/session.py index 03f2810..2bedf95 100644 --- a/invesalius/session.py +++ b/invesalius/session.py @@ -1,3 +1,22 @@ +#-------------------------------------------------------------------------- +# Software: InVesalius - Software de Reconstrucao 3D de Imagens Medicas +# Copyright: (C) 2001 Centro de Pesquisas Renato Archer +# Homepage: http://www.softwarepublico.gov.br +# Contact: invesalius@cti.gov.br +# License: GNU - GPL 2 (LICENSE.txt/LICENCA.txt) +#-------------------------------------------------------------------------- +# Este programa e software livre; voce pode redistribui-lo e/ou +# modifica-lo sob os termos da Licenca Publica Geral GNU, conforme +# publicada pela Free Software Foundation; de acordo com a versao 2 +# da Licenca. +# +# Este programa eh distribuido na expectativa de ser util, mas SEM +# QUALQUER GARANTIA; sem mesmo a garantia implicita de +# COMERCIALIZACAO ou de ADEQUACAO A QUALQUER PROPOSITO EM +# PARTICULAR. Consulte a Licenca Publica Geral GNU para obter mais +# detalhes. +#-------------------------------------------------------------------------- + import ConfigParser import os import shutil -- libgit2 0.21.2