Пример #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 createTiltedPeakJpeg(imgdata1, imgdata2, peaktree1, peaktree2, params, procimg1=None, procimg2=None):
	if 'templatelist' in params:
		count =   len(params['templatelist'])
	else: count = 1
	bin =     int(params["bin"])
	diam =    float(params["diam"])
	apix =    float(params["apix"])
	binpixrad  = diam/apix/2.0/float(bin)
	imgname1 = imgdata1['filename']
	imgname2 = imgdata2['filename']

	jpegdir = os.path.join(params['rundir'],"jpgs")
	apParam.createDirectory(jpegdir, warning=False)

	if procimg1 is not None:
		imgarray1 = procimg1
	else:
		imgarray1 = apImage.preProcessImage(imgdata1['image'], bin=bin, planeReg=False, params=params)
	if procimg2 is not None:
		imgarray2 = procimg2
	else:
		imgarray2 = apImage.preProcessImage(imgdata2['image'], bin=bin, planeReg=False, params=params)
	imgarray = numpy.hstack((imgarray1,imgarray2))

	image = apImage.arrayToImage(imgarray)
	image = image.convert("RGB")
	image2 = image.copy()
	draw = ImageDraw.Draw(image2)
	#import pprint
	if len(peaktree1) > 0:
		#pprint.pprint(peaktree1)
		drawPeaks(peaktree1, draw, bin, binpixrad)
	if len(peaktree2) > 0:
		peaktree2adj = []
		for peakdict in peaktree2:
			peakdict2adj = {}
			#pprint.pprint(peakdict)
			peakdict2adj['xcoord'] = peakdict['xcoord'] + imgdata1['image'].shape[1]
			peakdict2adj['ycoord'] = peakdict['ycoord']
			peakdict2adj['peakarea'] = 1
			peakdict2adj['tmplnum'] = 2
			peaktree2adj.append(peakdict2adj.copy())
		#pprint.pprint(peaktree2adj)
		drawPeaks(peaktree2adj, draw, bin, binpixrad)
	image = Image.blend(image, image2, 0.9) 

	outfile1 = os.path.join(jpegdir, imgname1+".prtl.jpg")
	apDisplay.printMsg("writing peak JPEG: "+outfile1)
	image.save(outfile1, "JPEG", quality=95)
	outfile2 = os.path.join(jpegdir, imgname2+".prtl.jpg")
	apDisplay.printMsg("writing peak JPEG: "+outfile2)
	image.save(outfile2, "JPEG", quality=95)

	return
def subCreatePeakJpeg(imgarray, peaktree, pixrad, imgfile, bin=1, msg=True):
	image = apImage.arrayToImage(imgarray)
	image = image.convert("RGB")
	image2 = image.copy()
	draw = ImageDraw.Draw(image2)
	if len(peaktree) > 0:
		drawPeaks(peaktree, draw, bin, pixrad)
	if msg is True:
		apDisplay.printMsg("writing peak JPEG: "+imgfile)
	image = Image.blend(image, image2, 0.9) 
	image.save(imgfile, "JPEG", quality=95)
Пример #5
0
def subCreatePeakJpeg(imgarray, peaktree, pixrad, imgfile, bin=1, msg=True):
    image = apImage.arrayToImage(imgarray)
    image = image.convert("RGB")
    image2 = image.copy()
    draw = ImageDraw.Draw(image2)
    if len(peaktree) > 0:
        drawPeaks(peaktree, draw, bin, pixrad)
    if msg is True:
        apDisplay.printMsg("writing peak JPEG: " + imgfile)
    image = Image.blend(image, image2, 0.9)
    image.save(imgfile, "JPEG", quality=95)
def createTiltedPeakJpeg(imgdata1, imgdata2, peaktree1, peaktree2, params, procimg1=None, procimg2=None):
        if 'templatelist' in params:
                count =   len(params['templatelist'])
        else: count = 1
        bin =     int(params["bin"])
        diam =    float(params["diam"])
        apix =    float(params["apix"])
        binpixrad  = diam/apix/2.0/float(bin)
        imgname1 = imgdata1['filename']
        imgname2 = imgdata2['filename']

        jpegdir = os.path.join(params['rundir'],"jpgs")
        apParam.createDirectory(jpegdir, warning=False)

        if procimg1 is not None:
                imgarray1 = procimg1
        else:
                imgarray1 = apImage.preProcessImage(imgdata1['image'], bin=bin, planeReg=False, params=params)
        if procimg2 is not None:
                imgarray2 = procimg2
        else:
                imgarray2 = apImage.preProcessImage(imgdata2['image'], bin=bin, planeReg=False, params=params)
        imgarray = numpy.hstack((imgarray1,imgarray2))

        image = apImage.arrayToImage(imgarray)
        image = image.convert("RGB")
        image2 = image.copy()
        draw = ImageDraw.Draw(image2)
        #import pprint
        if len(peaktree1) > 0:
                #pprint.pprint(peaktree1)
                drawPeaks(peaktree1, draw, bin, binpixrad)
        if len(peaktree2) > 0:
                peaktree2adj = []
                for peakdict in peaktree2:
                        peakdict2adj = {}
                        #pprint.pprint(peakdict)
                        peakdict2adj['xcoord'] = peakdict['xcoord'] + imgdata1['image'].shape[1]
                        peakdict2adj['ycoord'] = peakdict['ycoord']
                        peakdict2adj['peakarea'] = 1
                        peakdict2adj['tmplnum'] = 2
                        peaktree2adj.append(peakdict2adj.copy())
                #pprint.pprint(peaktree2adj)
                drawPeaks(peaktree2adj, draw, bin, binpixrad)
        image = Image.blend(image, image2, 0.9) 

        outfile1 = os.path.join(jpegdir, imgname1+".prtl.jpg")
        apDisplay.printMsg("writing peak JPEG: "+outfile1)
        image.save(outfile1, "JPEG", quality=95)
        outfile2 = os.path.join(jpegdir, imgname2+".prtl.jpg")
        apDisplay.printMsg("writing peak JPEG: "+outfile2)
        image.save(outfile2, "JPEG", quality=95)

        return
