def commitToDatabase(self, imgdata):
        # if a kept mask was created in a previous mask run and the
        # assess flag was used (basically combining the 2 runs) there is
        # nothing new to commit.
        if self.useAcceptedMask: return

        sessiondata = imgdata['session']
        rundir = self.params['rundir']
        maskname = self.params['runname']
        assessname = self.params['assessname']
        bin = self.params['bin']
        maskdir = os.path.join(rundir, "masks")
        maskrundata, maskparamsdata = apMask.getMaskParamsByRunName(
            maskname, sessiondata)
        if not maskrundata:
            apMask.insertManualMaskRun(sessiondata, rundir, maskname, bin)
            maskrundata, maskparamsdata = apMask.getMaskParamsByRunName(
                maskname, sessiondata)
            try:
                apParam.createDirectory(maskdir)
            except:
                apDisplay.printWarning('can not create mask directory')
        massessrundata, exist = apMask.insertMaskAssessmentRun(
            sessiondata, maskrundata, assessname)

        mask = self.maskimg
        maskfilename = imgdata['filename'] + '_mask.png'

        image = self.image
        labeled_regions, clabels = nd.label(mask)
        testlog = [False, 0, ""]
        infos = {}
        infos, testlog = apCrud.getLabeledInfo(image, mask, labeled_regions,
                                               range(1, clabels + 1), False,
                                               infos, testlog)
        offset = 1
        for l1 in range(0, len(infos)):

            l = l1 + offset
            info = infos[l]
            info.append(l)
            regiondata = apMask.insertMaskRegion(maskrundata, imgdata, info)
            print "Inserting mask region in database"

        # PIL alpha channel read does not work
        #apImage.arrayMaskToPngAlpha(mask, os.path.join(maskdir,maskfilename))
        apImage.arrayMaskToPng(mask, os.path.join(maskdir, maskfilename))

        allregiondata = apMask.getMaskRegions(maskrundata, imgdata)

        for regiondata in allregiondata:
            apMask.insertMaskAssessment(massessrundata, regiondata, 1)
            print "Inserting mask assessment in database."

        if self.assess != self.assessold and self.assess is not None:
            #imageaccessor run is always named run1
            apDatabase.insertImgAssessmentStatus(imgdata, 'run1', self.assess)
        return
	def commitToDatabase(self,imgdata):
        # if a kept mask was created in a previous mask run and the 
        # assess flag was used (basically combining the 2 runs) there is 
        # nothing new to commit.  
		if self.useAcceptedMask: return
        
		sessiondata = imgdata['session']
		rundir = self.params['rundir']
		maskname = self.params['runname']
		assessname = self.params['assessname']
		bin = self.params['bin']
		maskdir=os.path.join(rundir,"masks")
		maskrundata,maskparamsdata = apMask.getMaskParamsByRunName(maskname,sessiondata)
		if not maskrundata:
			apMask.insertManualMaskRun(sessiondata,rundir,maskname,bin)
			maskrundata,maskparamsdata = apMask.getMaskParamsByRunName(maskname,sessiondata)
			try:
				apParam.createDirectory(maskdir)
			except:
				apDisplay.printWarning('can not create mask directory')
		massessrundata,exist = apMask.insertMaskAssessmentRun(sessiondata,maskrundata,assessname)
		
		mask = self.maskimg
		maskfilename = imgdata['filename']+'_mask.png'
		
		image = self.image
		labeled_regions,clabels=nd.label(mask)
		testlog = [False,0,""]
		infos={}
		infos,testlog=apCrud.getLabeledInfo(image,mask,labeled_regions,range(1,clabels+1),False,infos,testlog)
		offset=1
		for l1 in range(0,len(infos)):

			l=l1+offset
			info=infos[l]
			info.append(l)
			regiondata= apMask.insertMaskRegion(maskrundata,imgdata,info)
			print "Inserting mask region in database"
		
		# PIL alpha channel read does not work
		#apImage.arrayMaskToPngAlpha(mask, os.path.join(maskdir,maskfilename))
		apImage.arrayMaskToPng(mask, os.path.join(maskdir,maskfilename))

		allregiondata = apMask.getMaskRegions(maskrundata,imgdata)
			
		for regiondata in allregiondata:
			apMask.insertMaskAssessment(massessrundata,regiondata,1)
			print "Inserting mask assessment in database."

		if self.assess != self.assessold and self.assess is not None:
			#imageaccessor run is always named run1
			apDatabase.insertImgAssessmentStatus(imgdata, 'run1', self.assess)
		return
