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()
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')
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()
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')
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!')