Esempio n. 1
0
    def __init__(self, module_manager):
        # initialise our base class
        ModuleBase.__init__(self, module_manager)

        self._input_mmd = None

        self._output_mmd = MedicalMetaData()
        self._output_mmd.medical_image_properties = \
                vtk.vtkMedicalImageProperties()
        self._output_mmd.direction_cosines = \
                vtk.vtkMatrix4x4()

        # if the value (as it appears in mk.vtk_kit.constants.mipk)
        # appears in the dict, its value refers to the user supplied
        # value.  when the user resets a field, that key is removed
        # from the dict
        self._config.new_value_dict = {}

        # this is the list of relevant properties
        self.mip_attr_l = \
            module_kits.vtk_kit.constants.medical_image_properties_keywords

        # this will be used to keep track of changes made to the prop
        # grid before they are applied to the config
        self._grid_value_dict = {}

        self._view_frame = None
        self.sync_module_logic_with_config()
Esempio n. 2
0
    def __init__(self, module_manager):
        # initialise our base class
        ModuleBase.__init__(self, module_manager)

        self._input_mmd = None

        self._output_mmd = MedicalMetaData()
        self._output_mmd.medical_image_properties = \
                vtk.vtkMedicalImageProperties()
        self._output_mmd.direction_cosines = \
                vtk.vtkMatrix4x4()
        
        # if the value (as it appears in mk.vtk_kit.constants.mipk)
        # appears in the dict, its value refers to the user supplied
        # value.  when the user resets a field, that key is removed
        # from the dict
        self._config.new_value_dict = {}

        # this is the list of relevant properties
        self.mip_attr_l = \
            module_kits.vtk_kit.constants.medical_image_properties_keywords

        # this will be used to keep track of changes made to the prop
        # grid before they are applied to the config
        self._grid_value_dict = {}

        self._view_frame = None
        self.sync_module_logic_with_config()
Esempio n. 3
0
    def img2dcm(self, input_img, output, img_type, img_number): 

        if img_type == "jpg":
            print "JPG"
            image = vtk.vtkJPEGReader()
            image.SetFileName(input_img)
            image.Update()
            
        elif img_type == "tif":
            print "TIF"
            image = vtk.vtkTIFFReader()
            image.SetFileName(input_img)
            image.Update()
            
        elif img_type == "bmp":
            print "BMP"
            image = vtk.vtkBMPReader()
            image.SetFileName(input_img)
            image.Allow8BitBMPOn()
            image.Update()
            
        elif img_type == "png": 
            print "PNG"
            image = vtk.vtkPNGReader()
            image.SetFileName(input_img)
            image.SetDataSpacing(self.spacing)
            image.Update()

        elif img_type == "vti": 
            print "VTI"
            image = vtk.vtkXMLImageDataReader()
            image.SetFileName(input_img)
            image.Update()
        
            #if (orientation == 0):
        image_pos = img_number * self.spacing[2]
        image_localization = image_pos

        # print image_pos, img_number, image.GetOutput().GetScalarRange()

        img_clone = vtk.vtkImageData()
        img_clone.DeepCopy(image.GetOutput())
        img_clone.SetSpacing(self.spacing)
        img_clone.Update()

        # v = vtk.vtkImageViewer()
        # v.SetInput(image.GetOutput())
        # v.SetColorLevel(500)
        # v.SetColorWindow(240)
        # v.Render()

        # time.sleep(3)

        # a = vtk.vtkImageCast()
        # a.SetOutputScalarTypeToUnsignedChar()
        # a.SetInput(image.GetOutput())
        # a.ClampOverflowOn()
        # a.Update()

        #b = vtk.vtkJPEGWriter()
        #b.SetFileName("C:\\teste.jpg")
        #b.SetInput(a.GetOutput())
        #b.writer()

        #spacing = image.GetOutput().GetSpacing()
        #elif (orientation == 1):
        #    image_pos[0] =  image_pos[0] + thickness
        #    image_localization = image_localization + thickness
        #    img_number = img_number + 1
        
        #elif (orientation == 2):
        #    image_pos[1] =  image_pos[1] + thickness
        #    image_localization = image_localization + thickness
        #    img_number = img_number + 1
        pos = 0, 0, image_pos
        print pos

        # transform = vtk.vtkTransform()
        # transform.Translate(pos)

        # transform_filter = vtk.vtkImageReslice()
        # transform_filter.SetInput(image.GetOutput())
        # transform_filter.SetResliceTransform(transform)
        # transform_filter.Update()

        properties = vtk.vtkMedicalImageProperties()
        properties.SetModality(self.modality)
        properties.SetInstitutionName(self.institution)
        properties.SetPatientName(self.patient)
        properties.SetSliceThickness(str(self.spacing[2]))
        properties.SetSeriesNumber(str(self.serie))
        properties.SetImageNumber(str(img_number))
        properties.SetPatientID(self.patient_id)
        properties.SetStudyID(self.study_id)
        properties.AddUserDefinedValue("Image Position (Patient)", "%.5f\\%.5f\\%.5f" %
                                       (pos[0], pos[1], pos[2]))
        properties.AddUserDefinedValue("Instance Number", str(img_number))
        print str(img_number), properties.GetNumberOfUserDefinedValues()

        writer = vtkgdcm.vtkGDCMImageWriter()
        writer.SetInput(img_clone)
        writer.SetStudyUID(self.study_uid)
        writer.SetSeriesUID(self.series_uid)
        writer.SetMedicalImageProperties(properties)
        writer.SetFileName(output)
        # writer.SetImageFormat(vtk.VTK_LUMINANCE)
        writer.SetFileDimensionality(3)
        writer.Write()
               
        reader = gdcm.Reader()
        reader.SetFileName(output)
        reader.Read()

        anon = gdcm.Anonymizer()
        anon.SetFile(reader.GetFile())
        anon.Replace(gdcm.Tag(0x0020, 0x0013), str(img_number))
        anon.Replace(gdcm.Tag(0x0028, 0x0030), "%.6f\\%.6f" % (self.spacing[0],
                                                               self.spacing[1]))

        writer = gdcm.Writer()
        writer.SetFile(reader.GetFile())
        writer.SetFileName(output)
        writer.Write()    

        # print spacing, pos, image.GetOutput().GetScalarRange()

        # writer = ivDicom.DicomWriter()
        # writer.SetFileName(output)
        # writer.SaveIsNew(image.GetOutput())
        # 
        # writer.SetAcquisitionModality(self.modality)
        # writer.SetInstitutionName(self.institution)
        # writer.SetStudyID(self.study_uid)
        # writer.SetPatientID(self.patient_id)
        # writer.SetPatientName(self.patient)
        # writer.SetImageThickness(self.spacing[2])
        # writer.SetImageSeriesNumber(self.serie)
        # writer.SetImageNumber(img_number)
        # writer.SetImagePosition(pos)
        # writer.SetImageLocation(image_localization)
        # writer.SetPixelSpacing(self.spacing[:2])
        # writer.Save()

        print "Written", input_img, "->", output
