Ejemplo n.º 1
0
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 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
Ejemplo n.º 5
0
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)