Beispiel #1
0
    def OpenPlist(self, filename):

        translate_to_x = {
            "Bone": _("Bone"),
            "Soft Tissue": _("Soft Tissue"),
            "Enamel (Adult)": _("Enamel (Adult)"),
            "Enamel (Child)": _("Enamel (Child)"),
            "Compact Bone (Adult)": _("Compact Bone (Adult)"),
            "Compact Bone (Child)": _("Compact Bone (Child)"),
            "Spongial Bone (Adult)": _("Spongial Bone (Adult)"),
            "Spongial Bone (Child)": _("Spongial Bone (Child)"),
            "Muscle Tissue (Adult)": _("Muscle Tissue (Adult)"),
            "Muscle Tissue (Child)": _("Muscle Tissue (Child)"),
            "Fat Tissue (Adult)": _("Fat Tissue (Adult)"),
            "Fat Tissue (Child)": _("Fat Tissue (Child)"),
            "Skin Tissue (Adult)": _("Skin Tissue (Adult)"),
            "Skin Tissue (Child)": _("Skin Tissue (Child)"),
            "Custom": _("Custom")
        }

        with open(filename, 'rb') as f:
            p = plistlib.load(f, fmt=plistlib.FMT_XML)
        thresh_mri = p['thresh_mri'].copy()
        thresh_ct = p['thresh_ct'].copy()

        thresh_ct_new = {}
        for name in thresh_ct.keys():
            thresh_ct_new[translate_to_x[name]] = thresh_ct[name]

        thresh_mri_new = {}
        for name in thresh_mri.keys():
            thresh_mri_new[translate_to_x[name]] = thresh_mri[name]

        self.thresh_mri = TwoWaysDictionary(thresh_mri_new)
        self.thresh_ct = TwoWaysDictionary(thresh_ct_new)
Beispiel #2
0
    def OpenPlist(self, filename):

        translate_to_x = {
            "Bone": "Bone",
            "Soft Tissue": "Soft Tissue",
            "Enamel (Adult)": "Enamel (Adult)",
            "Enamel (Child)": "Enamel (Child)",
            "Compact Bone (Adult)": "Compact Bone (Adult)",
            "Compact Bone (Child)": "Compact Bone (Child)",
            "Spongial Bone (Adult)": "Spongial Bone (Adult)",
            "Spongial Bone (Child)": "Spongial Bone (Child)",
            "Muscle Tissue (Adult)": "Muscle Tissue (Adult)",
            "Muscle Tissue (Child)": "Muscle Tissue (Child)",
            "Fat Tissue (Adult)": "Fat Tissue (Adult)",
            "Fat Tissue (Child)": "Fat Tissue (Child)",
            "Skin Tissue (Adult)": "Skin Tissue (Adult)",
            "Skin Tissue (Child)": "Skin Tissue (Child)",
            "Custom": "Custom"
        }

        p = plistlib.readPlist(filename)
        thresh_mri = p['thresh_mri'].copy()
        thresh_ct = p['thresh_ct'].copy()

        thresh_ct_new = {}
        for name in thresh_ct.keys():
            thresh_ct_new[translate_to_x[name]] = thresh_ct[name]

        thresh_mri_new = {}
        for name in thresh_mri.keys():
            thresh_mri_new[translate_to_x[name]] = thresh_mri[name]

        self.thresh_mri = TwoWaysDictionary(thresh_mri_new)
        self.thresh_ct = TwoWaysDictionary(thresh_ct_new)
