Commit 6bdbe8bf338ad87333cce304ac91fa5ea7357f6d

Authored by Thiago Franco de Moraes
1 parent 8bdc2a60

Added mida contour to invesalius (only to test yet)

invesalius/data/slice_.py
@@ -33,6 +33,7 @@ import utils @@ -33,6 +33,7 @@ import utils
33 33
34 from mask import Mask 34 from mask import Mask
35 from project import Project 35 from project import Project
  36 +from data import mips
36 37
37 OTHER=0 38 OTHER=0
38 PLIST=1 39 PLIST=1
@@ -83,6 +84,9 @@ class Slice(object): @@ -83,6 +84,9 @@ class Slice(object):
83 self.blend_filter = None 84 self.blend_filter = None
84 self.histogram = None 85 self.histogram = None
85 self._matrix = None 86 self._matrix = None
  87 +
  88 + self._type_projection = 'MIDA CONTOUR'
  89 +
86 self.spacing = (1.0, 1.0, 1.0) 90 self.spacing = (1.0, 1.0, 1.0)
87 91
88 self.number_of_colours = 256 92 self.number_of_colours = 256
@@ -421,12 +425,14 @@ class Slice(object): @@ -421,12 +425,14 @@ class Slice(object):
421 self.buffer_slices[orientation].discard_vtk_mask() 425 self.buffer_slices[orientation].discard_vtk_mask()
422 426
423 427
424 - def GetSlices(self, orientation, slice_number):  
425 - if self.buffer_slices[orientation].index == slice_number: 428 + def GetSlices(self, orientation, slice_number, number_slices):
  429 + if self.buffer_slices[orientation].index == slice_number and \
  430 + self._type_projection == 'NORMAL':
426 if self.buffer_slices[orientation].vtk_image: 431 if self.buffer_slices[orientation].vtk_image:
427 image = self.buffer_slices[orientation].vtk_image 432 image = self.buffer_slices[orientation].vtk_image
428 else: 433 else:
429 - n_image = self.get_image_slice(orientation, slice_number) 434 + n_image = self.get_image_slice(orientation, slice_number,
  435 + number_slices)
430 image = converters.to_vtk(n_image, self.spacing, slice_number, orientation) 436 image = converters.to_vtk(n_image, self.spacing, slice_number, orientation)
431 ww_wl_image = self.do_ww_wl(image) 437 ww_wl_image = self.do_ww_wl(image)
432 image = self.do_colour_image(ww_wl_image) 438 image = self.do_colour_image(ww_wl_image)
@@ -446,7 +452,8 @@ class Slice(object): @@ -446,7 +452,8 @@ class Slice(object):
446 final_image = image 452 final_image = image
447 self.buffer_slices[orientation].vtk_image = image 453 self.buffer_slices[orientation].vtk_image = image
448 else: 454 else:
449 - n_image = self.get_image_slice(orientation, slice_number) 455 + n_image = self.get_image_slice(orientation, slice_number,
  456 + number_slices)
450 image = converters.to_vtk(n_image, self.spacing, slice_number, orientation) 457 image = converters.to_vtk(n_image, self.spacing, slice_number, orientation)
451 ww_wl_image = self.do_ww_wl(image) 458 ww_wl_image = self.do_ww_wl(image)
452 image = self.do_colour_image(ww_wl_image) 459 image = self.do_colour_image(ww_wl_image)
@@ -469,17 +476,44 @@ class Slice(object): @@ -469,17 +476,44 @@ class Slice(object):
469 476
470 return final_image 477 return final_image
471 478
472 - def get_image_slice(self, orientation, slice_number): 479 + def get_image_slice(self, orientation, slice_number, number_slices=1):
473 if self.buffer_slices[orientation].index == slice_number \ 480 if self.buffer_slices[orientation].index == slice_number \
474 and self.buffer_slices[orientation].image is not None: 481 and self.buffer_slices[orientation].image is not None:
475 n_image = self.buffer_slices[orientation].image 482 n_image = self.buffer_slices[orientation].image
476 else: 483 else:
477 if orientation == 'AXIAL': 484 if orientation == 'AXIAL':
478 - n_image = numpy.array(self.matrix[slice_number]) 485 + if self._type_projection == 'MIDA CONTOUR':
  486 + tmp_array = numpy.array(self.matrix[slice_number:
  487 + slice_number + number_slices])
  488 + n_image = numpy.empty(shape=(tmp_array.shape[1],
  489 + tmp_array.shape[2]),
  490 + dtype=tmp_array.dtype)
  491 + mips.fast_countour_mip(tmp_array, 0.2, 0, self.window_level,
  492 + self.window_level, 2, n_image)
  493 + else:
  494 + n_image = numpy.array(self.matrix[slice_number])
