Commit 19c511ef7177e0b53cfb1e843140e0c6bfc966ed

Authored by tfmoraes
1 parent cfadc616

ENH: Some tests with smoothing in surface generation

Showing 1 changed file with 30 additions and 26 deletions   Show diff stats
invesalius/data/surface_process.py
... ... @@ -50,32 +50,32 @@ class SurfaceProcess(multiprocessing.Process):
50 50 self.pipe.send([prog, msg])
51 51  
52 52 def CreateSurface(self, roi):
53   - smoothed = ndimage.gaussian_filter(self.mask[roi], (1, 1, 1))
  53 + smoothed = numpy.array(self.mask[roi])
54 54 image = imagedata_utils.to_vtk(smoothed, self.spacing, roi.start,
55 55 "AXIAL")
56 56  
57 57 # Create vtkPolyData from vtkImageData
58   - print "Generating Polydata"
59   - if self.mode == "CONTOUR":
60   - print "Contour"
61   - contour = vtk.vtkContourFilter()
62   - contour.SetInput(image)
63   - contour.SetValue(0, 127.5) # initial threshold
64   - contour.ComputeScalarsOn()
65   - contour.ComputeGradientsOn()
66   - contour.ComputeNormalsOn()
67   - polydata = contour.GetOutput()
68   - else: #mode == "GRAYSCALE":
69   - mcubes = vtk.vtkMarchingCubes()
70   - mcubes.SetInput(image)
71   - mcubes.SetValue(0, 127.5)
72   - mcubes.ComputeScalarsOn()
73   - mcubes.ComputeGradientsOn()
74   - mcubes.ComputeNormalsOn()
75   - polydata = mcubes.GetOutput()
  58 + #print "Generating Polydata"
  59 + #if self.mode == "CONTOUR":
  60 + #print "Contour"
  61 + #contour = vtk.vtkContourFilter()
  62 + #contour.SetInput(image)
  63 + #contour.SetValue(0, 127.5) # initial threshold
  64 + #contour.ComputeScalarsOn()
  65 + #contour.ComputeGradientsOn()
  66 + #contour.ComputeNormalsOn()
  67 + #polydata = contour.GetOutput()
  68 + #else: #mode == "GRAYSCALE":
  69 + mcubes = vtk.vtkDiscreteMarchingCubes()
  70 + mcubes.SetInput(image)
  71 + mcubes.SetValue(0, 255)
  72 + mcubes.ComputeScalarsOn()
  73 + mcubes.ComputeGradientsOn()
  74 + mcubes.ComputeNormalsOn()
  75 + polydata = mcubes.GetOutput()
76 76  
77 77 print "Decimating"
78   - if self.decimate_reduction:
  78 + if not self.decimate_reduction:
79 79 decimation = vtk.vtkDecimatePro()
80 80 decimation.SetInput(polydata)
81 81 decimation.SetTargetReduction(self.decimate_reduction)
... ... @@ -83,19 +83,23 @@ class SurfaceProcess(multiprocessing.Process):
83 83 decimation.SplittingOff()
84 84 polydata = decimation.GetOutput()
85 85  
86   - print "Smoothing"
87 86 if self.smooth_iterations and self.smooth_relaxation_factor:
88   - smoother = vtk.vtkSmoothPolyDataFilter()
  87 + print "Smoothing"
  88 + smoother = vtk.vtkWindowedSincPolyDataFilter()
89 89 smoother.SetInput(polydata)
90 90 smoother.SetNumberOfIterations(self.smooth_iterations)
91   - smoother.SetFeatureAngle(80)
92   - smoother.SetRelaxationFactor(self.smooth_relaxation_factor)
93   - smoother.FeatureEdgeSmoothingOn()
  91 + smoother.SetFeatureAngle(120)
  92 + smoother.SetNumberOfIterations(30)
94 93 smoother.BoundarySmoothingOn()
  94 + smoother.SetPassBand(0.1)
  95 + smoother.FeatureEdgeSmoothingOn()
  96 + smoother.NonManifoldSmoothingOn()
  97 + smoother.NormalizeCoordinatesOn()
  98 + smoother.Update()
95 99 polydata = smoother.GetOutput()
96 100  
97 101 print "Saving"
98   - filename = tempfile.mktemp()
  102 + filename = tempfile.mktemp(suffix='_%s.vtp' % (self.pid))
99 103 writer = vtk.vtkXMLPolyDataWriter()
100 104 writer.SetInput(polydata)
101 105 writer.SetFileName(filename)
... ...