Example #1
0
def trackEnds(imageID, maskID):
    index = RoiManager.getInstance2().getSelectedIndex()
    inputIMP = WindowManager.getImage(imageID)
    maskIMP = WindowManager.getImage(maskID)
    points1 = inputIMP.getOverlay().get(0).getContainedPoints()[index]
    points2 = inputIMP.getOverlay().get(1).getContainedPoints()[index]
    roi = maskIMP.getOverlay().get(index)
    outerBounds = roi.getBounds()
    impMT, innerBounds = duplicateMaskInRoi(maskIMP, roi, True)
    centroid = impMT.getOverlay().get(0).getContourCentroid()
    nr, endPoint1, endPoint2 = findEndPointsInSkeleton(impMT)
    track1 = trackEnd(impMT, endPoint1, centroid);
    track2 = trackEnd(impMT, endPoint2, centroid);
    impMT.changes=False
    impMT.close()
    newTrack1 = []
    for point in track1:
        newTrack1.append((point.x + outerBounds.x + innerBounds.x - 1,
                         point.y + outerBounds.y + innerBounds.y - 1))
    newTrack2 = []
    for point in track2:
        newTrack2.append((point.x + outerBounds.x + innerBounds.x - 1,
                          point.y + outerBounds.y + innerBounds.y - 1))
    track1X = [point[0] for point in newTrack1]
    track1Y = [point[1] for point in newTrack1]
    roiTrack1 = PolygonRoi(track1X, track1Y, Roi.POLYLINE)
    inputIMP.getOverlay().add(roiTrack1)
    track2X = [point[0] for point in newTrack2]
    track2Y = [point[1] for point in newTrack2]
    roiTrack2 = PolygonRoi(track2X, track2Y, Roi.POLYLINE)
    inputIMP.getOverlay().add(roiTrack2)
    inputIMP.repaintWindow()            
Example #2
0
def findEndPoints(imageID, maskID):
    endPoints1 = []
    endPoints2 = []

    imp = IJ.getImage()
    imp.setSlice(1);

    roiManager = RoiManager.getInstance2()
    rois = roiManager.getRoisAsArray()
    roisToBeRemoved = []
    index = 0
    for roi in rois:
       outerBounds = roi.getBounds()
       impMT, innerBounds = duplicateMaskInRoi(imp, roi)
       nr, endPoint1, endPoint2 = findEndPointsInSkeleton(impMT)
       if (nr==2):
           endPoint1.x = endPoint1.x + outerBounds.x + innerBounds.x - 1
           endPoint1.y = endPoint1.y + outerBounds.y + innerBounds.y - 1
           endPoint2.x = endPoint2.x + outerBounds.x + innerBounds.x - 1
           endPoint2.y = endPoint2.y + outerBounds.y + innerBounds.y - 1
           endPoints1.append(endPoint1)
           endPoints2.append(endPoint2)
       else:
           roisToBeRemoved.append(index)
       impMT.close()
       index = index + 1
    if (len(roisToBeRemoved)>0):
        roiManager.setSelectedIndexes(roisToBeRemoved)
        roiManager.runCommand("Delete")
    roiManager.moveRoisToOverlay(WindowManager.getImage(maskID))
    inputIMP = WindowManager.getImage(imageID)
    inputIMP.setOverlay(PointRoi([seq.x for seq in endPoints1], [seq.y for seq in endPoints1]), Color.magenta, 1, Color.magenta)
    otherPoints = PointRoi([seq.x for seq in endPoints2], [seq.y for seq in endPoints2])
    otherPoints.setStrokeColor(Color.cyan)
    otherPoints.setFillColor(Color.cyan)
    inputIMP.getOverlay().add(otherPoints)