Beispiel #3
0
    def OpenPlist(self, filename):

        translate_to_x = {"Bone":_("Bone"),
                "Soft Tissue":_("Soft Tissue"),
                "Enamel (Adult)":_("Enamel (Adult)"),
                "Enamel (Child)": _("Enamel (Child)"),
                "Compact Bone (Adult)": _("Compact Bone (Adult)"),
                "Compact Bone (Child)":_("Compact Bone (Child)"),
                "Spongial Bone (Adult)":_("Spongial Bone (Adult)"),
                "Spongial Bone (Child)":_("Spongial Bone (Child)"),
                "Muscle Tissue (Adult)":_("Muscle Tissue (Adult)"),
                "Muscle Tissue (Child)":_("Muscle Tissue (Child)"),
                "Fat Tissue (Adult)":_("Fat Tissue (Adult)"),
                "Fat Tissue (Child)":_("Fat Tissue (Child)"),
                "Skin Tissue (Adult)":_("Skin Tissue (Adult)"),
                "Skin Tissue (Child)":_("Skin Tissue (Child)"), 
                "Custom":_("Custom")}


        p = plistlib.readPlist(filename)
        thresh_mri = p['thresh_mri'].copy()
        thresh_ct = p['thresh_ct'].copy()

        thresh_ct_new = {}
        for name in thresh_ct.keys(): 
            thresh_ct_new[translate_to_x[name]] = thresh_ct[name]

        thresh_mri_new = {}
        for name in thresh_mri.keys(): 
            thresh_mri_new[translate_to_x[name]] = thresh_mri[name]    

        self.thresh_mri = TwoWaysDictionary(thresh_mri_new)
        self.thresh_ct = TwoWaysDictionary(thresh_ct_new)
Beispiel #4
0
    def __init__(self):
        # Patient/ acquistion information
        self.name = ''
        self.modality = ''
        self.original_orientation = ''
        self.window = ''
        self.level = ''
        self.affine = ''

        # Masks (vtkImageData)
        self.mask_dict = TwoWaysDictionary()

        # Surfaces are (vtkPolyData)
        self.surface_dict = {}
        self.last_surface_index = -1

        # Measurements
        self.measurement_dict = {}

        # TODO: Future ++
        self.annotation_dict = {}

        self.compress = False

        # InVesalius related data
        # So we can find bugs and reproduce user-related problems
        self.invesalius_version = version.get_svn_revision()

        self.presets = Presets()

        self.threshold_modes = self.presets.thresh_ct
        self.threshold_range = ''

        self.raycasting_preset = ''
Beispiel #5
0
 def RemoveMask(self, index):
     new_dict = TwoWaysDictionary()
     new_index = 0
     for i in self.mask_dict:
         if i == index:
             mask = self.mask_dict[i]
             mask.cleanup()
         else:
             new_dict[new_index] = self.mask_dict[i]
             self.mask_dict[i] = new_index
             new_index += 1
     self.mask_dict = new_dict
Beispiel #6
0
    def __init__(self):
        self.thresh_ct = TwoWaysDictionary({
            _("Bone"): (226, 3071),
            _("Soft Tissue"): (-700, 225),
            _("Enamel (Adult)"): (1553, 2850),
            _("Enamel (Child)"): (2042, 3071),
            _("Compact Bone (Adult)"): (662, 1988),
            _("Compact Bone (Child)"): (586, 2198),
            _("Spongial Bone (Adult)"): (148, 661),
            _("Spongial Bone (Child)"): (156, 585),
            _("Muscle Tissue (Adult)"): (-5, 135),
            _("Muscle Tissue (Child)"): (-25, 139),
            _("Fat Tissue (Adult)"): (-205, -51),
            _("Fat Tissue (Child)"): (-212, -72),
            _("Skin Tissue (Adult)"): (-718, -177),
            _("Skin Tissue (Child)"): (-766, -202),
            _("Custom"): (0, 0)
        })

        self.thresh_mri = TwoWaysDictionary({
            _("Bone"): (1250, 4095),
            _("Soft Tissue"): (324, 1249),
            _("Enamel (Adult)"): (2577, 3874),
            _("Enamel (Child)"): (3066, 4095),
            _("Compact Bone (Adult)"): (1686, 3012),
            _("Compact Bone (Child)"): (1610, 3222),
            _("Spongial Bone (Adult)"): (1172, 1685),
            _("Spongial Bone (Child)"): (1180, 1609),
            _("Muscle Tissue (Adult)"): (1019, 1159),
            _("Muscle Tissue (Child)"): (999, 1163),
            _("Fat Tissue (Adult)"): (819, 973),
            _("Fat Tissue (Child)"): (812, 952),
            _("Skin Tissue (Adult)"): (306, 847),
            _("Skin Tissue (Child)"): (258, 822),
            _("Custom"): (0, 0)
        })
        self.__bind_events()
