Exemplo n.º 1
0
    def prepocess(self,
                  img,
                  rootCrown,
                  scale=1.0,
                  nrExRoot=1,
                  marker=True,
                  stemCorrection=False):
        print 'starting to segment'
        rIdx = -1
        self.__io.setServerPath('./')
        circleIdx = circleRatio = circleWidth = circleHeight = imgCircle = 0
        Failed = False
        orig = img.copy()
        mask = Masking.Masking(scale=scale)
        imgGrey = img.astype(np.uint8)
        print 'make mask'
        imgBinary = mask.calculateMask(imgGrey)
        print 'saving binary mask'
        scipy.misc.imsave(
            self.__io.getHomePath() + '/Mask/' + self.__io.getFileName() +
            '.png', imgBinary)
        pathold = os.getcwd()
        os.chdir(self.__io.getHomePath())
        self.__io.writeServerFile(
            'dirt_out.csv',
            self.__io.getHomePath() + '/Mask/' + self.__io.getFileName() +
            '.png,' + str(self.__io.getID()) + ',0')
        os.chdir(pathold)
        imgLabel = self.calculateLabelHist(imgBinary)

        if marker == True:
            print 'Marker is True'
            circleIdx, circleRatio, circleWidth, circleHeight, imgCircle = self.findCircle(
                imgLabel.copy())
        else:
            print 'Marker is False'
            circleIdx, circleRatio, circleWidth, circleHeight, imgCircle = -1, 1, 1, 1, None

        rectIdx, _, _, _, imgTag, tagText = self.findTag(imgLabel.copy(),
                                                         imgBinary,
                                                         orig,
                                                         rect_ratio=5.)

        if rectIdx >= 0:
            print 'tagIdx' + str(rectIdx)
            try:
                self.__labelHist[rectIdx] = 0
            except:
                pass

        if circleIdx >= 0 and marker == True:
            try:
                self.__labelHist[circleIdx] = 0
            except:
                pass
        '''
        These two functions belong together and have to be called right after each other. I know, that is bad.
        '''
        if rootCrown == True:
            rIdx, rIdxList, crownMin, crownMax, crownBottom, crownTop = self.findRoot(
                imgLabel.copy())
            if stemCorrection == True:
                print 'Stem reconstruction is active '
                imgRoot = self.correctForStem(imgLabel.copy(),
                                              [circleIdx, rectIdx, rIdx],
                                              crownMin, crownMax, crownBottom,
                                              crownTop, rIdx, rIdxList)
            else:
                print 'No stem reconstruction active'
                imgReturn = np.zeros_like(imgLabel)
                imgReturn[rIdxList] = 1
                imgRoot = imgReturn[crownMax:crownMin, crownBottom:crownTop]

        if nrExRoot > 1 and rootCrown == True:

            for i in range(nrExRoot):
                exRIdx, imgExRoot, centerPtx, centerPty = self.findExcisedRoot(
                    imgLabel.copy(), [circleIdx, rectIdx, rIdx], crownMin,
                    crownMax)
                if exRIdx != -1:
                    print 'found excised root ' + str(i)
                    try:
                        scipy.misc.imsave(
                            self.__io.getHomePath() + '/Lateral/' +
                            self.__io.getFileName() + '_' + str(centerPtx) +
                            '_' + str(centerPty) + '.png', imgExRoot)
                        print 'excised root ' + str(i) + 'saved'
                    except:
                        print 'NOT SAVED !!!'
                        raise
                    try:
                        pathold = os.getcwd()
                        os.chdir(self.__io.getHomePath())
                        self.__io.writeServerFile(
                            'dirt_out.csv',
                            self.__io.getHomePath() + '/Lateral/' +
                            self.__io.getFileName() + '_' + str(centerPtx) +
                            '_' + str(centerPty) + '.png,' +
                            str(self.__io.getID()) + ',0')
                        print 'excised root ' + str(i) + 'saved Server'
                        os.chdir(pathold)
                    except:
                        print 'NOT SAVED !!!!'
                        raise
        elif nrExRoot == 1 and rootCrown == True:
            exRIdx, imgExRoot, centerPtx, centerPty = self.findExcisedRoot(
                imgLabel.copy(), [circleIdx, rectIdx, rIdx], crownMin,
                crownMax)
            if exRIdx != -1:
                print 'found the excised root '
                try:
                    pathold = os.getcwd()
                    os.chdir(self.__io.getHomePath())
                    scipy.misc.imsave(
                        self.__io.getHomePath() + '/Lateral/' +
                        self.__io.getFileName() + '_' + str(centerPtx) + '_' +
                        str(centerPty) + '.png', imgExRoot)
                    print 'excised root saved'
                    self.__io.writeServerFile(
                        'dirt_out.csv',
                        self.__io.getHomePath() + '/Lateral/' +
                        self.__io.getFileName() + '_' + str(centerPtx) + '_' +
                        str(centerPty) + '.png,' + str(self.__io.getID()) +
                        ',0')
                    print 'excised root saved Server'
                    os.chdir(pathold)
                except:
                    print 'NOT SAVED !!!!'
        elif nrExRoot == 1 and rootCrown == False:
            exRIdx, imgExRoot, centerPtx, centerPty = self.findExcisedRoot(
                imgLabel.copy(), [circleIdx, rectIdx], 0, 1)
            if exRIdx != -1:
                print 'found the excised root '
                rIdx = -1
                try:
                    pathold = os.getcwd()
                    os.chdir(self.__io.getHomePath())
                    scipy.misc.imsave(
                        self.__io.getHomePath() + '/Lateral/' +
                        self.__io.getFileName() + '_' + str(centerPtx) + '_' +
                        str(centerPty) + '.png', imgExRoot)
                    print 'excised root saved'
                    self.__io.writeServerFile(
                        'dirt_out.csv',
                        self.__io.getHomePath() + '/Lateral/' +
                        self.__io.getFileName() + '_' + str(centerPtx) + '_' +
                        str(centerPty) + '.png,' + str(self.__io.getID()) +
                        ',0')
                    print 'excised root saved Server'
                    os.chdir(pathold)
                except:
                    print 'NOT SAVED !!!!'

        if marker == True:
            scipy.misc.imsave(
                self.__io.getHomePath() + '/Mask/' + self.__io.getFileName() +
                'Circle.png', imgCircle)
            scipy.misc.imsave(
                self.__io.getHomePath() + '/Mask/' + self.__io.getFileName() +
                'Tag.png', imgTag)
        #pathold=os.getcwd()
        #os.chdir(self.__io.getHomePath())

        if marker == True:
            self.__io.writeServerFile(
                'dirt_out.csv',
                self.__io.getHomePath() + '/Mask/' + self.__io.getFileName() +
                'Circle.png,' + str(self.__io.getID()) + ',0')

        #os.chdir(pathold)
        if rIdx != -1:
            '''
            If image is usable, then it gets segmented and copied. Otherwise we ignore it
            '''
            try:
                print 'root image to be saved'
                scipy.misc.imsave(
                    self.__io.getHomePath() + '/Crown/' +
                    self.__io.getFileName() + '.png', imgRoot)
            except:
                print 'CROWN NOT SAVED'
                raise
            try:
                pathold = os.getcwd()
                os.chdir(self.__io.getHomePath())
                self.__io.writeServerFile(
                    'dirt_out.csv',
                    self.__io.getHomePath() + '/Crown/' +
                    self.__io.getFileName() + '.png,' +
                    str(self.__io.getID()) + ',0')
                os.chdir(pathold)
            except:
                print 'MASK NOT WRITTEN TO SERVER FILE'
        elif rIdx == -1 and exRIdx != -1:
            print "Only excised roots computed"
        else:
            Failed = True
        print "old path: " + pathold
        return Failed, tagText, circleRatio, circleWidth, circleHeight