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
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): # 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