Commit a84bfc2023ffaaa389d599e862112e8e9c80b084
1 parent
5323e991
Exists in
master
and in
68 other branches
FIX: Inverted 3D from Coronal Slice (#240)
Showing
3 changed files
with
43 additions
and
25 deletions
Show diff stats
invesalius/data/surface.py
... | ... | @@ -431,11 +431,16 @@ class SurfaceManager(): |
431 | 431 | writer.Write() |
432 | 432 | |
433 | 433 | language = ses.Session().language |
434 | - | |
434 | + | |
435 | + if (prj.Project().original_orientation == const.AXIAL): | |
436 | + flip_image = True | |
437 | + else: | |
438 | + flip_image = False | |
439 | + | |
435 | 440 | pipe_in, pipe_out = multiprocessing.Pipe() |
436 | 441 | sp = surface_process.SurfaceProcess(pipe_in, filename_img, mode, min_value, max_value, |
437 | 442 | decimate_reduction, smooth_relaxation_factor, |
438 | - smooth_iterations, language, fill_holes, keep_largest) | |
443 | + smooth_iterations, language, fill_holes, keep_largest, flip_image) | |
439 | 444 | sp.start() |
440 | 445 | |
441 | 446 | while 1: | ... | ... |
invesalius/data/surface_process.py
... | ... | @@ -8,7 +8,8 @@ class SurfaceProcess(multiprocessing.Process): |
8 | 8 | |
9 | 9 | def __init__(self, pipe, filename, mode, min_value, max_value, |
10 | 10 | decimate_reduction, smooth_relaxation_factor, |
11 | - smooth_iterations, language, fill_holes, keep_largest): | |
11 | + smooth_iterations, language, fill_holes, keep_largest, | |
12 | + flip_image): | |
12 | 13 | |
13 | 14 | multiprocessing.Process.__init__(self) |
14 | 15 | self.pipe = pipe |
... | ... | @@ -22,6 +23,7 @@ class SurfaceProcess(multiprocessing.Process): |
22 | 23 | self.language = language |
23 | 24 | self.fill_holes = fill_holes |
24 | 25 | self.keep_largest = keep_largest |
26 | + self.flip_image = flip_image | |
25 | 27 | |
26 | 28 | |
27 | 29 | def run(self): |
... | ... | @@ -37,17 +39,21 @@ class SurfaceProcess(multiprocessing.Process): |
37 | 39 | reader = vtk.vtkXMLImageDataReader() |
38 | 40 | reader.SetFileName(self.filename) |
39 | 41 | reader.Update() |
40 | - | |
41 | - # Flip original vtkImageData | |
42 | - flip = vtk.vtkImageFlip() | |
43 | - flip.SetInput(reader.GetOutput()) | |
44 | - flip.SetFilteredAxis(1) | |
45 | - flip.FlipAboutOriginOn() | |
46 | - | |
42 | + | |
43 | + image = reader.GetOutput() | |
44 | + | |
45 | + if (self.flip_image): | |
46 | + # Flip original vtkImageData | |
47 | + flip = vtk.vtkImageFlip() | |
48 | + flip.SetInput(reader.GetOutput()) | |
49 | + flip.SetFilteredAxis(1) | |
50 | + flip.FlipAboutOriginOn() | |
51 | + image = flip.GetOutput() | |
52 | + | |
47 | 53 | # Create vtkPolyData from vtkImageData |
48 | 54 | if self.mode == "CONTOUR": |
49 | 55 | contour = vtk.vtkContourFilter() |
50 | - contour.SetInput(flip.GetOutput()) | |
56 | + contour.SetInput(image) | |
51 | 57 | contour.SetValue(0, self.min_value) # initial threshold |
52 | 58 | contour.SetValue(1, self.max_value) # final threshold |
53 | 59 | contour.GetOutput().ReleaseDataFlagOn() |
... | ... | @@ -56,7 +62,7 @@ class SurfaceProcess(multiprocessing.Process): |
56 | 62 | polydata = contour.GetOutput() |
57 | 63 | else: #mode == "GRAYSCALE": |
58 | 64 | mcubes = vtk.vtkMarchingCubes() |
59 | - mcubes.SetInput(flip.GetOutput()) | |
65 | + mcubes.SetInput(image) | |
60 | 66 | mcubes.SetValue(0, 255) |
61 | 67 | mcubes.ComputeScalarsOn() |
62 | 68 | mcubes.ComputeGradientsOn() | ... | ... |
invesalius/data/volume.py
... | ... | @@ -450,19 +450,26 @@ class Volume(): |
450 | 450 | image = proj.imagedata |
451 | 451 | |
452 | 452 | number_filters = len(self.config['convolutionFilters']) |
453 | - update_progress= vtk_utils.ShowProgress(2 + number_filters) | |
454 | - | |
455 | - # Flip original vtkImageData | |
456 | - flip = vtk.vtkImageFlip() | |
457 | - flip.SetInput(image) | |
458 | - flip.SetFilteredAxis(1) | |
459 | - flip.FlipAboutOriginOn() | |
460 | - flip.AddObserver("ProgressEvent", lambda obj,evt: | |
461 | - update_progress(flip, "Rendering...")) | |
462 | - flip.Update() | |
463 | - | |
464 | - image = flip.GetOutput() | |
465 | - | |
453 | + | |
454 | + if (prj.Project().original_orientation == const.AXIAL): | |
455 | + flip_image = True | |
456 | + else: | |
457 | + flip_image = False | |
458 | + | |
459 | + if (flip_image): | |
460 | + update_progress= vtk_utils.ShowProgress(2 + number_filters) | |
461 | + # Flip original vtkImageData | |
462 | + flip = vtk.vtkImageFlip() | |
463 | + flip.SetInput(image) | |
464 | + flip.SetFilteredAxis(1) | |
465 | + flip.FlipAboutOriginOn() | |
466 | + flip.AddObserver("ProgressEvent", lambda obj,evt: | |
467 | + update_progress(flip, "Rendering...")) | |
468 | + flip.Update() | |
469 | + image = flip.GetOutput() | |
470 | + else: | |
471 | + update_progress= vtk_utils.ShowProgress(1 + number_filters) | |
472 | + | |
466 | 473 | scale = image.GetScalarRange() |
467 | 474 | self.scale = scale |
468 | 475 | ... | ... |