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