Пример #3
0
    def getImageList(self):
        self.maskrundata, self.maskparamsdata = apMask.getMaskParamsByRunName(
            self.settings['mask run'], self.session)
        self.maskdir = os.path.join(self.maskrundata['path']['path'], "masks")
        files = os.listdir(self.maskdir)
        format = 'png'
        assessrunname = self.settings['run']

        goodfiles = []
        for file in files:
            ext = file.split('.')[-1]
            if format == 'png' and ext in ('png', 'PNG'):
                goodfiles.append(file)

        self.assessrundata, exist = apMask.insertMaskAssessmentRun(
            self.session, self.maskrundata, assessrunname)
        if exist:
            if self.settings['continueon']:
                mode = 'continue'
            else:
                mode = 'overwrite'
            self.logger.warning('Assessor Run exists, will %s' % (mode, ))
            if mode == 'continue':
                assessedmaskfiles = apMask.getAssessedMasks(
                    self.assessrundata, self.maskrundata)
                for assessedmaskfile in assessedmaskfiles:
                    try:
                        aindex = goodfiles.index(assessedmaskfile)
                        del goodfiles[aindex]
                    except ValueError:
                        pass
        if goodfiles:
            goodfiles.sort()
            self.images = []
            self.files = []
            for i, filename in enumerate(goodfiles):
                imgdata = self.readParent(filename)
                self.images.append(imgdata)
                self.files.append(filename)

                if self.noreject and apDatabase.getImgAssessmentStatus(
                        imgdata) == False:
                    self.files.pop()
                    self.images.pop()
        else:
            self.logger.error('No %s files in directory' % (format, ))
Пример #4
0
    def commitToDatabase(self, imgdata):
        # if a kept mask was created in a previous mask run and the
        # assess flag was used (basically combining the 2 runs) there is
        # nothing new to commit.
        if self.useAcceptedMask: return

        sessiondata = imgdata['session']
        rundir = self.params['rundir']
        maskname = self.params['runname']
        assessname = self.params['assessname']
        bin = self.params['bin']
        maskdir = os.path.join(rundir, "masks")
        maskrundata, maskparamsdata = apMask.getMaskParamsByRunName(
            maskname, sessiondata)
        if not maskrundata:
            apMask.insertManualMaskRun(sessiondata, rundir, maskname, bin)
            maskrundata, maskparamsdata = apMask.getMaskParamsByRunName(
                maskname, sessiondata)
        massessrundata, exist = apMask.insertMaskAssessmentRun(
            sessiondata, maskrundata, assessname)

        mask = self.maskimg
        maskfilename = imgdata['filename'] + '_mask.png'

        image = self.image
        labeled_regions, clabels = nd.label(mask)
        testlog = [False, 0, ""]
        infos = {}
        infos, testlog = apCrud.getLabeledInfo(image, mask, labeled_regions,
                                               range(1, clabels + 1), False,
                                               infos, testlog)
        offset = 1
        for l1 in range(0, len(infos)):

            l = l1 + offset
            info = infos[l]
            info.append(l)
            regiondata = apMask.insertMaskRegion(maskrundata, imgdata, info)
            print "Inserting mask region in database"

        allregiondata = apMask.getMaskRegions(maskrundata, imgdata)

        for regiondata in allregiondata:
            apMask.insertMaskAssessment(massessrundata, regiondata, 1)
            print "Inserting mask assessment in database."
        return
