def run(): sel = Display.getSelected() if sel is None or sel.isEmpty(): print "Please select a treeline or areatree!" return t = sel[0] if not isinstance(t, Tree): print "The active selected object is not a treeline or areatree!" return # Print data layer = Display.getFrontLayer() m = Tree.getDeclaredMethod("getNodesToPaint", [Layer]) m.setAccessible(True) ndsp = m.invoke(t, [layer]) print "Nodes to paint:", len(ndsp) print "-->", ndsp fcc = LayerSet.getDeclaredField("n_layers_color_cue") fcc.setAccessible(True) print "color cue value:", fcc.get(layer.getParent()) layers = layer.getParent().getColorCueLayerRange(layer) print "Layers to paint, for color cues:", len(layers) print "-->", layers f = Tree.getDeclaredField("node_layer_map") f.setAccessible(True) ndmap = f.get(t) nds = ndmap.get(layer) print "Nodes in the current layer:", len(nds) print "-->", nds nds2 = [nd for nd in t.getRoot().getSubtreeNodes() if nd.getLayer() == layer] print "from root, there should be:", len(nds2) print "node layer map has:", len(ndmap), "entries" lm = {} for la in ndmap.keySet(): lm[la] = [layer.getParent().getLayers().contains(la), layer.getParent().indexOf(la)] print "layers found:", lm
def setChannelInvisible(project,channel): layerset = project.getRootLayerSet() layers = layerset.getLayers() for l,layer in enumerate(layers): patches = layer.getDisplayables(Patch) for patch in patches: patchName = nameFromPath(patch.getImageFilePath()) if patchName[0:len(channel)] == channel: patch.setVisible(False, True) Display.getFront().updateVisibleTabs()
def initTrakem(path, nbLayers, mipmaps = False): #initialize a project path = cleanLinuxPath(path) ControlWindow.setGUIEnabled(False) project = Project.newFSProject("blank", None, path) project.getLoader().setMipMapsRegeneration(mipmaps) layerset = project.getRootLayerSet() for i in range(nbLayers): # create the layers layerset.getLayer(i, 1, True) project.getLayerTree().updateList(layerset) #update the LayerTree Display.updateLayerScroller(layerset) # update the display slider IJ.log('TrakEM project initialized with ' + str(nbLayers) + ' layers and stored in ' + path + ' (but not saved yet)') return project
def toggleChannel(project,channel): layerset = project.getRootLayerSet() layers = layerset.getLayers() for l,layer in enumerate(layers): patches = layer.getDisplayables(Patch) for patch in patches: # IJ.log('thepatch' + str(patch)) patchName = nameFromPath(patch.getImageFilePath()) # IJ.log(str(patchName[0:len(channel)]) + '=' + str(channel) + ' value' + str(patchName[0:len(channel)] == channel) ) if patchName[0:len(channel)] == channel: # IJ.log(str(patch) + ' toggled') patch.setVisible((not patch.visible), True) Display.getFront().updateVisibleTabs()
def setChannelVisible(project,channel): layerset = project.getRootLayerSet() layers = layerset.getLayers() for l,layer in enumerate(layers): patches = layer.getDisplayables(Patch) for patch in patches: patchName = nameFromPath(patch.getImageFilePath()) if patchName[0:len(channel)] == channel: patch.setVisible(True, True) # else: # patch.setVisible(False, True) try: Display.getFront().updateVisibleTabs() except Exception, e: IJ.log('Did not succeed in updating the visible tabs') pass
def getBranches(tree): tree = Display.getFront().getLayerSet().findById(tree) """ Return a list of remaining branch vertices and lists of lists of Point3f, each inner list representing a branch with Point3d. """ m = tree.asVertices() # map of Node keys vs. Vertex values steps = Centrality.branchWise(m.values(), 2) branches = [] for step in steps: s = [] for branch in step.branches: nds = [vertex.data for vertex in branch] b = [] for nd in asSequence(nds): # transfrom nd to Point3d calibration = tree.getLayerSet().getCalibration() affine = tree.getAffineTransform() fp = array([nd.getX(), nd.getY()], 'f') affine.transform(fp, 0, fp, 0, 1) x = fp[0] * calibration.pixelWidth y = fp[1] * calibration.pixelHeight z = nd.getLayer().getZ() * calibration.pixelWidth tfm = correct([x, y, z]) p = Point3d(tfm[0], tfm[1], tfm[2]) #and transform in new coordinates b.append(p) s.append(b) branches.append([step.remaining_branch_vertices, s]) return branches
def getTheTag(tagString): # find one tag with tagString areatrees = Display.getFront().getLayerSet().getZDisplayables(AreaTree) connectors = Display.getFront().getLayerSet().getZDisplayables(Connector) for tree in itertools.chain(areatrees, connectors): root = tree.getRoot() if root is None: break for node in root.getSubtreeNodes(): tags = node.getTags() if tags is None: continue for tag in tags: if tagString in tag.toString(): return tag return None
def profileDistances(ID, biniter): histo=getDendriticProfiles(ID, biniter) xhisto=histo[0] yhisto=histo[1] zhisto=histo[2] xdistance=[] ydistance=[] zdistance=[] tree = Display.getFront().getLayerSet().findById(ID) coords = Matrix(getNodeCoordinates(tree)) m=coords.getRowDimension() for i in range(0, m): xdist = coords.get(i, 1 ) if xdist > 0 : xdistance.append(xdist) else: xdistance.append((-1)*xdist) for i in range(0, m): ydist = coords.get(i, 0 ) if ydist > 0 : ydistance.append(ydist) else: ydistance.append((-1)*ydist) for i in range(0, m): zdist = sqrt(coords.get(i, 0)**2 + coords.get(i,1)**2) zdistance.append(zdist) return xdistance, ydistance, zdistance
def exportSegmentation(evt=None): display = Display.getFront() canvas = display.getCanvas() numLayer = display.getLayerSet().size(); exportMask(evt) files = [] for l in display.getLayerSet().getLayers(): for p in l.getDisplayables(Patch): files.append(p.getFilePath()) # Create virtual stack 'vs' vs = None for f in files: # if first image... if vs is None: imp = IJ.openImage(f) vs = VirtualStack(imp.width, imp.height, None, "/") vs.addSlice(f) ImagePlus("VSeg", vs).show() IJ.run("Duplicate...", "title=Segmentation duplicate range=1-30"); WindowManager.getImage("VSeg").close() ic = ImageCalculator() ic.run("Multiply stack", WindowManager.getImage("Segmentation"), WindowManager.getImage("Labels")); WindowManager.getImage("Labels").close()
def extract_stack_under_arealist(): # Check that a Display is open display = Display.getFront() if display is None: IJ.log("Open a TrakEM2 Display first!") return # Check that an AreaList is selected and active: ali = display.getActive() if ali is None or not isinstance(ali, AreaList): IJ.log("Please select an AreaList first!") return # Get the range of layers to which ali paints: ls = display.getLayerSet() ifirst = ls.indexOf(ali.getFirstLayer()) ilast = ls.indexOf(ali.getLastLayer()) layers = display.getLayerSet().getLayers().subList(ifirst, ilast + 1) # Create a stack with the dimensions of ali bounds = ali.getBoundingBox() stack = ImageStack(bounds.width, bounds.height) # Using 16-bit. To change to 8-bit, use GRAY8 and ByteProcessor in the two lines below: type = ImagePlus.GRAY16 ref_ip = ShortProcessor(bounds.width, bounds.height) for layer in layers: area = ali.getArea(layer) z = layer.getZ() ip = ref_ip.createProcessor(bounds.width, bounds.height) if area is None: stack.addSlice(str(z), bp) continue # Create a ROI from the area of ali at layer: aff = ali.getAffineTransformCopy() aff.translate(-bounds.x, -bounds.y) roi = ShapeRoi(area.createTransformedArea(aff)) # Create a cropped snapshot of the images at layer under ali: flat = Patch.makeFlatImage(type, layer, bounds, 1.0, layer.getDisplayables(Patch), Color.black) b = roi.getBounds() flat.setRoi(roi) ip.insert(flat.crop(), b.x, b.y) # Clear the outside of ROI (ShapeRoi is a non-rectangular ROI type) bimp = ImagePlus("", ip) bimp.setRoi(roi) ip.setValue(0) ip.setBackgroundValue(0) IJ.run(bimp, "Clear Outside", "") # Accumulate slices stack.addSlice(str(z), ip) imp = ImagePlus("AreaList stack", stack) imp.setCalibration(ls.getCalibrationCopy()) imp.show()
def extract_stack_under_arealist(): # Check that a Display is open display = Display.getFront() if display is None: IJ.log("Open a TrakEM2 Display first!") return # Check that an AreaList is selected and active: ali = display.getActive() if ali is None or not isinstance(ali, AreaList): IJ.log("Please select an AreaList first!") return # Get the range of layers to which ali paints: ls = display.getLayerSet() ifirst = ls.indexOf(ali.getFirstLayer()) ilast = ls.indexOf(ali.getLastLayer()) layers = display.getLayerSet().getLayers().subList(ifirst, ilast +1) # Create a stack with the dimensions of ali bounds = ali.getBoundingBox() stack = ImageStack(bounds.width, bounds.height) # Using 16-bit. To change to 8-bit, use GRAY8 and ByteProcessor in the two lines below: type = ImagePlus.GRAY16 ref_ip = ShortProcessor(bounds.width, bounds.height) for layer in layers: area = ali.getArea(layer) z = layer.getZ() ip = ref_ip.createProcessor(bounds.width, bounds.height) if area is None: stack.addSlice(str(z), bp) continue # Create a ROI from the area of ali at layer: aff = ali.getAffineTransformCopy() aff.translate(-bounds.x, -bounds.y) roi = ShapeRoi(area.createTransformedArea(aff)) # Create a cropped snapshot of the images at layer under ali: flat = Patch.makeFlatImage(type, layer, bounds, 1.0, layer.getDisplayables(Patch), Color.black) b = roi.getBounds() flat.setRoi(roi) ip.insert(flat.crop(), b.x, b.y) # Clear the outside of ROI (ShapeRoi is a non-rectangular ROI type) bimp = ImagePlus("", ip) bimp.setRoi(roi) ip.setValue(0) ip.setBackgroundValue(0) IJ.run(bimp, "Clear Outside", "") # Accumulate slices stack.addSlice(str(z), ip) imp = ImagePlus("AreaList stack", stack) imp.setCalibration(ls.getCalibrationCopy()) imp.show()
def run(): front = Display.getFront() if front is None: print "No displays open!" return sel = front.getSelection().getSelected(Profile) if sel.isEmpty(): print "No profiles selected!" return svg = export(sel.get(0)) tw = TextWindow("Profile as SVG", svg, 500, 500) GUI.center(tw)
def run(): if 0 == Display.getSelected().size(): print "Nothing selected!" return tree = Display.getSelected()[0] if not isinstance(tree, AreaTree): print "Not an AreaTree!" return cal = tree.getLayerSet().getCalibration() for nd in tree.getRoot().getSubtreeNodes(): area = nd.getData() if area is None: continue pols = M.getPolygons(area) if len(pols) > 1: report(nd, pols, tree.getAffineTransform(), cal) if remove_all_but_largest: removeAllButLargest(area, pols) elif len(pols) == 1: print "Found a single polygon with bounds: "+str(pols[0].getBounds()) Display.repaint()
def importMask(evt=None): display = Display.getFront() # Obtain an image stack #imp = IJ.getImage() imp = WindowManager.getImage("Labels") layerset = display.getLayerSet() p = layerset.getProject() ali = AreaList(p, "", 0, 0) layerset.add(ali) p.getProjectTree().insertSegmentations([ali]) # Obtain the image stack stack = imp.getImageStack() # Iterate every slice of the stack for i in range(1, imp.getNSlices() + 1): ip = stack.getProcessor(i) # 1-based # Extract all areas (except background) into a map of value vs. java.awt.geom.Area m = AreaUtils.extractAreas(ip) # Report progress if len(m) > 0: IJ.log(str(i) + ":" + str(len(m))) # Get the Layer instance at the corresponding index layer = layerset.getLayers().get(i-1) # 0-based # Add the first Area instance to the AreaList at the proper Layer if ( m.values().iterator().hasNext() ): ali.addArea(layer.getId(), m.values().iterator().next()) # Change the color of the AreaList ali.setColor(Color.red) ali.adjustProperties() # Ensure bounds are as constrained as possible ali.calculateBoundingBox(None) # Repaint Display.repaint()
def getNodes(tree): """Return a list of remaining vertices and lists of lists of all nodes representing a branch""" tree = Display.getFront().getLayerSet().findById(tree) m = tree.asVertices() # map of Node keys vs. Vertex values steps = Centrality.branchWise(m.values(), 2) branches = [] saveNodes = [] for step in steps: for branch in step.branches: b = [] branchNodes = [] for vertex in branch: nd = vertex.data branchNodes.append(nd) saveNodes.append([step.remaining_branch_vertices, branchNodes]) return saveNodes
def exportMask(evt=None): display = Display.getFront() arealists = display.getSelection().getSelected(AreaList) canvas = display.getCanvas() numLayer = display.getLayerSet().size(); if arealists.isEmpty(): IJ.log("No arealists selected -- I just take the FIRST ONE!!") #IJ.showMessage("No arealists selected -- select one!") zDispList = display.getLayerSet().getDisplayableList() if len(zDispList) > 0: arealists = zDispList else: IJ.log("Project does not contain any AreaLists!") IJ.showMessage("Project does not contain any AreaLists!") return AreaList.exportAsLabels(arealists, canvas.getFakeImagePlus().getRoi(), 1.0, 0, numLayer-1, False, False, False);
def openStack(evt=None): display = Display.getFront() canvas = display.getCanvas() numLayer = display.getLayerSet().size(); files = [] for l in display.getLayerSet().getLayers(): for p in l.getDisplayables(Patch): files.append(p.getFilePath()) # Create virtual stack 'vs' vs = None for f in files: # if first image... if vs is None: imp = IJ.openImage(f) vs = VirtualStack(imp.width, imp.height, None, "/") vs.addSlice(f) layerset = display.getLayerSet() p = layerset.getProject() ImagePlus("VSeg", vs).show() IJ.run("Duplicate...", "title=" + p.getTitle() + " duplicate range=1-30"); WindowManager.getImage("VSeg").close() return p.getTitle()
from ini.trakem2 import Project from ini.trakem2.display import AreaList, Display, AreaTree, Connector, Coordinate from ini.trakem2.display.Tree import MeasurePathDistance from fiji.geom import AreaCalculations import csv from jarray import array from java.awt.geom import Area from java.awt import Rectangle import re project = Project.getProjects().get(0) projectRoot = project.getRootProjectThing() display = Display.getFront(project) neurites = projectRoot.findChildrenOfTypeR("neurite") notDrawnCo = [] notDrawn = [['layer', 'neurite', 'node']] for neurite in neurites: if re.match(r"^apl", neurite.getTitle()) is None: continue areatrees = neurite.findChildrenOfTypeR("areatree") for areatree in areatrees: areatree = areatree.getObject() root = areatree.getRoot() if root is None: continue nEmpty = 0 nNodes = 0
from __future__ import with_statement from ini.trakem2.display import Display from ini.trakem2.utils import Utils from java.io import File import os pps = "/home/albert/Desktop/0111-8/scripts/bzip2-decompress_preprocessor.py" loader = Display.getFront().getProject().getLoader() for layer in Display.getFront().getLayerSet().getLayers(): for patch in layer.getDisplayables(): loader.setPreprocessorScriptPathSilently(patch, pps)
from java.lang.reflect import Field from ini.trakem2.persistence import FSLoader from ini.trakem2.display import Display loader = Display.getFront().getProject().getLoader() f = FSLoader.getDeclaredField("cannot_regenerate") f.setAccessible(True) f.get(loader).clear()
from ini.trakem2.display import Display, Patch unique = set() for patch in Display.getFront().getLayer().getDisplayables(Patch): path = patch.getImageFilePath() if path in unique: patch.remove(False) else: unique.add(path) Display.repaint()
# Create a snapshot of the images under the area: imp = loader.getFlatImage(layer, box, 1, 0xffffffff, ImagePlus.GRAY8, Patch, False) # Set the area as a roi imp.setRoi(ShapeRoi(area)) # Perform measurements (uncalibrated) # (To get the calibration, call layerset.getCalibrationCopy()) stats = ByteStatistics(imp.getProcessor(), moptions, calibration) table.incrementCounter() table.addLabel("Name", ali.getTitle()) table.addValue(0, ali.getId()) table.addValue(1, index) # the layer index table.addValue(2, layer.getZ()) table.addValue(3, stats.area) table.addValue(4, stats.mean) # Update and show the table table.show("AreaLists") # Get the front display, if any: display = Display.getFront() if display is not None: # Obtain the LayerSet of the current Display canvas: layerset = Display.getFront().getLayer().getParent() # Measure! measureCustom(display.getFront().getLayer().getParent()) else: IJ.showMessage("Open a TrakEM2 display first!")
# Translate any selected Displayable objects dx = -90 dy = 129 from ini.trakem2.display import Display # For any selected objected for displ in Display.getFront().getSelected(): displ.getAffineTransform().translate(dx, dy) Display.repaint()
from ini.trakem2 import Project from ini.trakem2.display import Display projects = Project.getProjects() original = projects[0] new_project = projects[1] patches = None layer2 = None for display in Display.getDisplays(): if display.getProject() == original: patches = display.getSelection().getSelected() elif display.getProject() == new_project: layer2 = display.getLayer() for patch in patches: layer2.add(patch.clone(new_project, True))
# Color the branches of a tree by their centrality from ini.trakem2.display import Display from ini.trakem2.analysis import Centrality from java.awt import Color tree = Display.getSelected()[0] vsm = tree.asVertices() bwc = Centrality.branchWise(vsm.values(), 2) print "Number of nodes:", len(vsm) def getColor(val, highest): red = 1 - val / float(highest) return Color(red , red, 1 - red) highest = 0 for es in bwc: highest = max(highest, es.remaining_branch_vertices) i = 0 for es in bwc: vs = [] for branch in es.branches: for v in branch: vs.append(v) print i, es.remaining_branch_vertices, len(vs) i += 1 color = getColor(es.remaining_branch_vertices, highest) for v in vs:
# <graph> # <edge id="[the connector id]" origin="[the origin Treeline id]" target="[the target Treeline id]" /> # ... # </graph> # # The XML opens in a TextWindow # # While at it, will generate a .sif file for importing the networt into cytoscape # as well as a list of id vs name. from ini.trakem2.display import Display, Connector, Treeline from java.lang import StringBuilder from ij.text import TextWindow layerset = Display.getFront().getLayerSet() xml = StringBuilder("<graph>\n") sif = StringBuilder() names = StringBuilder() indent = ' ' type = Treeline alltargets = set() for con in layerset.getZDisplayables(Connector): print "Processing Connector", con origins = con.getOrigins(type) if origins.isEmpty(): print "Connector without origins:", con continue
from ini.trakem2.display import Display, Treeline from java.lang import Math from jarray import array def longJumps(t, mindist): for nd in t.getRoot().getSubtreeNodes(): if nd.parent is None: continue d = Math.sqrt(Math.pow(nd.x - nd.parent.x, 2) + Math.pow(nd.y - nd.parent.y, 2)) if d > mindist: print nd.x, nd.y p = array([nd.x, nd.y], 'f') aff = t.affineTransform aff.transform(p, 0, p, 0, 1) cal = t.layerSet.getCalibration() print "Off:", p[0] * cal.pixelWidth, p[1] * cal.pixelHeight, (nd.layer.getParent().indexOf(nd.layer) + 1) for t in Display.getFront().getLayerSet().getZDisplayables(Treeline): print t longJumps(t, 500)
from mpicbg.trakem2.transform import ExportUnsignedShort from mpicbg.ij.util import Filter from net.imglib2.img import ImagePlusAdapter from net.imglib2.type.numeric.integer import UnsignedShortType from net.imglib2.type.numeric.real import FloatType import os import time display = Display.getFront() shape = (3, 3) subscriptToIndex = [None] * (shape[0]*shape[1]) helperIndex = 0 for x in xrange(shape[0]): for y in xrange(shape[1]): subscriptToIndex[helperIndex] = (x, y) helperIndex += 1 # use coordinate transform folder to specify output folder ctsFolder = display.project.getLoader().getCoordinateTransformsFolder().rstrip('/') lastFolderIdx = len(ctsFolder.split('/')) - 1 itsFolder = '/'.join(ctsFolder.split('/')[:-1]) + '/trakem2.its/'
affines = {} for line in fobj: affineline = line.split() affines[affineline[0]] = [affineline[1],affineline[2],affineline[3],affineline[4],affineline[5],affineline[6]] fobj.close() # ... # ... # Apply the affine to every Patch from ini.trakem2.display import Display, Patch from java.awt.geom import AffineTransform for layer in Display.getFront().getLayerSet().getLayers(): for patch in layer.getDisplayables(Patch): filepath = patch.getImageFilePath() print ("filepath\n") affine = affines.get(filepath, None) #filepath statt affines eingefuegt if affine: for index in range (0,6): affine[index] = float(affine[index]) print ("affine[index]", index, affine[index]) patch.setAffineTransform(AffineTransform(affine[0], affine[1],affine[2], affine[3], (affine[4]), affine[5])) else: print "No affine for filepath:", filepath print ("done\n")
for tag in tags: if string in tag.toString(): return True return False def unsetTagWithString(node, string): tags = node.getTags() if tags is None: return for tag in tags: if string in tag.toString(): node.removeTag(tag) theTag = Tag('EC-link', KeyEvent.VK_C) connectors = Display.getFront().getLayerSet().getZDisplayables(Connector) for connector in connectors: root = connector.getRoot() if root is None: continue if not containsTag(root, 'EC-link'): continue # wrong tag position, move to child node for childnode in root.getChildrenNodes(): if not containsTag(childnode, 'EC-link'): childnode.addTag(theTag) print 'set new tag on', connector.getId() unsetTagWithString(root, 'EC-link')
print patch.getTitle() if cp.containsKey(patch.getTitle()): patch_title = patch.getTitle()[:-4] print patch.getId(), patch_title print patch.hasCoordinateTransform() target_patch = cp.get(patch.getTitle()) target_patch.setCoordinateTransform(patch.getCoordinateTransform()) target_patch.getAffineTransform().setTransform(patch.getAffineTransform()) target_patch.updateInDatabase("transform") target_patch.updateBucket() # tform_file = folder + patch_title + '_original.xml' # tform_xml = open(tform_file, 'w') # tform_xml.write(patch.getCoordinateTransform().toXML('\t')) # tform_xml.close() # tform_file = folder + patch_title + '_target.xml' # tform_xml = open(tform_file, 'w') # tform_xml.write(target_patch.getCoordinateTransform().toXML('\t')) # tform_xml.close() print patch.getAffineTransform() print target_patch.getAffineTransform() target_layer.moveBottom(target_patch) IJ.showProgress(i, original_patches.size()) Display.repaint()
def timeIt(fn, n_iterations=10): elapsed_times = [] for i in range(n_iterations): t0 = System.nanoTime() fn() t1 = System.nanoTime() elapsed_times.append(t1 - t0) smallest = min(elapsed_times) largest = max(elapsed_times) average = sum(elapsed_times) / float(n_iterations) print "Elapsed time: min", smallest, "max", largest, "average", average return elapsed_time layer = Display.getFront().getLayer() patch = layer.getDisplayables().get(0) print patch pai = patch.createTransformedImage() print pai print patch.hasCoordinateTransform() print patch.getImageProcessor() first_level_mipmaps_saved = 0 def testCascade(): global patch, pai, first_level_mipmaps_saved print pai b = DownsamplerMipMaps.create( patch, patch.getType(), pai.target,
from __future__ import with_statement from ini.trakem2.display import Display paths = [] for layer in Display.getFront().getLayerSet().getLayers(): for patch in layer.getDisplayables(): if patch.isVisible(): paths.append(patch.getImageFilePath()) print "Number of image paths:", len(paths) with open("/home/albert/shares/cardona_nearline/Albert/0111-8_whole_L1_CNS/visible_image_filepaths.txt", "w") as f: f.write("\n".join(paths))
def getDendriticProfiles(ID, biniter): tree = Display.getFront().getLayerSet().findById(ID) coords = Matrix(getNodeCoordinates(tree)) # Define axis vectors and origin xnorm = Matrix([[1, 0, 0]]) ynorm = Matrix([[0, 1, 0]]) znorm = Matrix([[0, 0, 1]]) center = Matrix([[0, 0, 0]]) # Project nodes onto axis dpx = [] dpy = [] dpz = [] m = coords.getRowDimension() for i in range(0, m): xstore = Matrix([coords.getRow(i)]) * xnorm.transpose() ystore = Matrix([coords.getRow(i)]) * ynorm.transpose() zstore = Matrix([coords.getRow(i)]) * znorm.transpose() dpx.append(xstore.getRow(0)) dpy.append(ystore.getRow(0)) dpz.append(zstore.getRow(0)) # Count number of nodes which fall in defined interval of pca projection xhistovector = [] yhistovector = [] zhistovector = [] # get it back in array form (get rid of list in list of Jarray) dpx = [x[0] for x in dpx] dpy = [x[0] for x in dpy] dpz = [x[0] for x in dpz] # Initialize interval size and fix iterations to a specific number xbinleft = -34600.0 ybinleft = -24200.0 zbinleft = 0 # --------PARAMETER FOR MACHINE LEARNING----- iterations = biniter # ------------------------------------------- xlength = int((35600.0 + 34600.0) / iterations + 0.5) ylength = int((21300.0 + 24200.0) / iterations + 0.5) zlength = int((22500) / iterations + 0.5) xbinright = xbinleft + xlength ybinright = ybinleft + ylength zbinright = zbinleft + zlength # Count elements in bins xaxis = [] # Count lengths in bins xdist = [] ydist = [] zdist = [] for i in range(0, iterations): counter = 0 xdiff = 0 for i in range(0, len(dpx)): if dpx[i] <= xbinright and dpx[i] >= xbinleft: counter += 1 xdiff += sqrt(dpy[i] ** 2 + dpz[i] ** 2) # sqrt(dpy[i]**2) xdist is yvalue if counter != 0: xdiff /= counter xdist.append(xdiff) xhistovector.append(counter) xaxis.append(xbinleft) xbinleft += xlength xbinright += xlength yaxis = [] for i in range(0, iterations): counter = 0 ydiff = 0 for i in range(0, len(dpy)): if dpy[i] <= ybinright and dpy[i] >= ybinleft: counter += 1 ydiff += sqrt(dpx[i] ** 2 + dpz[i] ** 2) if counter != 0: ydiff /= counter ydist.append(ydiff) yhistovector.append(counter) yaxis.append(ybinleft) ybinleft += ylength ybinright += ylength zaxis = [] for i in range(0, iterations): counter = 0 zdiff = 0 for i in range(0, len(dpz)): if dpz[i] <= zbinright and dpz[i] >= zbinleft: counter += 1 zdiff += sqrt(dpx[i] ** 2 + dpy[i] ** 2) if counter != 0: zdiff /= counter zdist.append(zdiff) zhistovector.append(counter) zaxis.append(zbinleft) zbinleft += zlength zbinright += zlength # print xdist # print ydist # print zdist """ #Normalize for i in range(0, iterations): xhistovector[i]/=float(xlength) yhistovector[i]/=float(ylength) zhistovector[i]/=float(zlength) """ return xhistovector, yhistovector, zhistovector, xdist, ydist, zdist
ControlWindow.setGUIEnabled(False) # 1. Create a TrakEM2 project project = Project.newFSProject("blank", None, out_folder) loader = project.getLoader() loader.setMipMapsRegeneration(True) # disable mipmaps layerset = project.getRootLayerSet() # 2. Create 10 layers (or as many as you need) for i in range(num_sections): layerset.getLayer(i, 1, True) layerset.setDimensions(im_width, im_height, LayerSet.NORTHWEST) # ... and update the LayerTree: project.getLayerTree().updateList(layerset) # ... and the display slider Display.updateLayerScroller(layerset) filenames = sorted(os.listdir(storm_merged_folder)) filenames1 = sorted(os.listdir(conv_561_folder)) filenames2 = sorted(os.listdir(conv_merged_folder)) filenames3 = sorted(os.listdir(conv_align_folder)) #3 Load in images for i, layer in enumerate(layerset.getLayers()): #i = i +150 #use this to start in the middle of a dataset filepath = os.path.join(storm_merged_folder, filenames[i]) patch = Patch.createPatch(project, filepath) # patch.updateMipMaps() layer.add(patch, False) # filepath = os.path.join(conv_merged_folder, filenames2[i]) patch = Patch.createPatch(project, filepath) # patch.updateMipMaps()
# copy original images for patches in layer from ini.trakem2.display import Display, Patch from shutil import copy from os import path storage = "/mnt/ssd-512/0111-8/debug/original-images/" for patch in Display.getFrontLayer().getDisplayables(Patch): filepath = patch.getImageFilePath() print filepath copy(filepath, storage)
from mpicbg.trakem2.transform import ExportUnsignedByte from ini.trakem2 import Project from ini.trakem2.display import Display from ij import ImagePlus project = Project.getProjects()[0] layers = project.getRootLayerSet().getLayers() bounds = Display.getFront().getRoi().getBounds() pair = ExportUnsignedByte.makeFlatImageFromMipMaps(layers[1].getDisplayables(), bounds, 0, 1.0) bp = pair.a mask = pair.b ImagePlus("bp", bp).show() ImagePlus("mask", mask).show()
for nd in root.getSubtreeNodes(): fp = array([nd.getX(), nd.getY()], 'f') affine.transform(fp, 0, fp, 0, 1) x = fp[0] * calibration.pixelWidth y = fp[1] * calibration.pixelHeight z = nd.getLayer().getZ() * calibration.pixelWidth # a TrakEM2 oddity # data may be a radius or a java.awt.geom.Area coords.append( correct([x, y, z]) ) #print coords[len(coords)-1] return coords #---------Select tree----------------- #tree = Display.getFront().getActive() ID = 74329 tree = Display.getFront().getLayerSet().findById(ID) #------------------------------------- #Calculate the center of mass center = Matrix( [[0,0,0]] ) coords = Matrix(getNodeCoordinates(tree)) m=coords.getRowDimension() for i in range(0, coords.getRowDimension()): center += Matrix([coords.getRow( i )]) center /= float(m) print center """
def pca(ID, biniter): tree = Display.getFront().getLayerSet().findById(ID) #Calculate the center of mass center = Matrix( [[0,0,0]] ) coords = Matrix(getNodeCoordinates(tree)) m=coords.getRowDimension() for i in range(0, coords.getRowDimension()): center += Matrix([coords.getRow( i )]) center /= float(m) #print center """ x, y, z = 0, 0, 0 nc = getNodeCoordinates(tree) for c in nc: x += c[0] y += c[1] z += c[2] print "center:", x/len(nc), y/len(nc), z/len(nc) """ #Define covvariance matrix cova = Matrix([[0,0,0],[0,0,0],[0,0,0]]) diff= Matrix ( [[0,0,0]]) for i in range(0, m): diff = Matrix([coords.getRow( i )]) - center cova += diff.transpose() * diff cova /= float(m) #Evaluedecomposition evaluedecomp = cova.eig() evalues = evaluedecomp.getRealEigenvalues() evectors = evaluedecomp.getV() # is a Matrix instance #Find maximum Eigenvector for maximal Eigenvalue maxevaluepos = -1 maxevalue = 0 for i in range(0, len(evalues)): if evalues[i] > maxevalue or maxevaluepos==-1: maxevalue=evalues[i] maxevaluepos=i maxevector=evectors.getColumn(maxevaluepos) #HAVE TO GET VALUES OF COLUMN of evector matrix i NOT ROW #--------------------TEST if Eigenvaluedecomposition is correct----------- #vectormatrix=Matrix([evectors.getColumn(maxevaluepos)]) #test=cova * vectormatrix.transpose() #test2=vectormatrix*maxevalue #print test #print test2 #------------------------------------------------------------------------- #Define a vector over the point cloud and count points in defined interval #Normalize vector length=sqrt(maxevector[0]**2 + maxevector[1]**2 + maxevector[2]**2) normvector = map(lambda x: x / length, maxevector) normvectormatrix = Matrix([normvector]) pca=[] m=coords.getRowDimension() for i in range(0, m): pcastore = (Matrix([coords.getRow( i )]) - center ) * normvectormatrix.transpose() pca.append(pcastore.getRow(0)) #Count number of nodes which fall in defined interval of pca projection -> has to be fixed globally when to compare PCAs! counter = 0 histovector = [] pca=[ x[0] for x in pca] #get it back in array form (get rid of list in list) binleft = -12500 #binleft = min(pca) iterations = biniter length = int(25000/iterations + 0.5) #int((max(pca)-min(pca))/iterations + 0.5) binright = binleft + length for i in range(0,iterations): for i in range(0, len(pca)): if pca[i] <= binright and pca[i] >= binleft: counter += 1 histovector.append(counter) counter=0 binleft+=length binright+=length #print "The histogram vector is:", histovector return histovector
def getDendriticProfiles(ID): tree = Display.getFront().getLayerSet().findById(ID) coords = Matrix(getNodeCoordinates(tree)) #Define axis vectors and origin xnorm = Matrix([[1,0,0]]) ynorm = Matrix([[0,1,0]]) znorm = Matrix([[0,0,1]]) center= Matrix([[0,0,0]]) #Project nodes onto axis dpx=[] dpy=[] dpz=[] m=coords.getRowDimension() for i in range(0, m): xstore = Matrix([coords.getRow( i )]) * xnorm.transpose() ystore = Matrix([coords.getRow( i )]) * ynorm.transpose() zstore = Matrix([coords.getRow( i )]) * znorm.transpose() dpx.append(xstore.getRow(0)) dpy.append(ystore.getRow(0)) dpz.append(zstore.getRow(0)) #Count number of nodes which fall in defined interval of pca projection counter = 0 xhistovector = [] yhistovector = [] zhistovector = [] #get it back in array form (get rid of list in list of Jarray) dpx=[ x[0] for x in dpx] dpy=[ x[0] for x in dpy] dpz=[ x[0] for x in dpz] #Initialize interval size and fix iterations to a specific number xbinleft = min(dpx) ybinleft = min(dpy) zbinleft = min(dpz) #-------PARAMETER FOR MACHINE LEARNING-------------- iterations =100 #--------------------------------------------------- xlength = int((max(dpx)-min(dpx))/iterations + 0.5) ylength = int((max(dpy)-min(dpy))/iterations + 0.5) zlength = int((max(dpz)-min(dpz))/iterations + 0.5) xbinright = xbinleft + xlength ybinright = ybinleft + ylength zbinright = zbinleft + zlength #Count elements in bins xaxis=[] for i in range(0,iterations): for i in range(0, len(dpx)): if dpx[i] <= xbinright and dpx[i] >= xbinleft: counter += 1 xhistovector.append(counter) counter=0 xbinleft += xlength xbinright += xlength xaxis.append(xbinleft) yaxis=[] for i in range(0,iterations): for i in range(0, len(dpy)): if dpy[i] <= ybinright and dpy[i] >= ybinleft: counter += 1 yhistovector.append(ylength) counter=0 ybinleft += ylength ybinright += ylength yaxis.append(ybinleft) zaxis=[] for i in range(0,iterations): for i in range(0, len(dpz)): if dpz[i] <= zbinright and dpz[i] >= zbinleft: counter += 1 zhistovector.append(counter) counter=0 zbinleft += zlength zbinright += zlength zaxis.append(zbinleft) #Normalize bin-count by division through length for i in range(0, iterations): xhistovector[i]/=float(xlength) yhistovector[i]/=float(ylength) zhistovector[i]/=float(zlength) return xhistovector, yhistovector, zhistovector
# For output a list of tagged nodes in currently active TrakEM2 project # Change output filename at the bottom from ini.trakem2.display import AreaList, Display, AreaTree, Connector import csv header = [ 'type', 'parentId', 'nodeDegree', 'layer', 'x', 'y', 'z', 'parentName', 'shortMeaningfulTitle', 'tag' ] foundtags = [header] areatrees = Display.getFront().getLayerSet().getZDisplayables(AreaTree) for areatree in areatrees: root = areatree.getRoot() if root is None: continue for node in root.getSubtreeNodes(): tags = node.getTags() if tags is None: continue for tag in tags: foundtags.append([ 'areatrea', areatree.getId(), node.computeDegree(), node.getLayer().getId(), node.getX(), node.getY(),
if tags is None: return False for tag in tags: if string in tag.toString(): return True return False def unsetTagWithString(node, string): tags = node.getTags() if tags is None: return for tag in tags: if string in tag.toString(): node.removeTag(tag) theTag = Tag('EC-link', KeyEvent.VK_C) connectors = Display.getFront().getLayerSet().getZDisplayables(Connector) for connector in connectors: root = connector.getRoot() if root is None: continue if not containsTag(root, 'EC-link'): continue # wrong tag position, move to child node for childnode in root.getChildrenNodes(): if not containsTag(childnode, 'EC-link'): childnode.addTag(theTag) print 'set new tag on', connector.getId() unsetTagWithString(root, 'EC-link')
# For output a list of tagged nodes in currently active TrakEM2 project # Change output filename at the bottom from ini.trakem2.display import AreaList, Display, AreaTree, Connector import csv header = ["type", "parentId", "nodeDegree", "layer", "x", "y", "z", "parentName", "shortMeaningfulTitle", "tag"] foundtags = [header] areatrees = Display.getFront().getLayerSet().getZDisplayables(AreaTree) for areatree in areatrees: root = areatree.getRoot() if root is None: continue for node in root.getSubtreeNodes(): tags = node.getTags() if tags is None: continue for tag in tags: foundtags.append( [ "areatrea", areatree.getId(), node.computeDegree(), node.getLayer().getId(), node.getX(), node.getY(), node.getLayer(), areatree.getTitle(),
for k in range(1, nROIsCount + 1): strFn = strDir + "N" + str(k) + "_reg.tif" print("Processing file: " + strFn) imp = IJ.openImage(strFn) ali = AreaList(p, "N" + str(k), 0, 0) layerset.add(ali) pt = ProjectThing(TempThing, p, ali) p_tree_r.addChild(pt) stack = imp.getImageStack() for i in range(1, imp.getNSlices() + 1): ip = stack.getProcessor(i) # 1-based m = AreaUtils.extractAreas(ip) # Report progress #print i, ":", len(m) # Get the Layer instance at the corresponding index layer = layerset.getLayers().get(i - 1) # 0-based if len(m) > 0: for j in range(1, len(m) + 1): ali.addArea(layer.getId(), m.values()[j - 1]) ali.setColor(CL[k - 1]) ali.calculateBoundingBox(None) imp.close() p.getProjectTree().rebuild(p_tree_r) Display.repaint()
affine = tree.getAffineTransform() coords = [] for nd in root.getSubtreeNodes(): fp = array([nd.getX(), nd.getY()], 'f') affine.transform(fp, 0, fp, 0, 1) x = fp[0] * calibration.pixelWidth y = fp[1] * calibration.pixelHeight z = nd.getLayer().getZ() * calibration.pixelWidth # a TrakEM2 oddity # data may be a radius or a java.awt.geom.Area coords.append(Matrix([[x, y, z]])) return coords tree = Display.getFront().getActive() m = Matrix( [ [1, 2, 3], [4, 5, 6], [ 7, 8, 10 ] ] ) print "m is:", m m= m.append( [1,1,1] ) print m #Calculate the center of mass center = Matrix([[0,0,0]]) coords = getNodeCoordinates(tree) for coord in coords: center += coord center /= float(len(coords)) print center #Define covvariance matrix
def sphereCount(ID, biniter): #find center of mass tree = Display.getFront().getLayerSet().findById(ID) coords = Matrix(getNodeCoordinates(tree)) center = Matrix( [[0,0,0]] ) m=coords.getRowDimension() for i in range(0, m): center += Matrix([coords.getRow( i )]) center /= float(m) #calculate all distances of all points to center of mass and put them in a list xdist=[] ydist=[] zdist=[] for i in range(0, m): xdiff=[] if coords.get(i,0) > center.get(0,0): xdiff = coords.get(i,0) - center.get(0,0) else: xdiff = center.get(0,0) - coords.get(i,0) xdist.append(xdiff) for i in range(0, m): ydiff=[] if coords.get(i,1) > center.get(0,1): ydiff = coords.get(i,1) - center.get(0,1) else: ydiff = center.get(0,1) - coords.get(i,1) ydist.append(ydiff) for i in range(0, m): zdiff=[] if coords.get(i,2) > center.get(0,2): zdiff = coords.get(i,2) - center.get(0,2) else: zdiff = center.get(0,2) - coords.get(i,2) zdist.append(zdiff) nodeDist=[] dist=[] for i in range(0, m): dist=sqrt(xdist[i]**2 + ydist[i]**2 + zdist[i]**2) nodeDist.append(dist) iterations=biniter Ri=0 #inner radius """ The maximum distance can only be achieved in the xy-plane With "fixed" coordinates this will approx. be 35000nm To make the scholl-profiles comparable this length has to be used. """ scholl=[] xaxis=[] counter=0 length= int(35000 / biniter + 0.5) Ra=length #outer radius for i in range(0, biniter): for i in range(0, len(nodeDist)): if nodeDist[i] <= Ra and nodeDist[i] >= Ri: counter += 1 scholl.append(counter) counter=0 xaxis.append(Ri) # adapt THIS position in all other scripts! Otherwise 1 datapoint is missing!! Ri += length Ra += length return scholl, xaxis
from ini.trakem2.display import Display import MRCBZIP2 # Open image by decompressing first patch = Display.getFrontLayer().getDisplayables().get(0) imp = MRCBZIP2.decompress16bit(patch.getImageFilePath() + ".bz2") imp.show()
def sumDist(id1, biniter): distance=profileDistances(id1, biniter) xdistance=distance[0] ydistance=distance[1] zdistance=distance[2] tree = Display.getFront().getLayerSet().findById(id1) coords = Matrix(getNodeCoordinates(tree)) m=coords.getRowDimension() xdist=[] ydist=[] zdist=[] #Initialize interval size and fix iterations to a specific coordinate position xbinleft = -34600.0 ybinleft = -24200.0 zbinleft = 0 #----------PARAMETER FOR MACHINE LEARNING----- iterations =biniter #--------------------------------------------- xlength = int((35600.0+34600.0)/iterations + 0.5) ylength = int((21300.0+24200.0)/iterations + 0.5) zlength = int((22500)/iterations + 0.5) xbinright = xbinleft + xlength ybinright = ybinleft + ylength zbinright = zbinleft + zlength sumdist=0.0 for i in range(0, iterations): for i in range(0, len(xdistance)): if xdistance[i] <= xbinright and xdistance[i] >= xbinleft: sumdist += xdistance[i] xdist.append(sumdist) sumdist=0.0 xbinleft += xlength xbinright += xlength for i in range(0, iterations): for i in range(0, len(ydistance)): if ydistance[i] <= ybinright and ydistance[i] >= ybinleft: sumdist += ydistance[i] ydist.append(sumdist) sumdist=0.0 ybinleft += ylength ybinright += ylength for i in range(0, iterations): for i in range(0, len(zdistance)): if zdistance[i] <= zbinright and zdistance[i] >= zbinleft: sumdist += zdistance[i] zdist.append(sumdist) sumdist=0.0 zbinleft += zlength zbinright += zlength sumdistance=[] sumdistance= [xdist, ydist, zdist] return sumdistance
elem = l[:-1].split(" ") fname = elem[0] xloc = int(elem[1]) yloc = int(elem[2]) zloc = int(elem[3]) z_list.append(zloc) imp = IJ.openImage(os.path.join(img_dir, fname)) patch = Patch(project, imp.title, xloc, yloc, imp) patch.project.loader.addedPatchFrom(os.path.join(img_dir, fname), patch) layer = layerset.getLayer(zloc, 1, True) layer.add(patch) f.close() front = Display.getFront() bounds = Rectangle(x=0, y=0, width=20000, height=20000) front.resizeCanvas(bounds) z_list.sort() if z_list[0] != 0: layer = layerset.getLayer(0, 1, False) layer.remove(False) # Save project project.saveAs(os.path.join(proj_dir, "montage_v1.xml"), False) front.close(project)
def injectNordenTools(display): tabs = display.getTabbedPane() # Check that it's not there already title = "Norden Tools" for i in range(tabs.getTabCount()): if tabs.getTitleAt(i) == title: tabs.remove(i) #IJ.showMessage("Norden Tools have already been injected!") #return # Otherwise, add it new: from javax.swing import JPanel, JButton panel = JPanel() btnExportMask = JButton("Export mask", actionPerformed=nt.exportMask) panel.add(btnExportMask) btnImportMask = JButton("Import mask", actionPerformed=nt.importMask) panel.add(btnImportMask) btnOpenStack = JButton("Open Stack", actionPerformed=nt.openStack) panel.add(btnOpenStack) btnExportSegmentation = JButton("Export segmentation", actionPerformed=nt.exportSegmentation) panel.add(btnExportSegmentation) tabs.add(title, panel) tabs.setSelectedComponent(panel) # MAIN display = Display.getFront() if display is not None: injectNordenTools(display) else: IJ.showMessage("No active TrackEM2-project found. Open one!")
from ini.trakem2.display import Display from mpicbg.trakem2.transform import ExportBestFlatImage from ij import ImagePlus patches = Display.getFront().getLayer().getDisplayables() bounds = Display.getFront().getRoi().getBounds() backgroundValue = 0 scale = 0.25 e = ExportBestFlatImage(patches, bounds, backgroundValue, scale) print e.canUseAWTImage() print e.isSmallerThan2GB() e.printInfo() p = e.makeFlatFloatGrayImageAndAlpha() ImagePlus("grey", p.a).show() ImagePlus("mask", p.b).show()
if line[0] == "v": vertex_count += 1 mesh_str_out = mesh_str_out + line_flipped mesh_inc_str_out = mesh_inc_str_out + line_flipped_and_inc return (mesh_str_out, mesh_inc_str_out, vertex_count) # Create a file to hold collection of all objects together all_obj_filename = filepath + "all_arealists.obj" all_mtl_filename = filepath + "all_arealists.mtl" objfile_all = open(all_obj_filename, "w+") mtlfile_all = open(all_mtl_filename, "w+") vertex_increment = 0 # Loop over all area lists for ii in range(len(Display.getSelected())): print("Writing arealist " + str(ii + 1)) arealist = Display.getSelected()[ii] # Create the triangle mesh with resample of 1 (no resampling) # CAUTION: may take a long time. Try first with a resampling of at least 10. # resample = 1 triangles = arealist.generateTriangles(1, resample) # Extract arealist color # color = Color3f(1.0, 1.0, 0.0) # transparency = 0.0 red = arealist.color.getRed() / 255.0 green = arealist.color.getGreen() / 255.0 blue = arealist.color.getBlue() / 255.0