Пример #7
0
def createPeakMapImage(peaktree,
                       ccmap,
                       imgname="peakmap.jpg",
                       pixrad="10.0",
                       bin=1.0,
                       msg=True):
    ### drop all values below zero
    ccmap = numpy.where(ccmap < 0, 0.0, ccmap)

    ### create bar at bottom
    ccshape = (ccmap.shape[0] + 50, ccmap.shape[1])
    bigmap = numpy.resize(ccmap, ccshape)
    bigmap[ccshape[0] + 1:, :] = 0
    minval = ccmap.min()
    maxval = ccmap.max()

    #print minval,maxval
    grad = numpy.linspace(minval, maxval, bigmap.shape[1])
    bigmap[ccmap.shape[0]:bigmap.shape[0], :] = grad
    #print ccmap.shape, "-->",  bigmap.shape

    image = apImage.arrayToImage(bigmap, stdevLimit=8.0)
    image = image.convert("RGB")

    ### color stuff below threshold
    #threshmap = imagefun.threshold(ccmap, threshold)
    #filtmap = numpy.where(threshmap > 0, -3.0, ccmap)
    #imagefilt = apImage.arrayToImage(filtmap)
    #imagefilt = imagefilt.convert("RGB")
    #imagefilt = ImageOps.colorize(imagefilt, "black", "green")
    #image = Image.blend(image, imagefilt, 0.2)

    ### color peaks in map
    image2 = image.copy()
    peakdraw = ImageDraw.Draw(image2)
    drawPeaks(peaktree, peakdraw, bin, pixrad, fill=True)
    ### add text
    image3 = image.copy()
    textdraw = ImageDraw.Draw(image3)
    addMinMaxTextToMap(textdraw, bigmap.shape[1], minval, maxval)
    ### merge
    image = Image.blend(image, image3, 0.9)
    image = Image.blend(image, image2, 0.2)

    if msg is True:
        apDisplay.printMsg("writing summary JPEG: " + imgname)
    image.save(imgname, "JPEG", quality=80)
def createPeakMapImage(peaktree, ccmap, imgname="peakmap.jpg", pixrad="10.0", bin=1.0, msg=True):
	### drop all values below zero
	ccmap = numpy.where(ccmap<0, 0.0, ccmap)

	### create bar at bottom
	ccshape = (ccmap.shape[0]+50, ccmap.shape[1])
	bigmap = numpy.resize(ccmap, ccshape)
	bigmap[ccshape[0]+1:,:] = 0
	minval = ccmap.min()
	maxval = ccmap.max()

	#print minval,maxval
	grad = numpy.linspace(minval, maxval, bigmap.shape[1])
	bigmap[ccmap.shape[0]:bigmap.shape[0],:] = grad
	#print ccmap.shape, "-->",  bigmap.shape

	image = apImage.arrayToImage(bigmap, stdevLimit=8.0)
	image = image.convert("RGB")

	### color stuff below threshold
	#threshmap = imagefun.threshold(ccmap, threshold)
	#filtmap = numpy.where(threshmap > 0, -3.0, ccmap)
	#imagefilt = apImage.arrayToImage(filtmap)
	#imagefilt = imagefilt.convert("RGB")
	#imagefilt = ImageOps.colorize(imagefilt, "black", "green")
	#image = Image.blend(image, imagefilt, 0.2) 

	### color peaks in map
	image2 = image.copy()
	peakdraw = ImageDraw.Draw(image2)
	drawPeaks(peaktree, peakdraw, bin, pixrad, fill=True)
	### add text
	image3 = image.copy()
	textdraw = ImageDraw.Draw(image3)
	addMinMaxTextToMap(textdraw, bigmap.shape[1], minval, maxval)
	### merge
	image = Image.blend(image, image3, 0.9)
	image = Image.blend(image, image2, 0.2)

	if msg is True:
		apDisplay.printMsg("writing summary JPEG: "+imgname)
	image.save(imgname, "JPEG", quality=80)
Пример #9
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)