Beispiel #7
0
    def __init__(self):
        self.thresh_ct = TwoWaysDictionary({
            _("Bone"):(226,3071),
            _("Soft Tissue"):(-700,225),
            _("Enamel (Adult)"):(1553,2850),
            _("Enamel (Child)"):(2042,3071),
            _("Compact Bone (Adult)"):(662,1988),
            _("Compact Bone (Child)"):(586,2198),
            _("Spongial Bone (Adult)"):(148,661),
            _("Spongial Bone (Child)"):(156,585),
            _("Muscle Tissue (Adult)"):(-5,135),
            _("Muscle Tissue (Child)"):(-25,139),
            _("Fat Tissue (Adult)"):(-205,-51),
            _("Fat Tissue (Child)"):(-212,-72),
            _("Skin Tissue (Adult)"):(-718,-177),
            _("Skin Tissue (Child)"):(-766,-202), 
            _("Custom"):('', '')
        })

        self.thresh_mri = TwoWaysDictionary({
            _("Bone"):(1250,4095),
            _("Soft Tissue"):(324,1249),
            _("Enamel (Adult)"):(2577,3874),
            _("Enamel (Child)"):(3066,4095),
            _("Compact Bone (Adult)"):(1686,3012),
            _("Compact Bone (Child)"):(1610,3222),
            _("Spongial Bone (Adult)"):(1172,1685),
            _("Spongial Bone (Child)"):(1180,1609),
            _("Muscle Tissue (Adult)"):(1019,1159),
            _("Muscle Tissue (Child)"):(999,1163),
            _("Fat Tissue (Adult)"):(819,973),
            _("Fat Tissue (Child)"):(812,952),
            _("Skin Tissue (Adult)"):(306,847),
            _("Skin Tissue (Child)"):(258,822), 
            _("Custom"):('', '')
        })
        self.__bind_events()
