Commit ec966667098bcc53f58a96910d310c6a89ed29d7
1 parent
95a04f4d
Exists in
master
and in
56 other branches
Added the min, mean, lmip and contours
Showing
2 changed files
with
100 additions
and
11 deletions
Show diff stats
invesalius/data/slice_.py
... | ... | @@ -488,6 +488,19 @@ class Slice(object): |
488 | 488 | elif self._type_projection == const.PROJECTION_MaxIP: |
489 | 489 | n_image = numpy.array(self.matrix[slice_number: |
490 | 490 | slice_number+number_slices]).max(0) |
491 | + elif self._type_projection == const.PROJECTION_MinIP: | |
492 | + n_image = numpy.array(self.matrix[slice_number: | |
493 | + slice_number+number_slices]).min(0) | |
494 | + elif self._type_projection == const.PROJECTION_MeanIP: | |
495 | + n_image = numpy.array(self.matrix[slice_number: | |
496 | + slice_number+number_slices]).mean(0) | |
497 | + elif self._type_projection == const.PROJECTION_LMIP: | |
498 | + tmp_array = numpy.array(self.matrix[slice_number: | |
499 | + slice_number + number_slices]) | |
500 | + n_image = numpy.empty(shape=(tmp_array.shape[1], | |
501 | + tmp_array.shape[2]), | |
502 | + dtype=tmp_array.dtype) | |
503 | + mips.lmip(tmp_array, 0, self.window_level, self.window_level, n_image) | |
491 | 504 | elif self._type_projection == const.PROJECTION_MIDA: |
492 | 505 | tmp_array = numpy.array(self.matrix[slice_number: |
493 | 506 | slice_number + number_slices]) |
... | ... | @@ -495,6 +508,22 @@ class Slice(object): |
495 | 508 | tmp_array.shape[2]), |
496 | 509 | dtype=tmp_array.dtype) |
497 | 510 | mips.mida(tmp_array, 0, self.window_level, self.window_level, n_image) |
511 | + elif self._type_projection == const.PROJECTION_CONTOUR_MIP: | |
512 | + tmp_array = numpy.array(self.matrix[slice_number: | |
513 | + slice_number + number_slices]) | |
514 | + n_image = numpy.empty(shape=(tmp_array.shape[1], | |
515 | + tmp_array.shape[2]), | |
516 | + dtype=tmp_array.dtype) | |
517 | + mips.fast_countour_mip(tmp_array, 0.2, 0, self.window_level, | |
518 | + self.window_level, 0, n_image) | |
519 | + elif self._type_projection == const.PROJECTION_CONTOUR_LMIP: | |
520 | + tmp_array = numpy.array(self.matrix[slice_number: | |
521 | + slice_number + number_slices]) | |
522 | + n_image = numpy.empty(shape=(tmp_array.shape[1], | |
523 | + tmp_array.shape[2]), | |
524 | + dtype=tmp_array.dtype) | |
525 | + mips.fast_countour_mip(tmp_array, 0.2, 0, self.window_level, | |
526 | + self.window_level, 1, n_image) | |
498 | 527 | elif self._type_projection == const.PROJECTION_CONTOUR_MIDA: |
499 | 528 | tmp_array = numpy.array(self.matrix[slice_number: |
500 | 529 | slice_number + number_slices]) |
... | ... | @@ -512,6 +541,19 @@ class Slice(object): |
512 | 541 | elif self._type_projection == const.PROJECTION_MaxIP: |
513 | 542 | n_image = numpy.array(self.matrix[..., slice_number: |
514 | 543 | slice_number+number_slices, ...]).max(1) |
544 | + elif self._type_projection == const.PROJECTION_MinIP: | |
545 | + n_image = numpy.array(self.matrix[..., slice_number: | |
546 | + slice_number+number_slices, ...]).min(1) | |
547 | + elif self._type_projection == const.PROJECTION_MeanIP: | |
548 | + n_image = numpy.array(self.matrix[..., slice_number: | |
549 | + slice_number+number_slices, ...]).mean(1) | |
550 | + elif self._type_projection == const.PROJECTION_LMIP: | |
551 | + tmp_array = numpy.array(self.matrix[..., slice_number: | |
552 | + slice_number + number_slices, ...]) | |
553 | + n_image = numpy.empty(shape=(tmp_array.shape[0], | |
554 | + tmp_array.shape[2]), | |
555 | + dtype=tmp_array.dtype) | |
556 | + mips.lmip(tmp_array, 1, self.window_level, self.window_level, n_image) | |
515 | 557 | elif self._type_projection == const.PROJECTION_MIDA: |
516 | 558 | tmp_array = numpy.array(self.matrix[..., slice_number: |
517 | 559 | slice_number + number_slices, ...]) |
... | ... | @@ -519,6 +561,22 @@ class Slice(object): |
519 | 561 | tmp_array.shape[2]), |
520 | 562 | dtype=tmp_array.dtype) |
521 | 563 | mips.mida(tmp_array, 1, self.window_level, self.window_level, n_image) |
564 | + elif self._type_projection == const.PROJECTION_CONTOUR_MIP: | |
565 | + tmp_array = numpy.array(self.matrix[..., slice_number: | |
566 | + slice_number + number_slices, ...]) | |
567 | + n_image = numpy.empty(shape=(tmp_array.shape[0], | |
568 | + tmp_array.shape[2]), | |
569 | + dtype=tmp_array.dtype) | |
570 | + mips.fast_countour_mip(tmp_array, 0.2, 1, self.window_level, | |
571 | + self.window_level, 0, n_image) | |
572 | + elif self._type_projection == const.PROJECTION_CONTOUR_LMIP: | |
573 | + tmp_array = numpy.array(self.matrix[..., slice_number: | |
574 | + slice_number + number_slices, ...]) | |
575 | + n_image = numpy.empty(shape=(tmp_array.shape[0], | |
576 | + tmp_array.shape[2]), | |
577 | + dtype=tmp_array.dtype) | |
578 | + mips.fast_countour_mip(tmp_array, 0.2, 1, self.window_level, | |
579 | + self.window_level, 1, n_image) | |
522 | 580 | elif self._type_projection == const.PROJECTION_CONTOUR_MIDA: |
523 | 581 | tmp_array = numpy.array(self.matrix[..., slice_number: |
524 | 582 | slice_number + number_slices, ...]) |
... | ... | @@ -535,6 +593,19 @@ class Slice(object): |
535 | 593 | elif self._type_projection == const.PROJECTION_MaxIP: |
536 | 594 | n_image = numpy.array(self.matrix[..., ..., slice_number: |
537 | 595 | slice_number+number_slices]).max(2) |
596 | + elif self._type_projection == const.PROJECTION_MinIP: | |
597 | + n_image = numpy.array(self.matrix[..., ..., slice_number: | |
598 | + slice_number+number_slices]).min(2) | |
599 | + elif self._type_projection == const.PROJECTION_MeanIP: | |
600 | + n_image = numpy.array(self.matrix[..., ..., slice_number: | |
601 | + slice_number+number_slices]).mean(2) | |
602 | + elif self._type_projection == const.PROJECTION_LMIP: | |
603 | + tmp_array = numpy.array(self.matrix[..., ..., | |
604 | + slice_number: slice_number + number_slices]) | |
605 | + n_image = numpy.empty(shape=(tmp_array.shape[0], | |
606 | + tmp_array.shape[1]), | |
607 | + dtype=tmp_array.dtype) | |
608 | + mips.lmip(tmp_array, 2, self.window_level, self.window_level, n_image) | |
538 | 609 | elif self._type_projection == const.PROJECTION_MIDA: |
539 | 610 | tmp_array = numpy.array(self.matrix[..., ..., |
540 | 611 | slice_number: slice_number + number_slices]) |
... | ... | @@ -543,6 +614,22 @@ class Slice(object): |
543 | 614 | dtype=tmp_array.dtype) |
544 | 615 | mips.mida(tmp_array, 2, self.window_level, self.window_level, n_image) |
545 | 616 | |
617 | + elif self._type_projection == const.PROJECTION_CONTOUR_MIP: | |
618 | + tmp_array = numpy.array(self.matrix[..., ..., | |
619 | + slice_number: slice_number + number_slices]) | |
620 | + n_image = numpy.empty(shape=(tmp_array.shape[0], | |
621 | + tmp_array.shape[1]), | |
622 | + dtype=tmp_array.dtype) | |
623 | + mips.fast_countour_mip(tmp_array, 0.2, 2, self.window_level, | |
624 | + self.window_level, 0, n_image) | |
625 | + elif self._type_projection == const.PROJECTION_CONTOUR_LMIP: | |
626 | + tmp_array = numpy.array(self.matrix[..., ..., | |
627 | + slice_number: slice_number + number_slices]) | |
628 | + n_image = numpy.empty(shape=(tmp_array.shape[0], | |
629 | + tmp_array.shape[1]), | |
630 | + dtype=tmp_array.dtype) | |
631 | + mips.fast_countour_mip(tmp_array, 0.2, 2, self.window_level, | |
632 | + self.window_level, 1, n_image) | |
546 | 633 | elif self._type_projection == const.PROJECTION_CONTOUR_MIDA: |
547 | 634 | tmp_array = numpy.array(self.matrix[..., ..., |
548 | 635 | slice_number: slice_number + number_slices]) | ... | ... |
invesalius/data/viewer_slice.py
... | ... | @@ -1022,6 +1022,16 @@ class Viewer(wx.Panel): |
1022 | 1022 | min = 0 |
1023 | 1023 | max = self.slice_.GetMaxSliceNumber(self.orientation) |
1024 | 1024 | |
1025 | + projections = {wx.WXK_NUMPAD0 : const.PROJECTION_NORMAL, | |
1026 | + wx.WXK_NUMPAD1 : const.PROJECTION_MaxIP, | |
1027 | + wx.WXK_NUMPAD2 : const.PROJECTION_MinIP, | |
1028 | + wx.WXK_NUMPAD3 : const.PROJECTION_MeanIP, | |
1029 | + wx.WXK_NUMPAD4 : const.PROJECTION_LMIP, | |
1030 | + wx.WXK_NUMPAD5 : const.PROJECTION_MIDA, | |
1031 | + wx.WXK_NUMPAD6 : const.PROJECTION_CONTOUR_MIP, | |
1032 | + wx.WXK_NUMPAD7 : const.PROJECTION_CONTOUR_LMIP, | |
1033 | + wx.WXK_NUMPAD8 : const.PROJECTION_CONTOUR_MIDA,} | |
1034 | + | |
1025 | 1035 | if self._flush_buffer: |
1026 | 1036 | self.slice_.apply_slice_buffer_to_mask(self.orientation) |
1027 | 1037 | |
... | ... | @@ -1044,17 +1054,9 @@ class Viewer(wx.Panel): |
1044 | 1054 | print "Subtracting", self.number_slices |
1045 | 1055 | self.OnScrollBar() |
1046 | 1056 | |
1047 | - elif (evt.GetKeyCode() == wx.WXK_NUMPAD0): | |
1048 | - self.slice_._type_projection = const.PRJECTION_NORMAL | |
1049 | - | |
1050 | - elif (evt.GetKeyCode() == wx.WXK_NUMPAD1): | |
1051 | - self.slice_._type_projection = const.PROJECTION_MaxIP | |
1052 | - | |
1053 | - elif (evt.GetKeyCode() == wx.WXK_NUMPAD5): | |
1054 | - self.slice_._type_projection = const.PROJECTION_MIDA | |
1055 | - | |
1056 | - elif (evt.GetKeyCode() == wx.WXK_NUMPAD8): | |
1057 | - self.slice_._type_projection = const.PROJECTION_CONTOUR_MIDA | |
1057 | + elif evt.GetKeyCode() in projections: | |
1058 | + print "PROJECTION MANOLO!" | |
1059 | + self.slice_._type_projection = projections[evt.GetKeyCode()] | |
1058 | 1060 | |
1059 | 1061 | self.UpdateSlice3D(pos) |
1060 | 1062 | self.interactor.Render() | ... | ... |