Пример #5
0
	def getImageList(self):
		self.maskrundata,self.maskparamsdata = apMask.getMaskParamsByRunName(self.settings['mask run'],self.session)
		self.maskdir=os.path.join(self.maskrundata['path']['path'],"masks")
		files = os.listdir(self.maskdir)
		format = 'png'
		assessrunname = self.settings['run']
		
		goodfiles = []
		for file in files:
			ext = file.split('.')[-1]
			if format == 'png' and ext in ('png','PNG'):
				goodfiles.append(file)

		self.assessrundata,exist = apMask.insertMaskAssessmentRun(self.session,self.maskrundata,assessrunname)
		if exist:
			if self.settings['continueon']:
				mode = 'continue'
			else:
				mode = 'overwrite'
			self.logger.warning('Assessor Run exists, will %s' % (mode,))
			if mode == 'continue':
				assessedmaskfiles = apMask.getAssessedMasks(self.assessrundata,self.maskrundata)
				for assessedmaskfile in assessedmaskfiles:
					try:
						aindex = goodfiles.index(assessedmaskfile)
						del goodfiles[aindex]
					except ValueError:
						pass
		if goodfiles:
			goodfiles.sort()
			self.images=[]
			self.files=[]
			for i,filename in enumerate(goodfiles):
				imgdata = self.readParent(filename)
				self.images.append(imgdata)
				self.files.append(filename)

				if self.noreject and apDatabase.getImgAssessmentStatus(imgdata)==False:
					self.files.pop()
					self.images.pop()
		else:
			self.logger.error('No %s files in directory' % (format,))
	def commitToDatabase(self,imgdata):
        # if a kept mask was created in a previous mask run and the 
        # assess flag was used (basically combining the 2 runs) there is 
        # nothing new to commit.  
		if self.useAcceptedMask: return
        
		sessiondata = imgdata['session']
		rundir = self.params['rundir']
		maskname = self.params['runname']
		assessname = self.params['assessname']
		bin = self.params['bin']
		maskdir=os.path.join(rundir,"masks")
		maskrundata,maskparamsdata = apMask.getMaskParamsByRunName(maskname,sessiondata)
		if not maskrundata:
			apMask.insertManualMaskRun(sessiondata,rundir,maskname,bin)
			maskrundata,maskparamsdata = apMask.getMaskParamsByRunName(maskname,sessiondata)
		massessrundata,exist = apMask.insertMaskAssessmentRun(sessiondata,maskrundata,assessname)
		
		mask = self.maskimg
		maskfilename = imgdata['filename']+'_mask.png'
		
		image = self.image
		labeled_regions,clabels=nd.label(mask)
		testlog = [False,0,""]
		infos={}
		infos,testlog=apCrud.getLabeledInfo(image,mask,labeled_regions,range(1,clabels+1),False,infos,testlog)
		offset=1
		for l1 in range(0,len(infos)):

			l=l1+offset
			info=infos[l]
			info.append(l)
			regiondata= apMask.insertMaskRegion(maskrundata,imgdata,info)
			print "Inserting mask region in database"
		
		allregiondata = apMask.getMaskRegions(maskrundata,imgdata)
			
		for regiondata in allregiondata:
			apMask.insertMaskAssessment(massessrundata,regiondata,1)
			print "Inserting mask assessment in database."
		return
    def commitToDatabase(self, imgdata):
        sessiondata = imgdata['session']
        rundir = self.params['rundir']
        maskname = self.params['runname']
        assessname = self.params['runname']
        bin = self.params['bin']
        maskdir = os.path.join(rundir, "masks")

        maskrundata, maskparamsdata = apMask.getMaskParamsByRunName(
            maskname, sessiondata)

        if not maskrundata:
            apMask.insertManualMaskRun(sessiondata, rundir, maskname, bin)
            maskrundata, maskparamsdata = apMask.getMaskParamsByRunName(
                maskname, sessiondata)
            try:
                apParam.createDirectory(maskdir)
            except:
                apDisplay.printWarning('can not create mask directory')

        massessrundata, exist = apMask.insertMaskAssessmentRun(
            sessiondata, maskrundata, assessname)

        # The mask file should only exist if the em_hole_finder found a region to mask.
        # If it does not exist, do not insert anything to the DB.
        if (os.path.exists(self.outfile)):
            apDisplay.printMsg("Writing results to database: " +
                               time.asctime())

            # Set black pixels to white and anything else to 0
            img1 = Image.open(self.outfile)
            img2 = Image.eval(img1, lambda px: 255 if px == 0 else 0)

            # make sure the images have the same shape
            imgshape = numpy.asarray(imgdata['image'].shape)
            apDisplay.printMsg("MRC Image Shape:")
            print imgshape
            imgsize = imgshape[0] * imgshape[1]
            apDisplay.printMsg("MRC Image Size:")
            print imgsize

            maskshape = numpy.shape(img2)
            apDisplay.printMsg("Mask Image Shape:")
            print maskshape

            apDisplay.printMsg("resizing mask image with scale:")
            scaleFactorx = float(imgshape[0]) / float(maskshape[0])
            scaleFactory = float(imgshape[1]) / float(maskshape[1])
            scale = scaleFactorx, scaleFactory
            print scale

            img3 = imagefun.scale(img2, scale)
            maskshape = numpy.shape(img3)
            apDisplay.printMsg("Mask Image Shape:")
            print maskshape
            #img3 = numpy.resize(img2, imgshape) # not working
            img3path = self.outfile + "_tmp.jpg"
            scipy.misc.imsave(img3path, img3)

            labeled_regions, clabels = ndimage.label(img3)

            testlog = [False, 0, ""]
            infos = {}

            apDisplay.printMsg("getting mask region info.")
            infos, testlog = apCrud.getLabeledInfo(imgdata['image'], img3,
                                                   labeled_regions,
                                                   range(1, clabels + 1),
                                                   False, infos, testlog)

            apDisplay.printMsg("inserting mask regions to DB.")
            print len(infos)

            area_max = imgsize * .9
            offset = 1
            for l1 in range(0, len(infos)):
                l = l1 + offset
                info = infos[l]
                area = info[0]
                print area
                if (area > 400 and area < area_max):
                    apDisplay.printMsg("saving a region of size:")
                    print area
                    info.append(l)
                    regiondata = apMask.insertMaskRegion(
                        maskrundata, imgdata, info)

        # Insert mask assessment regions. This keeps track of the mask regions that the user wants to reject.
        allregiondata = apMask.getMaskRegions(maskrundata, imgdata)

        for regiondata in allregiondata:
            apMask.insertMaskAssessment(massessrundata, regiondata, True)

