Commit 19c511ef7177e0b53cfb1e843140e0c6bfc966ed
1 parent
cfadc616
Exists in
master
and in
67 other branches
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) | ... | ... |