Commit da12ed62e15fed6284e2f6a44e3b5b608d0bc2a3
1 parent
298c9f95
Exists in
master
Converting RGB dicom images to grayscale
Showing
3 changed files
with
15 additions
and
3 deletions
Show diff stats
invesalius/control.py
... | ... | @@ -508,6 +508,7 @@ class Controller(): |
508 | 508 | self.ImportGroup(group, use_gui) |
509 | 509 | |
510 | 510 | def ImportGroup(self, group, gui=True): |
511 | + | |
511 | 512 | matrix, matrix_filename, dicom = self.OpenDicomGroup(group, 0, [0, 0], gui=gui) |
512 | 513 | self.CreateDicomProject(dicom, matrix, matrix_filename) |
513 | 514 | |
... | ... | @@ -878,6 +879,13 @@ class Controller(): |
878 | 879 | |
879 | 880 | |
880 | 881 | def OnOpenDicomGroup(self, group, interval, file_range): |
882 | + dicom = group.GetDicomSample() | |
883 | + samples_per_pixel = dicom.image.samples_per_pixel | |
884 | + print(f"\n\n\n\n{samples_per_pixel =}\n\n\n") | |
885 | + if samples_per_pixel == 3: | |
886 | + dlg = wx.MessageDialog(wx.GetApp().GetTopWindow(), _("this is a rgb image, it's necessary to convert to grayscale to open on invesalius.\ndo you want to convert it to grayscale?"), _("Confirm"), wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION) | |
887 | + if dlg.ShowModal() != wx.ID_YES: | |
888 | + return | |
881 | 889 | matrix, matrix_filename, dicom = self.OpenDicomGroup(group, interval, file_range, gui=True) |
882 | 890 | self.CreateDicomProject(dicom, matrix, matrix_filename) |
883 | 891 | self.LoadProject() |
... | ... | @@ -918,9 +926,9 @@ class Controller(): |
918 | 926 | xyspacing = dicom.image.spacing |
919 | 927 | orientation = dicom.image.orientation_label |
920 | 928 | samples_per_pixel = dicom.image.samples_per_pixel |
921 | - | |
922 | 929 | print(f"\n\n\n\n{samples_per_pixel =}\n\n\n") |
923 | 930 | |
931 | + | |
924 | 932 | wl = float(dicom.image.level) |
925 | 933 | ww = float(dicom.image.window) |
926 | 934 | ... | ... |
invesalius/data/imagedata_utils.py
... | ... | @@ -39,6 +39,7 @@ import invesalius.reader.bitmap_reader as bitmap_reader |
39 | 39 | import invesalius.utils as utils |
40 | 40 | from invesalius import inv_paths |
41 | 41 | from invesalius.data import vtk_utils as vtk_utils |
42 | +from skimage.color import rgb2gray | |
42 | 43 | |
43 | 44 | if sys.platform == "win32": |
44 | 45 | try: |
... | ... | @@ -483,10 +484,13 @@ def dcmmf2memmap(dcm_file, orientation): |
483 | 484 | image = reader.GetImage() |
484 | 485 | xs, ys, zs = image.GetSpacing() |
485 | 486 | pf = image.GetPixelFormat() |
487 | + samples_per_pixel = pf.GetSamplesPerPixel() | |
486 | 488 | np_image = converters.gdcm_to_numpy(image, pf.GetSamplesPerPixel() == 1) |
489 | + if samples_per_pixel == 3: | |
490 | + np_image = image_normalize(rgb2gray(np_image), 0, 255) | |
491 | + print(f"\n\n\n{np_image.min() =} - {np_image.max() =}\n\n\n") | |
487 | 492 | temp_file = tempfile.mktemp() |
488 | 493 | matrix = numpy.memmap(temp_file, mode="w+", dtype="int16", shape=np_image.shape) |
489 | - print("Number of dimensions", np_image.shape) | |
490 | 494 | z, y, x = np_image.shape |
491 | 495 | if orientation == "CORONAL": |
492 | 496 | spacing = xs, zs, ys | ... | ... |