From 0472084d41b97b131211bd725a65cd3df8818e1d Mon Sep 17 00:00:00 2001 From: Thiago Franco de Moraes Date: Tue, 18 Aug 2015 15:21:22 -0300 Subject: [PATCH] User can use the whitaker smoothing --- invesalius/data/surface.py | 23 ++++++++++++++++++++--- invesalius/data/surface_process.py | 5 ++++- invesalius/gui/dialogs.py | 3 ++- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/invesalius/data/surface.py b/invesalius/data/surface.py index 68ac6ca..272720e 100644 --- a/invesalius/data/surface.py +++ b/invesalius/data/surface.py @@ -24,6 +24,7 @@ import random import tempfile import weakref +import numpy as np import vtk import wx from wx.lib.pubsub import pub as Publisher @@ -37,6 +38,8 @@ import surface_process import utils as utl import vtk_utils as vu +from data import smooth_cy + try: import ca_smoothing except ImportError: @@ -465,13 +468,27 @@ class SurfaceManager(): q_in = multiprocessing.Queue() q_out = multiprocessing.Queue() + if algorithm == 'Whitaker': + iteractions = 10 + bsize = 4 + mask_tfile = tempfile.mktemp() + mmask = np.memmap(mask_tfile, shape=mask.matrix.shape, dtype='float64', mode='w+') + smooth_cy.smooth(mask.matrix, iteractions, bsize, mmask) + mmask[0, :, :] = -1 + mmask[:, 0, :] = -1 + mmask[:, :, 0] = -1 + + else: + mask_tfile = mask.temp_file + mmask = mask.matrix + p = [] for i in xrange(n_processors): sp = surface_process.SurfaceProcess(pipe_in, filename_img, matrix.shape, matrix.dtype, - mask.temp_file, - mask.matrix.shape, - mask.matrix.dtype, + mask_tfile, + mmask.shape, + mmask.dtype, spacing, mode, min_value, max_value, decimate_reduction, diff --git a/invesalius/data/surface_process.py b/invesalius/data/surface_process.py index 63a1378..7df5e51 100644 --- a/invesalius/data/surface_process.py +++ b/invesalius/data/surface_process.py @@ -151,7 +151,10 @@ class SurfaceProcess(multiprocessing.Process): contour.SetInputData(image) #contour.SetInput(flip.GetOutput()) if self.from_binary: - contour.SetValue(0, 127) # initial threshold + if self.algorithm == 'Whitaker': + contour.SetValue(0, 0.0) # initial threshold + else: + contour.SetValue(0, 127) # initial threshold else: contour.SetValue(0, self.min_value) # initial threshold contour.SetValue(1, self.max_value) # final threshold diff --git a/invesalius/gui/dialogs.py b/invesalius/gui/dialogs.py index 0be6b39..7b0178d 100644 --- a/invesalius/gui/dialogs.py +++ b/invesalius/gui/dialogs.py @@ -1307,7 +1307,8 @@ class SurfaceMethodPanel(wx.Panel): self.mask_edited = mask_edited self.alg_types = {_(u'Default'): 'Default', _(u'Context aware smoothing'): 'ca_smoothing', - _(u'Binary'): 'Binary'} + _(u'Binary'): 'Binary', + _(u'Reducing Aliasing'): 'Whitaker'} self.edited_imp = [_(u'Default'), ] self._build_widgets() -- libgit2 0.21.2