def visualization(self): """ Run viewer with output data3d and segmentation """ try: from pysegbase.seed_editor_qt import QTSeedEditor except: logger.warning("Deprecated of pyseg_base as submodule") from seed_editor_qt import QTSeedEditor from PyQt4.QtGui import QApplication import numpy as np #, QMainWindow app = QApplication(sys.argv) #pyed = QTSeedEditor(self.data3d, contours=(self.segmentation>0)) pyed = QTSeedEditor(self.segmentation) pyed.exec_() #import pdb; pdb.set_trace() #pyed = QTSeedEditor(deletemask, mode='draw') #pyed.exec_() app.exit()
def test_viewer_seeds(self): try: from pysegbase.seed_editor_qt import QTSeedEditor except: print("Deprecated of pyseg_base as submodule") from seed_editor_qt import QTSeedEditor from PyQt4.QtGui import QApplication import numpy as np img3d = (np.random.rand(30, 30, 30)*10).astype(np.int16) seeds = (np.zeros(img3d.shape)).astype(np.int8) seeds[3:6, 12:18, 9:16] = 1 seeds[3:6, 19:22, 21:27] = 2 # , QMainWindow app = QApplication(sys.argv) pyed = QTSeedEditor(img3d, seeds=seeds) pyed.exec_() # deletemask = pyed.getSeeds() # import pdb; pdb.set_trace() # pyed = QTSeedEditor(deletemask, mode='draw') # pyed.exec_() app.exit()
def test_viewer_seeds(self): app = QApplication(sys.argv) dcmdir = QFileDialog.getExistingDirectory(caption='Select DICOM Folder', options=QFileDialog.ShowDirsOnly) print ('ahoj') #app.exec_() #app.exit(0) #del(app) #import pdb; pdb.set_trace() img = np.random.rand(30,30,30) print '1' app = QApplication(sys.argv) print '2' pyed = QTSeedEditor(img) print '3' app.exec_() del(app) app = QApplication(sys.argv) print '2' pyed = QTSeedEditor(img) print '3' app.exec_() del(app)
def cropDcm(self): oseg = self.oseg if oseg.data3d is None: self.statusBar().showMessage('No DICOM data!') return self.statusBar().showMessage('Cropping DICOM data...') QApplication.processEvents() pyed = QTSeedEditor(oseg.data3d, mode='crop', voxelSize=oseg.voxelsize_mm) # @TODO mx = self.oseg.viewermax mn = self.oseg.viewermin width = mx - mn # enter = (float(mx)-float(mn)) center = np.average([mx, mn]) logger.debug("window params max %f min %f width, %f center %f" % (mx, mn, width, center)) pyed.changeC(center) pyed.changeW(width) pyed.exec_() crinfo = pyed.getROI() if crinfo is not None: tmpcrinfo = [] for ii in crinfo: tmpcrinfo.append([ii.start, ii.stop]) # seg.data3d = qmisc.crop(oseg.data3d, oseg.crinfo) oseg.crop(tmpcrinfo) self.setLabelText(self.text_dcm_data, self.getDcmInfo()) self.statusBar().showMessage('Ready')
def maskRegion(self): if self.oseg.data3d is None: self.statusBar().showMessage('No DICOM data!') return self.statusBar().showMessage('Mask region...') QApplication.processEvents() pyed = QTSeedEditor( self.oseg.data3d, mode='mask', voxelSize=self.oseg.voxelsize_mm, contours=((self.oseg.segmentation == 0).astype(np.int8)*2) ) pyed.contours_old = pyed.contours.copy() # initial mask set # pyed.masked = np.ones(self.oseg.data3d.shape, np.int8) # pyed.masked = (self.oseg.segmentation == 0).astype(np.int8) mx = self.oseg.viewermax mn = self.oseg.viewermin width = mx - mn # enter = (float(mx)-float(mn)) center = np.average([mx, mn]) logger.debug("window params max %f min %f width, %f center %f" % (mx, mn, width, center)) pyed.changeC(center) pyed.changeW(width) pyed.exec_() self.statusBar().showMessage('Ready')
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', voxelSize=self.voxel_sizemm) 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 test_data_editor(self): """ Funkce provádí změnu vstupních dat - data3d """ #pyed = sed3.sed3(self.data3d, contour = oseg.segmentation) #pyed.show() try: from pysegbase.seed_editor_qt import QTSeedEditor except: logger.warning("Deprecated of pyseg_base as submodule") from seed_editor_qt import QTSeedEditor from PyQt4.QtGui import QApplication import numpy as np im3d = np.random.rand(15, 15, 15) print("Select pixels for deletion (it will be setted to 0)") #, QMainWindow app = QApplication(sys.argv) pyed = QTSeedEditor(im3d, mode='draw') pyed.exec_() deletemask = pyed.getSeeds() print( "If it is ok, press 'Return'. If it is wrong, click into image and press 'Return'" ) # rewrite input data im3d[deletemask != 0] = 0 pyed = QTSeedEditor(im3d) app.exec_() sds = pyed.getSeeds() # if usere select pixel, there will be 1 or 2 in sds self.assertLess(np.max(sds), 1)
def manualSeg(self): oseg = self.oseg # rint 'ms d3d ', oseg.data3d.shape # rint 'ms seg ', oseg.segmentation.shape # rint 'crinfo ', oseg.crinfo if oseg.data3d is None: self.statusBar().showMessage("No DICOM data!") return sgm = oseg.segmentation.astype(np.uint8) pyed = QTSeedEditor(oseg.data3d, seeds=sgm, mode="draw", voxelSize=oseg.voxelsize_mm, volume_unit="ml") pyed.exec_() oseg.segmentation = pyed.getSeeds() self.oseg.processing_time = datetime.datetime.now() - self.oseg.time_start self.checkSegData("manual seg., ")
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 btnManualSeg(self): oseg = self.oseg # rint 'ms d3d ', oseg.data3d.shape # rint 'ms seg ', oseg.segmentation.shape # rint 'crinfo ', oseg.crinfo if oseg.data3d is None: self.statusBar().showMessage('No DICOM data!') return sgm = oseg.segmentation.astype(np.uint8) pyed = QTSeedEditor(oseg.data3d, seeds=sgm, mode='draw', voxelSize=oseg.voxelsize_mm, volume_unit='ml') pyed.exec_() oseg.segmentation = pyed.getSeeds() self.oseg.processing_time = \ datetime.datetime.now() - self.oseg.time_start self.checkSegData('manual seg., ')
def test_data_editor(self): """ Funkce provádí změnu vstupních dat - data3d """ #pyed = sed3.sed3(self.data3d, contour = oseg.segmentation) #pyed.show() try: from pysegbase.seed_editor_qt import QTSeedEditor except: logger.warning("Deprecated of pyseg_base as submodule") from seed_editor_qt import QTSeedEditor from PyQt4.QtGui import QApplication import numpy as np im3d = np.random.rand(15,15,15) print ("Select pixels for deletion (it will be setted to 0)") #, QMainWindow app = QApplication(sys.argv) pyed = QTSeedEditor(im3d, mode='draw') pyed.exec_() deletemask = pyed.getSeeds() print ("If it is ok, press 'Return'. If it is wrong, click into image and press 'Return'") # rewrite input data im3d [deletemask != 0] = 0 pyed = QTSeedEditor(im3d) app.exec_() sds = pyed.getSeeds() # if usere select pixel, there will be 1 or 2 in sds self.assertLess(np.max(sds), 1)
def interactivity(self, min_val=None, max_val=None): try: from pysegbase.seed_editor_qt import QTSeedEditor except: logger.warning("Deprecated of pyseg_base as submodule") from seed_editor_qt import QTSeedEditor import_gui() logger.debug('interactivity') # if self.edit_data: # self.data3d = self.data_editor(self.data3d) igc = self._interactivity_begin() # from PyQt4.QtCore import pyqtRemoveInputHook # pyqtRemoveInputHook() # import ipdb; ipdb.set_trace() # noqa BREAKPOINT pyed = QTSeedEditor(igc.img, seeds=igc.seeds, modeFun=igc.interactivity_loop, voxelSize=igc.voxelsize, volume_unit='ml') # set window if min_val is None: min_val = np.min(self.data3d) if max_val is None: max_val = np.max(self.data3d) window_c = ((max_val + min_val) / 2) window_w = (max_val - min_val) pyed.changeC(window_c) pyed.changeW(window_w) pyed.exec_() # @TODO někde v igc.interactivity() dochází k přehození nul za jedničy, # tady se to řeší hackem if igc.segmentation is not None: self.segmentation = (igc.segmentation == 0).astype(np.int8) self._interactivity_end(igc)
def maskRegion(self): if self.oseg.data3d is None: self.statusBar().showMessage("No DICOM data!") return self.statusBar().showMessage("Mask region...") QApplication.processEvents() pyed = QTSeedEditor(self.oseg.data3d, mode="mask", voxelSize=self.oseg.voxelsize_mm) mx = self.oseg.viewermax mn = self.oseg.viewermin width = mx - mn # enter = (float(mx)-float(mn)) center = np.average([mx, mn]) logger.debug("window params max %f min %f width, %f center %f" % (mx, mn, width, center)) pyed.changeC(center) pyed.changeW(width) pyed.exec_() self.statusBar().showMessage("Ready")
def test_texture_features(self): """ Interactivity is stored to file """ try: from pysegbase.seed_editor_qt import QTSeedEditor except: logger.warning("Deprecated of pyseg_base as submodule") from seed_editor_qt import QTSeedEditor from PyQt4.QtGui import QApplication from skimage.feature import greycomatrix, greycoprops import misc dcmdir = os.path.join(path_to_script, './../sample_data/jatra_5mm') #gcparams = {'pairwiseAlpha':10, 'use_boundary_penalties':True} #segparams = {'pairwise_alpha_per':3, 'use_boundary_penalties':True,'boundary_penalties_sigma':200} #oseg = organ_segmentation.OrganSegmentation(dcmdir, working_voxelsize_mm = 4, segparams=segparams) #oseg.add_seeds_mm([120],[120],[70], label=1, radius=30) #oseg.add_seeds_mm([170,220,250],[250,280,200],[70], label=2, radius=30) reader = dcmr.DicomReader(dcmdir) # , qt_app=qt_app) data3d = reader.get_3Ddata() # normalizace na čísla od nuly do 255 data3d = data3d / (2**4) metadata = reader.get_metaData() iparams = {} iparams['series_number'] = reader.series_number iparams['datadir'] = dcmdir working_voxelsize_mm = 2 voxelsize_mm = np.array(metadata['voxelsize_mm']) zoom = voxelsize_mm / working_voxelsize_mm PATCH_SIZE = 21 PATCH_DIST = 15 shp = data3d.shape vx, vy, vz = np.mgrid[0:shp[0] - PATCH_SIZE:PATCH_DIST, 0:shp[1] - PATCH_SIZE:PATCH_DIST, 0:shp[2] - PATCH_SIZE:8] import pdb pdb.set_trace() feat = np.zeros(vx.shape) feat2 = np.zeros(vx.shape) #vx = vx.reshape(-1) #vy = vy.reshape(-1) #vz = vz.reshape(-1) #for i in range(0,len(vx)): it = np.nditer(vx, flags=['multi_index']) while not it.finished: vxi = vx[it.multi_index] vyi = vy[it.multi_index] vzi = vz[it.multi_index] patch = data3d[vxi:vxi + PATCH_SIZE, vyi:vyi + PATCH_SIZE, vzi] patch = np.squeeze(patch) print(it.iterindex, ' - ', vxi, ' ', vyi, ' ', vzi, ' - ', it.multi_index) #import pdb; pdb.set_trace() glcm = greycomatrix(patch, [5], [0], 256, symmetric=True, normed=True) dissimilarity = greycoprops(glcm, 'dissimilarity') feat[it.multi_index] = dissimilarity feat2[it.multi_index] = greycoprops(glcm, 'correlation') it.iternext() locations = [(474, 291), (440, 433), (466, 18), (462, 236)] qt_app = QApplication(sys.argv) pyed = QTSeedEditor(feat) qt_app.exec_() pyed = QTSeedEditor(feat2) qt_app.exec_() pdb