Beispiel #8
0
class Presets():
    def __init__(self):
        self.thresh_ct = TwoWaysDictionary({
            _("Bone"): (226, 3071),
            _("Soft Tissue"): (-700, 225),
            _("Enamel (Adult)"): (1553, 2850),
            _("Enamel (Child)"): (2042, 3071),
            _("Compact Bone (Adult)"): (662, 1988),
            _("Compact Bone (Child)"): (586, 2198),
            _("Spongial Bone (Adult)"): (148, 661),
            _("Spongial Bone (Child)"): (156, 585),
            _("Muscle Tissue (Adult)"): (-5, 135),
            _("Muscle Tissue (Child)"): (-25, 139),
            _("Fat Tissue (Adult)"): (-205, -51),
            _("Fat Tissue (Child)"): (-212, -72),
            _("Skin Tissue (Adult)"): (-718, -177),
            _("Skin Tissue (Child)"): (-766, -202),
            _("Custom"): (0, 0)
        })

        self.thresh_mri = TwoWaysDictionary({
            _("Bone"): (1250, 4095),
            _("Soft Tissue"): (324, 1249),
            _("Enamel (Adult)"): (2577, 3874),
            _("Enamel (Child)"): (3066, 4095),
            _("Compact Bone (Adult)"): (1686, 3012),
            _("Compact Bone (Child)"): (1610, 3222),
            _("Spongial Bone (Adult)"): (1172, 1685),
            _("Spongial Bone (Child)"): (1180, 1609),
            _("Muscle Tissue (Adult)"): (1019, 1159),
            _("Muscle Tissue (Child)"): (999, 1163),
            _("Fat Tissue (Adult)"): (819, 973),
            _("Fat Tissue (Child)"): (812, 952),
            _("Skin Tissue (Adult)"): (306, 847),
            _("Skin Tissue (Child)"): (258, 822),
            _("Custom"): (0, 0)
        })
        self.__bind_events()

    def __bind_events(self):
        Publisher.subscribe(self.UpdateThresholdModes,
                            'Update threshold limits list')

    def UpdateThresholdModes(self, threshold_range):
        thresh_min, thresh_max = threshold_range
        presets_list = (self.thresh_ct, self.thresh_mri)

        for presets in presets_list:
            for key in presets:
                (t_min, t_max) = presets[key]

                print(key, t_min, t_max)

                if (t_min is None) or (t_max is None):  # setting custom preset
                    t_min = thresh_min
                    t_max = thresh_max
                if (t_min < thresh_min):
                    t_min = thresh_min
                if (t_max > thresh_max):
                    t_max = thresh_max

                # This has happened in Analyze files
                # TODO: find a good solution for presets in Analyze files
                if (t_min > thresh_max):
                    t_min = thresh_min
                if (t_max < thresh_min):
                    t_max = thresh_max

                presets[key] = (t_min, t_max)

        Publisher.sendMessage('Update threshold limits',
                              threshold_range=(thresh_min, thresh_max))

    def SavePlist(self, filename):
        filename = "%s$%s" % (filename, 'presets.plist')
        preset = {}

        translate_to_en = {
            _("Bone"): "Bone",
            _("Soft Tissue"): "Soft Tissue",
            _("Enamel (Adult)"): "Enamel (Adult)",
            _("Enamel (Child)"): "Enamel (Child)",
            _("Compact Bone (Adult)"): "Compact Bone (Adult)",
            _("Compact Bone (Child)"): "Compact Bone (Child)",
            _("Spongial Bone (Adult)"): "Spongial Bone (Adult)",
            _("Spongial Bone (Child)"): "Spongial Bone (Child)",
            _("Muscle Tissue (Adult)"): "Muscle Tissue (Adult)",
            _("Muscle Tissue (Child)"): "Muscle Tissue (Child)",
            _("Fat Tissue (Adult)"): "Fat Tissue (Adult)",
            _("Fat Tissue (Child)"): "Fat Tissue (Child)",
            _("Skin Tissue (Adult)"): "Skin Tissue (Adult)",
            _("Skin Tissue (Child)"): "Skin Tissue (Child)",
            _("Custom"): "Custom"
        }

        thresh_mri_new = {}
        for name in self.thresh_mri.keys():
            thresh_mri_new[translate_to_en[name]] = self.thresh_mri[name]

        thresh_ct_new = {}
        for name in self.thresh_ct.keys():
            thresh_ct_new[translate_to_en[name]] = self.thresh_ct[name]

        preset['thresh_mri'] = thresh_mri_new
        preset['thresh_ct'] = thresh_ct_new
        with open(filename, 'w+b') as f:
            plistlib.dump(preset, f)
        return os.path.split(filename)[1]

    def OpenPlist(self, filename):

        translate_to_x = {
            "Bone": _("Bone"),
            "Soft Tissue": _("Soft Tissue"),
            "Enamel (Adult)": _("Enamel (Adult)"),
            "Enamel (Child)": _("Enamel (Child)"),
            "Compact Bone (Adult)": _("Compact Bone (Adult)"),
            "Compact Bone (Child)": _("Compact Bone (Child)"),
            "Spongial Bone (Adult)": _("Spongial Bone (Adult)"),
            "Spongial Bone (Child)": _("Spongial Bone (Child)"),
            "Muscle Tissue (Adult)": _("Muscle Tissue (Adult)"),
            "Muscle Tissue (Child)": _("Muscle Tissue (Child)"),
            "Fat Tissue (Adult)": _("Fat Tissue (Adult)"),
            "Fat Tissue (Child)": _("Fat Tissue (Child)"),
            "Skin Tissue (Adult)": _("Skin Tissue (Adult)"),
            "Skin Tissue (Child)": _("Skin Tissue (Child)"),
            "Custom": _("Custom")
        }

        with open(filename, 'rb') as f:
            p = plistlib.load(f, fmt=plistlib.FMT_XML)
        thresh_mri = p['thresh_mri'].copy()
        thresh_ct = p['thresh_ct'].copy()

        thresh_ct_new = {}
        for name in thresh_ct.keys():
            thresh_ct_new[translate_to_x[name]] = thresh_ct[name]

        thresh_mri_new = {}
        for name in thresh_mri.keys():
            thresh_mri_new[translate_to_x[name]] = thresh_mri[name]

        self.thresh_mri = TwoWaysDictionary(thresh_mri_new)
        self.thresh_ct = TwoWaysDictionary(thresh_ct_new)
