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 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()
Example #3
0
    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()
Example #4
0
    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)
Example #5
0
    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')
Example #6
0
    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')
Example #7
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',
                            voxelSize=self.voxel_sizemm)
        pyed.exec_()

        self.segmentation_data = pyed.getSeeds()
        self.checkSegData()
Example #8
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')
Example #9
0
    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')
Example #10
0
    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')
Example #11
0
    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)
Example #12
0
    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., ")
Example #13
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()
Example #14
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')
Example #15
0
    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., ')
Example #16
0
    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)
Example #17
0
    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)
Example #18
0
    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")
Example #19
0
    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