Commit 53e99da85d4acc68b2ccd220356b9fe11eb91f0b
1 parent
bc5cd630
Exists in
master
and in
6 other branches
ENH: Applying the convolution filter when a new raycasting preset is setted
Showing
1 changed file
with
18 additions
and
10 deletions
Show diff stats
invesalius/data/volume.py
... | ... | @@ -129,6 +129,8 @@ class Volume(): |
129 | 129 | else: |
130 | 130 | self.Create8bColorTable(self.scale) |
131 | 131 | self.Create8bOpacityTable(self.scale) |
132 | + image = self.DoConvolutionFilters(self.imagedata.GetOutput()) | |
133 | + self.volume_mapper.SetInput(image) | |
132 | 134 | |
133 | 135 | def OnSetRelativeWindowLevel(self, pubsub_evt): |
134 | 136 | diff_ww, diff_wl = pubsub_evt.data |
... | ... | @@ -327,6 +329,15 @@ class Volume(): |
327 | 329 | self.volume_properties.SetSpecular(shading['specular']) |
328 | 330 | self.volume_properties.SetSpecularPower(shading['specularPower']) |
329 | 331 | |
332 | + def DoConvolutionFilters(self, imagedata): | |
333 | + for filter in self.config['convolutionFilters']: | |
334 | + convolve = vtk.vtkImageConvolve() | |
335 | + convolve.SetInput(imagedata) | |
336 | + convolve.SetKernel5x5([i/60.0 for i in Kernels[filter]]) | |
337 | + convolve.Update() | |
338 | + imagedata = convolve.GetOutput() | |
339 | + return imagedata | |
340 | + | |
330 | 341 | def LoadVolume(self): |
331 | 342 | proj = Project() |
332 | 343 | image = proj.imagedata |
... | ... | @@ -340,7 +351,6 @@ class Volume(): |
340 | 351 | |
341 | 352 | image = flip.GetOutput() |
342 | 353 | |
343 | - | |
344 | 354 | scale = image.GetScalarRange() |
345 | 355 | self.scale = scale |
346 | 356 | |
... | ... | @@ -350,6 +360,7 @@ class Volume(): |
350 | 360 | cast.SetOutputScalarTypeToUnsignedShort() |
351 | 361 | cast.Update() |
352 | 362 | image2 = cast |
363 | + self.imagedata = image2 | |
353 | 364 | if self.config['advancedCLUT']: |
354 | 365 | self.Create16bColorTable(scale) |
355 | 366 | self.CreateOpacityTable(scale) |
... | ... | @@ -357,12 +368,7 @@ class Volume(): |
357 | 368 | self.Create8bColorTable(scale) |
358 | 369 | self.Create8bOpacityTable(scale) |
359 | 370 | |
360 | - convolve = vtk.vtkImageConvolve() | |
361 | - convolve.SetInput(image2.GetOutput()) | |
362 | - convolve.SetKernel5x5([i/60.0 for i in Kernels[self.config['convolutionFilters'][0]]]) | |
363 | - convolve.Update() | |
364 | - | |
365 | - image2 = convolve | |
371 | + image2 = self.DoConvolutionFilters(image2.GetOutput()) | |
366 | 372 | |
367 | 373 | composite_function = vtk.vtkVolumeRayCastCompositeFunction() |
368 | 374 | composite_function.SetCompositeMethodToInterpolateFirst() |
... | ... | @@ -376,22 +382,24 @@ class Volume(): |
376 | 382 | if const.TYPE_RAYCASTING_MAPPER: |
377 | 383 | volume_mapper = vtk.vtkVolumeRayCastMapper() |
378 | 384 | #volume_mapper.AutoAdjustSampleDistancesOff() |
379 | - volume_mapper.SetInput(image2.GetOutput()) | |
385 | + volume_mapper.SetInput(image2) | |
380 | 386 | volume_mapper.SetVolumeRayCastFunction(composite_function) |
381 | 387 | #volume_mapper.SetGradientEstimator(gradientEstimator) |
382 | 388 | volume_mapper.IntermixIntersectingGeometryOn() |
383 | 389 | else: |
384 | 390 | volume_mapper = vtk.vtkFixedPointVolumeRayCastMapper() |
385 | 391 | #volume_mapper.AutoAdjustSampleDistancesOff() |
386 | - volume_mapper.SetInput(image2.GetOutput()) | |
392 | + volume_mapper.SetInput(image2) | |
387 | 393 | volume_mapper.IntermixIntersectingGeometryOn() |
388 | 394 | |
395 | + self.volume_mapper = volume_mapper | |
396 | + | |
389 | 397 | # TODO: Look to this |
390 | 398 | #volume_mapper = vtk.vtkVolumeTextureMapper2D() |
391 | 399 | #volume_mapper.SetInput(image2.GetOutput()) |
392 | 400 | |
393 | 401 | #Cut Plane |
394 | - CutPlane(image2.GetOutput(), volume_mapper) | |
402 | + CutPlane(image2, volume_mapper) | |
395 | 403 | |
396 | 404 | #self.color_transfer = color_transfer |
397 | 405 | ... | ... |