Beispiel #9
0
    def load_from_folder(self, dirpath):
        """
        Loads invesalius3 project files from dipath.
        """
        import invesalius.data.measures as ms
        import invesalius.data.mask as msk
        import invesalius.data.surface as srf
        # Opening the main file from invesalius 3 project
        main_plist = os.path.join(dirpath, 'main.plist')
        with open(main_plist, 'r+b') as f:
            project = plistlib.load(f, fmt=plistlib.FMT_XML)

        format_version = project["format_version"]
        if format_version > const.INVESALIUS_ACTUAL_FORMAT_VERSION:
            from invesalius.gui.dialogs import ImportOldFormatInvFile
            ImportOldFormatInvFile()

        # case info
        self.name = project["name"]
        self.modality = project["modality"]
        self.original_orientation = project["orientation"]
        self.window = project["window_width"]
        self.level = project["window_level"]
        self.threshold_range = project["scalar_range"]
        self.spacing = project["spacing"]

        self.compress = project.get("compress", True)

        # Opening the matrix containing the slices
        filepath = os.path.join(dirpath, project["matrix"]["filename"])
        self.matrix_filename = filepath
        self.matrix_shape = project["matrix"]['shape']
        self.matrix_dtype = project["matrix"]['dtype']

        if project.get("affine", ""):
            self.affine = project["affine"]

        # Opening the masks
        self.mask_dict = TwoWaysDictionary()
        for index in sorted(project.get("masks", []), key=lambda x: int(x)):
            filename = project["masks"][index]
            filepath = os.path.join(dirpath, filename)
            m = msk.Mask()
            m.spacing = self.spacing
            m.OpenPList(filepath)
            m.index = len(self.mask_dict)
            self.mask_dict[m.index] = m

        # Opening the surfaces
        self.surface_dict = {}
        for index in sorted(project.get("surfaces", []), key=lambda x: int(x)):
            filename = project["surfaces"][index]
            filepath = os.path.join(dirpath, filename)
            s = srf.Surface(int(index))
            s.OpenPList(filepath)
            self.surface_dict[s.index] = s

        # Opening the measurements
        self.measurement_dict = {}
        measures_file = os.path.join(
            dirpath, project.get("measurements", "measurements.plist"))
        if os.path.exists(measures_file):
            with open(measures_file, 'r+b') as f:
                measurements = plistlib.load(f, fmt=plistlib.FMT_XML)
            for index in measurements:
                if measurements[index]["type"] in (const.DENSITY_ELLIPSE,
                                                   const.DENSITY_POLYGON):
                    measure = ms.DensityMeasurement()
                else:
                    measure = ms.Measurement()
                measure.Load(measurements[index])
                self.measurement_dict[int(index)] = measure
