def getOverlapPercent(image1, image2, data): #SET IMAGE LIMITS gap = int(image1.shape[0] / 256.0) xm = image1.shape[1] + gap ym = image1.shape[0] + gap a1 = numpy.array([ data['point1'], [-gap, -gap], [-gap, ym], [xm, ym], [xm, -gap], ]) xm = image2.shape[1] + gap ym = image2.shape[0] + gap a2 = numpy.array([ data['point2'], [-gap, -gap], [-gap, ym], [xm, ym], [xm, -gap], ]) #CALCULATE TRANSFORM LIMITS a2mask = a1Toa2Data(a1, data) a1mask = a2Toa1Data(a2, data) #CONVERT NUMPY TO POLYGON LIST a1masklist = [] a2masklist = [] for j in range(4): for i in range(2): item = int(a1mask[j + 1, i]) a1masklist.append(item) item = int(a2mask[j + 1, i]) a2masklist.append(item) #CREATE POLYGON MASK FROM THE LIMITS 1 -> IMAGE 2 mask2 = numpy.zeros(shape=image2.shape, dtype=numpy.bool_) mask2b = apImage.arrayToImage(mask2, normalize=False) mask2b = mask2b.convert("L") draw2 = ImageDraw.Draw(mask2b) draw2.polygon(a2masklist, fill="white") mask2 = apImage.imageToArray(mask2b, dtype=numpy.float32) #CREATE POLYGON MASK FROM THE LIMITS 2 -> IMAGE 1 mask1 = numpy.zeros(shape=image1.shape, dtype=numpy.bool_) mask1b = apImage.arrayToImage(mask1, normalize=False) mask1b = mask1b.convert("L") draw1 = ImageDraw.Draw(mask1b) draw1.polygon(a1masklist, fill="white") mask1 = apImage.imageToArray(mask1b, dtype=numpy.float32) percent1 = ndimage.sum(mask1) / (mask1.shape[0] * mask1.shape[1]) / ndimage.maximum(mask1) percent2 = ndimage.sum(mask2) / (mask2.shape[0] * mask2.shape[1]) / ndimage.maximum(mask2) return max(percent1, percent2), min(percent1, percent2)
def getOverlapPercent(image1, image2, data): #SET IMAGE LIMITS gap = int(image1.shape[0]/256.0) xm = image1.shape[1]+gap ym = image1.shape[0]+gap a1 = numpy.array([ data['point1'], [-gap,-gap], [-gap,ym], [xm,ym], [xm,-gap], ]) xm = image2.shape[1]+gap ym = image2.shape[0]+gap a2 = numpy.array([ data['point2'], [-gap,-gap], [-gap,ym], [xm,ym], [xm,-gap], ]) #CALCULATE TRANSFORM LIMITS a2mask = a1Toa2Data(a1, data) a1mask = a2Toa1Data(a2, data) #CONVERT NUMPY TO POLYGON LIST a1masklist = [] a2masklist = [] for j in range(4): for i in range(2): item = int(a1mask[j+1,i]) a1masklist.append(item) item = int(a2mask[j+1,i]) a2masklist.append(item) #CREATE POLYGON MASK FROM THE LIMITS 1 -> IMAGE 2 mask2 = numpy.zeros(shape=image2.shape, dtype=numpy.bool_) mask2b = apImage.arrayToImage(mask2, normalize=False) mask2b = mask2b.convert("L") draw2 = ImageDraw.Draw(mask2b) draw2.polygon(a2masklist, fill="white") mask2 = apImage.imageToArray(mask2b, dtype=numpy.float32) #CREATE POLYGON MASK FROM THE LIMITS 2 -> IMAGE 1 mask1 = numpy.zeros(shape=image1.shape, dtype=numpy.bool_) mask1b = apImage.arrayToImage(mask1, normalize=False) mask1b = mask1b.convert("L") draw1 = ImageDraw.Draw(mask1b) draw1.polygon(a1masklist, fill="white") mask1 = apImage.imageToArray(mask1b, dtype=numpy.float32) percent1 = ndimage.sum(mask1) / (mask1.shape[0]*mask1.shape[1]) / ndimage.maximum(mask1) percent2 = ndimage.sum(mask2) / (mask2.shape[0]*mask2.shape[1]) / ndimage.maximum(mask2) return max(percent1,percent2), min(percent1,percent2)
def openImageFile(self, filename): self.filename = filename if filename[-4:] == '.spi': array = apImage.spiderToArray(filename, msg=False) return array elif filename[-4:] == '.mrc': array = apImage.mrcToArray(filename, msg=False) return array else: image = Image.open(filename) array = apImage.imageToArray(image, msg=False) array = array.astype(numpy.float32) return array return None
def maskOverlapRegion(image1, image2, data): #image1 = ndimage.median_filter(image1, size=2) #image2 = ndimage.median_filter(image2, size=2) #SET IMAGE LIMITS #################################### gap = int(image1.shape[0] / 256.0) xm = image1.shape[1] + gap ym = image1.shape[0] + gap a1 = numpy.array([ data['point1'], [-gap, -gap], [-gap, ym], [xm, ym], [xm, -gap], ]) xm = image2.shape[1] + gap ym = image2.shape[0] + gap a2 = numpy.array([ data['point2'], [-gap, -gap], [-gap, ym], [xm, ym], [xm, -gap], ]) #CALCULATE TRANSFORM LIMITS #################################### a2mask = a1Toa2Data(a1, data) a1mask = a2Toa1Data(a2, data) #print "a1=",a1 #print "a1mask=",a1mask #print "a2=",a2 #print "a2mask=",a2mask #CONVERT NUMPY TO POLYGON LIST #################################### #maskimg2 = polygon.filledPolygon(img.shape, vert2) a1masklist = [] a2masklist = [] for j in range(4): for i in range(2): item = int(a1mask[j + 1, i]) a1masklist.append(item) item = int(a2mask[j + 1, i]) a2masklist.append(item) #CREATE POLYGON MASK FROM THE LIMITS 1 -> IMAGE 2 #################################### #print "a2mask=",numpy.asarray(a2mask, dtype=numpy.int32) #print "a2masklist=",a2masklist mask2 = numpy.zeros(shape=image2.shape, dtype=numpy.bool_) mask2b = apImage.arrayToImage(mask2, normalize=False) mask2b = mask2b.convert("L") draw2 = ImageDraw.Draw(mask2b) draw2.polygon(a2masklist, fill="white") mask2 = apImage.imageToArray(mask2b, dtype=numpy.float32) #DRAW POLYGON ONTO IMAGE 2 #################################### mean2 = ndimage.mean(image2) std2 = ndimage.standard_deviation(image2) immin2 = mean2 - 2.0 * std2 #med2 = numpy.median(image2.flatten()) #print "MAX=",ndimage.maximum(image2), med2, mean2, std2 #immin2 = ndimage.minimum(image2)+1.0 image2 = (image2 - immin2) * mask2 / 255.0 #mean2 = ndimage.mean(image2) #std2 = ndimage.standard_deviation(image2) #med2 = numpy.median(image2.flatten()) immax2 = min(ndimage.maximum(image2), 8.0 * std2) #print "MAX=",ndimage.maximum(image2), med2, mean2, std2 #immax2 = mean2 + 3.0 * std2 image2 = numpy.where(image2 == 0, immax2, image2) #CREATE POLYGON MASK FROM THE LIMITS 2 -> IMAGE 1 #################################### #print "a1mask=",numpy.asarray(a1mask, dtype=numpy.int32) #print "a1masklist=",a1masklist mask1 = numpy.zeros(shape=image1.shape, dtype=numpy.bool_) mask1b = apImage.arrayToImage(mask1, normalize=False) mask1b = mask1b.convert("L") draw1 = ImageDraw.Draw(mask1b) draw1.polygon(a1masklist, fill="white") mask1 = apImage.imageToArray(mask1b, dtype=numpy.float32) #DRAW POLYGON ONTO IMAGE 1 #################################### mean1 = ndimage.mean(image1) std1 = ndimage.standard_deviation(image1) #med1 = numpy.median(image1.flatten()) immin1 = mean1 - 2.0 * std1 #immin1 = ndimage.minimum(image1)+1.0 #print "MAX=",ndimage.maximum(image1), med1, mean1, std1 image1 = (image1 - immin1) * mask1 / 255.0 #mean1 = ndimage.mean(image1) #std1 = ndimage.standard_deviation(image1) #med1 = numpy.median(image1.flatten()) immax1 = min(ndimage.maximum(image1), 8.0 * std1) #print "MAX=",ndimage.maximum(image1), med1, mean1, std1 #immax1 = mean1 + 3.0 * std1 image1 = numpy.where(image1 == 0, immax1, image1) return (image1, image2)
def maskOverlapRegion(image1, image2, data): #image1 = ndimage.median_filter(image1, size=2) #image2 = ndimage.median_filter(image2, size=2) #SET IMAGE LIMITS #################################### gap = int(image1.shape[0]/256.0) xm = image1.shape[1]+gap ym = image1.shape[0]+gap a1 = numpy.array([ data['point1'], [-gap,-gap], [-gap,ym], [xm,ym], [xm,-gap], ]) xm = image2.shape[1]+gap ym = image2.shape[0]+gap a2 = numpy.array([ data['point2'], [-gap,-gap], [-gap,ym], [xm,ym], [xm,-gap], ]) #CALCULATE TRANSFORM LIMITS #################################### a2mask = a1Toa2Data(a1, data) a1mask = a2Toa1Data(a2, data) #print "a1=",a1 #print "a1mask=",a1mask #print "a2=",a2 #print "a2mask=",a2mask #CONVERT NUMPY TO POLYGON LIST #################################### #maskimg2 = polygon.filledPolygon(img.shape, vert2) a1masklist = [] a2masklist = [] for j in range(4): for i in range(2): item = int(a1mask[j+1,i]) a1masklist.append(item) item = int(a2mask[j+1,i]) a2masklist.append(item) #CREATE POLYGON MASK FROM THE LIMITS 1 -> IMAGE 2 #################################### #print "a2mask=",numpy.asarray(a2mask, dtype=numpy.int32) #print "a2masklist=",a2masklist mask2 = numpy.zeros(shape=image2.shape, dtype=numpy.bool_) mask2b = apImage.arrayToImage(mask2, normalize=False) mask2b = mask2b.convert("L") draw2 = ImageDraw.Draw(mask2b) draw2.polygon(a2masklist, fill="white") mask2 = apImage.imageToArray(mask2b, dtype=numpy.float32) #DRAW POLYGON ONTO IMAGE 2 #################################### mean2 = ndimage.mean(image2) std2 = ndimage.standard_deviation(image2) immin2 = mean2 - 2.0*std2 #med2 = numpy.median(image2.flatten()) #print "MAX=",ndimage.maximum(image2), med2, mean2, std2 #immin2 = ndimage.minimum(image2)+1.0 image2 = (image2-immin2)*mask2/255.0 #mean2 = ndimage.mean(image2) #std2 = ndimage.standard_deviation(image2) #med2 = numpy.median(image2.flatten()) immax2 = min(ndimage.maximum(image2), 8.0*std2) #print "MAX=",ndimage.maximum(image2), med2, mean2, std2 #immax2 = mean2 + 3.0 * std2 image2 = numpy.where(image2==0, immax2, image2) #CREATE POLYGON MASK FROM THE LIMITS 2 -> IMAGE 1 #################################### #print "a1mask=",numpy.asarray(a1mask, dtype=numpy.int32) #print "a1masklist=",a1masklist mask1 = numpy.zeros(shape=image1.shape, dtype=numpy.bool_) mask1b = apImage.arrayToImage(mask1, normalize=False) mask1b = mask1b.convert("L") draw1 = ImageDraw.Draw(mask1b) draw1.polygon(a1masklist, fill="white") mask1 = apImage.imageToArray(mask1b, dtype=numpy.float32) #DRAW POLYGON ONTO IMAGE 1 #################################### mean1 = ndimage.mean(image1) std1 = ndimage.standard_deviation(image1) #med1 = numpy.median(image1.flatten()) immin1 = mean1 - 2.0 * std1 #immin1 = ndimage.minimum(image1)+1.0 #print "MAX=",ndimage.maximum(image1), med1, mean1, std1 image1 = (image1-immin1)*mask1/255.0 #mean1 = ndimage.mean(image1) #std1 = ndimage.standard_deviation(image1) #med1 = numpy.median(image1.flatten()) immax1 = min(ndimage.maximum(image1), 8.0*std1) #print "MAX=",ndimage.maximum(image1), med1, mean1, std1 #immax1 = mean1 + 3.0 * std1 image1 = numpy.where(image1==0, immax1, image1) return (image1, image2)