Example #3
0
def process_image(imps, rois, ais_chno, nucleus_chno, bg_roino=3, sample_width=3, method='mean', dilations=3, average=1, threshold=0.1):
	"""Opens a file and applies a Gaussian filter."""
	orig_title = imps[ais_chno-1].getTitle()
	print ",".join([i.getTitle() for i in imps])
	print "Processing", orig_title
	options = IS.MEAN | IS.MEDIAN  # many others
	
	nucleus_imp = imps[nucleus_chno-1].duplicate()
	IJ.run(nucleus_imp, "Median...", "radius=10")
	IJ.setAutoThreshold(nucleus_imp, "Default");
	IJ.run(nucleus_imp, "Make Binary", "")
	IJ.run(nucleus_imp, "Invert", "")
	IJ.run(nucleus_imp, "Options...", "iterations=1 count=1 black do=Nothing");
	IJ.run(nucleus_imp, "Watershed", "");
	IJ.run(nucleus_imp, "Analyze Particles...", "size=20-Infinity clear add");
	rm = RoiManager.getInstance2()
	nuclei = rm.getRoisAsArray()

	ais_imp = imps[ais_chno-1].duplicate()
	print ais_imp.getTitle()
	IJ.run(ais_imp, "8-bit","")
	IJ.run(ais_imp, "Median...", "radius=1")
	bg = 0
	for i in range(bg_roino):
	    bg_roi = rois[i]
	    ais_imp.setRoi(bg_roi)
	    stats = ais_imp.getStatistics(options)
	    bg += stats.mean
	    print "Bg Roi %s, %s: %s" % (bg_roi.getName(), bg_roi, stats)
	background = (int)(bg / bg_roino)
	results = []
	for i in range(bg_roino, len(rois)):
		roiresult = {}
		print i, rois[i].getName()
		mimp = ais_imp.duplicate()
		mimp.setTitle("%s-%s-AIS-Skeleton" % (orig_title, rois[i].getName()))
		# IJ.run(mimp, "Median...", "radius=3")
		
		mimp.setRoi(rois[i])

		# IJ.setAutoThreshold(mimp, "Huang dark")
		IJ.run(mimp, "Auto Local Threshold", "method=Phansalkar radius=15 parameter_1=0 parameter_2=0 white")

		IJ.setBackgroundColor(0,0,0)
		IJ.run(mimp, "Clear Outside", "")

		Prefs.blackBackground = True
		for j in range(dilations):
			IJ.run(mimp, "Dilate", "")
		IJ.run(mimp, "Skeletonize", "")
		#IJ.run(mimp, "Analyze Skeleton (2D/3D)", "prune=none prune_0 calculate show display");
		ais_skeleton, ais_points, points, orthogonals, ais_roi, nucleus_roi = create_skeleton(mimp, '%s-%s-AIS' % (orig_title, rois[i].getName()), nuclei_rois=nuclei, sample_width=sample_width)
		if ais_skeleton is None:
		    print "Skipping -- AIS skeleton segmentation failed for ROI", rois[i].getName()
		    continue
		#images['ais-skeleton-' + rois[i].getName()] = ais_skeleton

		# subtract background
		print "Subtracting background: bg=%d" % background
		IJ.run(ais_imp, "Subtract...", "value=%d" % int(background))

		ais_imp.setRoi(ais_roi)
		ip = Straightener().straightenLine(ais_imp, sample_width)
		straight_imp = ImagePlus('%s-%s-AIS-Straight' % (orig_title, rois[i].getName()), ip)
		straight_imp.setCalibration(imps[ais_chno-1].getCalibration().copy())
		IJ.run(straight_imp, "Green Fire Blue", "")

		roiresult = {
			'roi-name': rois[i].getName(),
			'ais-image': straight_imp,
			'ais-roi': ais_roi,
			'nucleus-roi': nucleus_roi,
		}
		# plot
		if len(points) > 1:
			if method == 'sum':
				threshold *= sample_width
			plot, rt = create_plot(straight_imp, method, average, threshold=threshold)
			roiresult['plot'] = plot
			roiresult['table'] = rt
			
		results.append(roiresult)	
	return results, background