479 elif orientation == 'CORONAL': 495 elif orientation == 'CORONAL':
480 - n_image = numpy.array(self.matrix[..., slice_number, ...]) 496 + if self._type_projection == 'MIDA CONTOUR':
  497 + tmp_array = numpy.array(self.matrix[..., slice_number:
  498 + slice_number + number_slices, ...])
  499 + n_image = numpy.empty(shape=(tmp_array.shape[0],
  500 + tmp_array.shape[2]),
  501 + dtype=tmp_array.dtype)
  502 + mips.fast_countour_mip(tmp_array, 0.2, 1, self.window_level,
  503 + self.window_level, 2, n_image)
  504 + else:
  505 + n_image = numpy.array(self.matrix[..., slice_number, ...])
481 elif orientation == 'SAGITAL': 506 elif orientation == 'SAGITAL':
482 - n_image = numpy.array(self.matrix[..., ..., slice_number]) 507 + if self._type_projection == 'MIDA CONTOUR':
  508 + tmp_array = numpy.array(self.matrix[..., ...,
  509 + slice_number: slice_number + number_slices])
  510 + n_image = numpy.empty(shape=(tmp_array.shape[0],
  511 + tmp_array.shape[1]),
  512 + dtype=tmp_array.dtype)
  513 + mips.fast_countour_mip(tmp_array, 0.2, 2, self.window_level,
  514 + self.window_level, 2, n_image)
  515 + else:
  516 + n_image = numpy.array(self.matrix[..., ..., slice_number])
483 return n_image 517 return n_image
484 518
485 def get_mask_slice(self, orientation, slice_number): 519 def get_mask_slice(self, orientation, slice_number):
invesalius/data/viewer_slice.py
@@ -63,6 +63,8 @@ class Viewer(wx.Panel): @@ -63,6 +63,8 @@ class Viewer(wx.Panel):
63 #self.modes = []#['DEFAULT'] 63 #self.modes = []#['DEFAULT']
64 self.left_pressed = 0 64 self.left_pressed = 0
65 self.right_pressed = 0 65 self.right_pressed = 0
  66 +
  67 + self.number_slices = 10
66 68
67 self.spined_image = False #Use to control to spin 69 self.spined_image = False #Use to control to spin
68 self.paned_image = False 70 self.paned_image = False
@@ -1030,6 +1032,17 @@ class Viewer(wx.Panel): @@ -1030,6 +1032,17 @@ class Viewer(wx.Panel):
1030 elif (evt.GetKeyCode() == wx.WXK_DOWN and pos < max): 1032 elif (evt.GetKeyCode() == wx.WXK_DOWN and pos < max):
1031 self.OnScrollBackward() 1033 self.OnScrollBackward()
1032 self.OnScrollBar() 1034 self.OnScrollBar()
  1035 +
  1036 + elif (evt.GetKeyCode() == wx.WXK_NUMPAD_ADD):
  1037 + self.number_slices += 1
  1038 + print "ADDing", self.number_slices
  1039 + self.OnScrollBar()
  1040 +
  1041 + elif (evt.GetKeyCode() == wx.WXK_NUMPAD_SUBTRACT):
  1042 + if self.number_slices > 1:
  1043 + self.number_slices -= 1
  1044 + print "Subtracting", self.number_slices
  1045 + self.OnScrollBar()
1033 1046
1034 self.UpdateSlice3D(pos) 1047 self.UpdateSlice3D(pos)
1035 self.interactor.Render() 1048 self.interactor.Render()
@@ -1068,7 +1081,8 @@ class Viewer(wx.Panel): @@ -1068,7 +1081,8 @@ class Viewer(wx.Panel):
1068 evt.Skip() 1081 evt.Skip()
1069 1082
1070 def set_slice_number(self, index): 1083 def set_slice_number(self, index):
1071 - image = self.slice_.GetSlices(self.orientation, index) 1084 + image = self.slice_.GetSlices(self.orientation, index,
  1085 + self.number_slices)
1072 self.slice_data.actor.SetInput(image) 1086 self.slice_data.actor.SetInput(image)
1073 for actor in self.actors_by_slice_number.get(self.slice_data.number, []): 1087 for actor in self.actors_by_slice_number.get(self.slice_data.number, []):
1074 self.slice_data.renderer.RemoveActor(actor) 1088 self.slice_data.renderer.RemoveActor(actor)