Esempio n. 4
0
    def execute_module(self):
        if self._config.output_mode == 0:
            # slice-per-file mode

            if not os.path.isdir(self._config.output_directory):
                raise RuntimeError('Please specify a valid output directory.')

            # generate filenamelist with as many entries as there are
            # z-slices
            self._input_data.UpdateInformation()  # shouldn't be nec.
            z_len = self._input_data.GetDimensions()[2]
            odir = self._config.output_directory
            fn_list = [
                os.path.join(odir, 'im%05d.dcm' % (i, ))
                for i in range(1, z_len + 1)
            ]

            fn_sa = vtk.vtkStringArray()
            [fn_sa.InsertNextValue(fn) for fn in fn_list]
            self._writer.SetFileNames(fn_sa)
            self._writer.SetFileDimensionality(2)

        else:  # output_mode == 1, multi-slices per file
            if not self._config.output_filename:
                raise RuntimeError('Please specify an output filename.')

            self._writer.SetFileName(self._config.output_filename)
            self._writer.SetFileDimensionality(3)

        # now setup the common stuff
        mip = vtk.vtkMedicalImageProperties()

        try:
            mip.DeepCopy(self._input_metadata.medical_image_properties)
        except AttributeError:
            # this simply means that we have no input metadata
            pass

        self._writer.SetMedicalImageProperties(mip)

        try:
            self._writer.SetDirectionCosines(
                self._input_metadata.direction_cosines)
        except AttributeError:
            # we have no input metadata, set the default
            # identity matrix
            m = vtk.vtkMatrix4x4()
            self._writer.SetDirectionCosines(m)

        if self._config.cast_to_short:
            self._caster.SetInput(self._input_data)
            # if we don't call this update, it crashes on Windows with
            # GDCM 2.0.5, and everything else shortly before DeVIDE
            # 8.5.  The crash is inside the vtkGDCMImageWriter.
            self._caster.Update()
            self._writer.SetInput(self._caster.GetOutput())
        else:
            # just to be sure
            self._caster.SetInput(None)
            self._writer.SetInput(self._input_data)

        self._writer.Write()
Esempio n. 5
0
    def execute_module(self):
        if self._config.output_mode == 0:
            # slice-per-file mode

            if not os.path.isdir(self._config.output_directory):
                raise RuntimeError(
                        'Please specify a valid output directory.')

            # generate filenamelist with as many entries as there are
            # z-slices
            self._input_data.UpdateInformation() # shouldn't be nec.
            z_len = self._input_data.GetDimensions()[2]
            odir = self._config.output_directory
            fn_list = [os.path.join(odir,'im%05d.dcm' % (i,)) 
                       for i in range(1, z_len+1)]

            fn_sa = vtk.vtkStringArray()
            [fn_sa.InsertNextValue(fn) for fn in fn_list]
            self._writer.SetFileNames(fn_sa)
            self._writer.SetFileDimensionality(2)

        else: # output_mode == 1, multi-slices per file
            if not self._config.output_filename:
                raise RuntimeError(
                        'Please specify an output filename.')

            self._writer.SetFileName(self._config.output_filename)
            self._writer.SetFileDimensionality(3)

        # now setup the common stuff
        mip = vtk.vtkMedicalImageProperties()

        try:
            mip.DeepCopy(self._input_metadata.medical_image_properties)
        except AttributeError:
            # this simply means that we have no input metadata
            pass

        self._writer.SetMedicalImageProperties(mip)

        try:
            self._writer.SetDirectionCosines(
                    self._input_metadata.direction_cosines)
        except AttributeError:
            # we have no input metadata, set the default
            # identity matrix
            m = vtk.vtkMatrix4x4()
            self._writer.SetDirectionCosines(m)

        if self._config.cast_to_short:
            self._caster.SetInput(self._input_data)
            # if we don't call this update, it crashes on Windows with
            # GDCM 2.0.5, and everything else shortly before DeVIDE
            # 8.5.  The crash is inside the vtkGDCMImageWriter.
            self._caster.Update()
            self._writer.SetInput(self._caster.GetOutput())
        else:
            # just to be sure
            self._caster.SetInput(None)
            self._writer.SetInput(self._input_data)

        self._writer.Write()