#               if self.assess != self.assessold and self.assess is not None:
#                       #imageaccessor run is always named run1
#                       apDatabase.insertImgAssessmentStatus(imgdata, 'run1', self.assess)
        return
	def commitToDatabase(self,imgdata):
		sessiondata   = imgdata['session']
		rundir        = self.params['rundir']
		maskname      = self.params['runname']
		assessname    = self.params['runname']
		bin           = self.params['bin']
		maskdir       = os.path.join(rundir,"masks")
		
		maskrundata,maskparamsdata = apMask.getMaskParamsByRunName(maskname,sessiondata)
		
		if not maskrundata:
			apMask.insertManualMaskRun(sessiondata,rundir,maskname,bin)
			maskrundata,maskparamsdata = apMask.getMaskParamsByRunName(maskname,sessiondata)
			try:
				apParam.createDirectory(maskdir)
			except:
				apDisplay.printWarning('can not create mask directory')
		
		massessrundata,exist = apMask.insertMaskAssessmentRun(sessiondata,maskrundata,assessname)
		
		# The mask file should only exist if the em_hole_finder found a region to mask.
		# If it does not exist, do not insert anything to the DB.
		if ( os.path.exists(self.outfile) ):
			apDisplay.printMsg("Writing results to database: " + time.asctime())
			
			# Set black pixels to white and anything else to 0
			img1 = Image.open(self.outfile)
			img2 = Image.eval(img1, lambda px: 255 if px==0 else 0)

			# make sure the images have the same shape
			imgshape = numpy.asarray(imgdata['image'].shape)
			apDisplay.printMsg("MRC Image Shape:")
			print imgshape
			imgsize = imgshape[0]*imgshape[1]
			apDisplay.printMsg("MRC Image Size:")
			print imgsize

			maskshape = numpy.shape(img2)
			apDisplay.printMsg("Mask Image Shape:")
			print maskshape
			
			apDisplay.printMsg("resizing mask image with scale:")
			scaleFactorx = float(imgshape[0])/float(maskshape[0])
			scaleFactory = float(imgshape[1])/float(maskshape[1])
			scale = scaleFactorx, scaleFactory
			print scale

			img3 = imagefun.scale( img2, scale )
			maskshape = numpy.shape(img3)
			apDisplay.printMsg("Mask Image Shape:")
			print maskshape
			#img3 = numpy.resize(img2, imgshape) # not working
			img3path = self.outfile + "_tmp.jpg"
			scipy.misc.imsave(img3path, img3)			
			
			labeled_regions,clabels = ndimage.label(img3)
				
			testlog = [False,0,""]
			infos={}
			
			apDisplay.printMsg("getting mask region info.")
			infos,testlog = apCrud.getLabeledInfo( imgdata['image'], img3, labeled_regions, range(1,clabels+1), False, infos, testlog)
	
			apDisplay.printMsg("inserting mask regions to DB.")
			print len(infos)
			
			area_max = imgsize*.9
			offset = 1
			for l1 in range(0,len(infos)):
				l = l1 + offset
				info = infos[l]
				area=info[0]
				print area
				if (area > 400 and area < area_max):
					apDisplay.printMsg("saving a region of size:")
					print area
					info.append(l)
					regiondata = apMask.insertMaskRegion( maskrundata, imgdata, info )

		# Insert mask assessment regions. This keeps track of the mask regions that the user wants to reject.
		allregiondata = apMask.getMaskRegions(maskrundata,imgdata)
		
		for regiondata in allregiondata:
			apMask.insertMaskAssessment(massessrundata,regiondata,True)

#		if self.assess != self.assessold and self.assess is not None:
#			#imageaccessor run is always named run1
#			apDatabase.insertImgAssessmentStatus(imgdata, 'run1', self.assess)
		return