Esempio n. 1
0
    def manualSeg(self): 
        if self.dcm_3Ddata is None:
            self.statusBar().showMessage('No DICOM data!')
            return

        pyed = QTSeedEditor(self.dcm_3Ddata,
                            seeds=self.segmentation_data,
                            mode='draw',
                            voxelVolume=self.voxel_volume)
        pyed.exec_()

        self.segmentation_data = pyed.getSeeds()
        self.checkSegData()
Esempio n. 2
0
    def maskRegion(self):
        if self.dcm_3Ddata is None:
            self.statusBar().showMessage('No DICOM data!')
            return

        self.statusBar().showMessage('Mask region...')
        QApplication.processEvents()

        pyed = QTSeedEditor(self.dcm_3Ddata,
                            mode='mask',
                            voxelSize=self.voxel_sizemm)

        pyed.exec_()

        self.statusBar().showMessage('Ready')
Esempio n. 3
0
    def autoSeg(self):
        if self.dcm_3Ddata is None:
            self.statusBar().showMessage('No DICOM data!')
            return

        igc = pycut.ImageGraphCut(self.dcm_3Ddata, voxelsize=self.voxel_sizemm)

        pyed = QTSeedEditor(self.dcm_3Ddata,
                            seeds=self.segmentation_seeds,
                            modeFun=igc.interactivity_loop,
                            voxelSize=self.voxel_sizemm)
        pyed.exec_()

        self.segmentation_data = pyed.getContours()
        self.segmentation_seeds = pyed.getSeeds()
        self.checkSegData()
Esempio n. 4
0
    def cropDcm(self):
        if self.dcm_3Ddata is None:
            self.statusBar().showMessage('No DICOM data!')
            return

        self.statusBar().showMessage('Cropping DICOM data...')
        QApplication.processEvents()

        pyed = QTSeedEditor(self.dcm_3Ddata,
                            mode='crop',
                            voxelSize=self.voxel_sizemm)
        pyed.exec_()
        self.dcm_3Ddata = pyed.getImg()
        self.dcm_offsetmm = pyed.getOffset()

        self.setLabelText(self.text_dcm_data, self.getDcmInfo())
        self.statusBar().showMessage('Ready')

        self.statusBar().showMessage('Ready')
Esempio n. 5
0
    def cropDcm(self):
        if self.dcm_3Ddata is None:
            self.statusBar().showMessage('No DICOM data!')
            return

        self.statusBar().showMessage('Cropping DICOM data...')
        QApplication.processEvents()

        is_reduced = False
        shape = self.dcm_3Ddata.shape
        max12 = np.max(shape[:2])
        if max12 > 128:
            is_reduced = True
            czoom = [128.0 / max12] * 2
            if shape[2] > 32:
                czoom.append(32.0 / shape[2])

            else:
                czoom.append(1.0)

            czoom = np.array(czoom)
            reduced_3Ddata = ndimage.zoom(self.dcm_3Ddata, czoom,
                                          prefilter=False, mode='nearest')
        else:
            reduced_3Ddata = self.dcm_3Ddata
             
        pyed = QTSeedEditor(reduced_3Ddata, mode='crop')
        pyed.exec_()
        nzs = pyed.getSeeds().nonzero()

        if nzs is not None:
            cri = []
            for ii in range(3):
                if nzs[ii].shape[0] == 0:
                    nzs = None
                    break
                smin, smax = np.min(nzs[ii]), np.max(nzs[ii])
                if smin == smax:
                    nzs = None
                    break

                cri.append((smin, smax))            
            cri = np.array(cri)

            if is_reduced and nzs is not None:
                aux = (cri.T * (1.0 / czoom)).T
                cri[:,0] = np.floor(aux[:,0])
                cri[:,1] = np.ceil(aux[:,1])

        if nzs is not None:
            crop = self.dcm_3Ddata[cri[0][0]:(cri[0][1] + 1),
                                   cri[1][0]:(cri[1][1] + 1),
                                   cri[2][0]:(cri[2][1] + 1)] 
            self.dcm_3Ddata = np.ascontiguousarray(crop)
            self.dcm_offsetmm = cri[:,0] * self.voxel_sizemm

            self.setLabelText(self.text_dcm_data, self.getDcmInfo())
            self.statusBar().showMessage('Ready')

        else:
            self.statusBar().showMessage('No crop information!')