Beispiel #10
0
class Presets():

    def __init__(self):
        self.thresh_ct = TwoWaysDictionary({
            _("Bone"):(226,3071),
            _("Soft Tissue"):(-700,225),
            _("Enamel (Adult)"):(1553,2850),
            _("Enamel (Child)"):(2042,3071),
            _("Compact Bone (Adult)"):(662,1988),
            _("Compact Bone (Child)"):(586,2198),
            _("Spongial Bone (Adult)"):(148,661),
            _("Spongial Bone (Child)"):(156,585),
            _("Muscle Tissue (Adult)"):(-5,135),
            _("Muscle Tissue (Child)"):(-25,139),
            _("Fat Tissue (Adult)"):(-205,-51),
            _("Fat Tissue (Child)"):(-212,-72),
            _("Skin Tissue (Adult)"):(-718,-177),
            _("Skin Tissue (Child)"):(-766,-202), 
            _("Custom"):('', '')
        })

        self.thresh_mri = TwoWaysDictionary({
            _("Bone"):(1250,4095),
            _("Soft Tissue"):(324,1249),
            _("Enamel (Adult)"):(2577,3874),
            _("Enamel (Child)"):(3066,4095),
            _("Compact Bone (Adult)"):(1686,3012),
            _("Compact Bone (Child)"):(1610,3222),
            _("Spongial Bone (Adult)"):(1172,1685),
            _("Spongial Bone (Child)"):(1180,1609),
            _("Muscle Tissue (Adult)"):(1019,1159),
            _("Muscle Tissue (Child)"):(999,1163),
            _("Fat Tissue (Adult)"):(819,973),
            _("Fat Tissue (Child)"):(812,952),
            _("Skin Tissue (Adult)"):(306,847),
            _("Skin Tissue (Child)"):(258,822), 
            _("Custom"):('', '')
        })
        self.__bind_events()
        
    def __bind_events(self):
        Publisher.subscribe(self.UpdateThresholdModes,
                                'Update threshold limits list')
        
    def UpdateThresholdModes(self, evt):
    
        thresh_min, thresh_max = evt.data
        presets_list = (self.thresh_ct, self.thresh_mri)

        for presets in presets_list:
            for key in presets:
                (t_min, t_max) = presets[key]


                if (t_min is None) or (t_max is None): # setting custom preset
                    t_min = thresh_min
                    t_max = thresh_max
                if (t_min < thresh_min):
                    t_min = thresh_min
                if (t_max > thresh_max):
                    t_max = thresh_max
                    
                # This has happened in Analyze files
                # TODO: find a good solution for presets in Analyze files
                if (t_min > thresh_max):
                    t_min = thresh_min
                if (t_max < thresh_min):
                    t_max = thresh_max

                presets[key] = (t_min, t_max)
                    
        Publisher.sendMessage('Update threshold limits', (thresh_min,     
                                    thresh_max))

    def SavePlist(self, filename):
        filename = "%s$%s" % (filename, 'presets.plist')
        preset = {}
        
        translate_to_en = {_("Bone"):"Bone",
                _("Soft Tissue"):"Soft Tissue",
                _("Enamel (Adult)"):"Enamel (Adult)",
                _("Enamel (Child)"): "Enamel (Child)",
                _("Compact Bone (Adult)"):"Compact Bone (Adult)",
                _("Compact Bone (Child)"):"Compact Bone (Child)",
                _("Spongial Bone (Adult)"):"Spongial Bone (Adult)",
                _("Spongial Bone (Child)"):"Spongial Bone (Child)",
                _("Muscle Tissue (Adult)"):"Muscle Tissue (Adult)",
                _("Muscle Tissue (Child)"):"Muscle Tissue (Child)",
                _("Fat Tissue (Adult)"):"Fat Tissue (Adult)",
                _("Fat Tissue (Child)"):"Fat Tissue (Child)",
                _("Skin Tissue (Adult)"):"Skin Tissue (Adult)",
                _("Skin Tissue (Child)"):"Skin Tissue (Child)", 
                _("Custom"):"Custom"}

        thresh_mri_new = {}
        for name in self.thresh_mri.keys():
            thresh_mri_new[translate_to_en[name]] = self.thresh_mri[name]

        thresh_ct_new = {}
        for name in self.thresh_ct.keys():
            thresh_ct_new[translate_to_en[name]] = self.thresh_ct[name]
        
        preset['thresh_mri'] = thresh_mri_new
        preset['thresh_ct'] = thresh_ct_new
        plistlib.writePlist(preset, filename)
        return os.path.split(filename)[1]

    def OpenPlist(self, filename):

        translate_to_x = {"Bone":_("Bone"),
                "Soft Tissue":_("Soft Tissue"),
                "Enamel (Adult)":_("Enamel (Adult)"),
                "Enamel (Child)": _("Enamel (Child)"),
                "Compact Bone (Adult)": _("Compact Bone (Adult)"),
                "Compact Bone (Child)":_("Compact Bone (Child)"),
                "Spongial Bone (Adult)":_("Spongial Bone (Adult)"),
                "Spongial Bone (Child)":_("Spongial Bone (Child)"),
                "Muscle Tissue (Adult)":_("Muscle Tissue (Adult)"),
                "Muscle Tissue (Child)":_("Muscle Tissue (Child)"),
                "Fat Tissue (Adult)":_("Fat Tissue (Adult)"),
                "Fat Tissue (Child)":_("Fat Tissue (Child)"),
                "Skin Tissue (Adult)":_("Skin Tissue (Adult)"),
                "Skin Tissue (Child)":_("Skin Tissue (Child)"), 
                "Custom":_("Custom")}


        p = plistlib.readPlist(filename)
        thresh_mri = p['thresh_mri'].copy()
        thresh_ct = p['thresh_ct'].copy()

        thresh_ct_new = {}
        for name in thresh_ct.keys(): 
            thresh_ct_new[translate_to_x[name]] = thresh_ct[name]

        thresh_mri_new = {}
        for name in thresh_mri.keys(): 
            thresh_mri_new[translate_to_x[name]] = thresh_mri[name]    

        self.thresh_mri = TwoWaysDictionary(thresh_mri_new)
        self.thresh_ct = TwoWaysDictionary(thresh_ct_new)