Пример #1
0
def extractRIM(impbin, iteration):
	IJ.run(imp, "Options...", "iterations=1 count=1 edm=Overwrite do=Nothing");
	impErode = Duplicator().run(impbin)
	impDilate = Duplicator().run(impbin)	
#	resized = CanvasResizer().expandStack(impDilate.getStack(), impDilate.getWidth()+2*iteration, impDilate.getHeight()+2*iteration, iteration, iteration)
#	impDilate.setStack(None, resized);
	for j in range(impErode.getStackSize()):
		ipe = impErode.getStack().getProcessor(j+1)
		ipe.setBackgroundValue(0)
		ipd = impDilate.getStack().getProcessor(j+1)
		ipd.setBackgroundValue(0)
		for i in range(iteration):
			ipe.erode()
			ipd.dilate()
#		IJ.run(impErode, "Dilate", "stack")
#		IJ.run(impDilate, "Erode", "stack")
#	resized = CanvasResizer().expandStack(impDilate.getStack(), impDilate.getWidth()-2*iteration, impDilate.getHeight()-2*iteration, -1*iteration, -1*iteration)
#	impDilate.setStack(None, resized);
#	impErode.show()
#	Duplicator().run(impDilate).show()	
	for i in range(1, impbin.getStackSize()+1):
		impDilate.setSlice(i)
		impErode.setSlice(i)
		ImageCalculator().calculate("XOR", impDilate, impErode)
	return impDilate;
Пример #2
0
def threshold(imPlus, edgeThreshold=2500):
    mask = Duplicator().run(imPlus)
    mask_stk = mask.getStack()

    # First, we threshold based on edges
    IJ.setThreshold(mask, edgeThreshold, 100000, "No Update")
    for i in range(mask.getImageStackSize()):
        mask_stk.getProcessor(i + 1).findEdges()
    IJ.run(mask, "Make Binary", "method=Default background=Default black")

    # Now, we need to clean up the binary images morphologically
    IJ.run(mask, "Dilate", "stack")
    IJ.run(mask, "Fill Holes", "stack")
    IJ.run(mask, "Erode", "stack")
    IJ.run(mask, "Erode", "stack")

    # Finally, remove the small particles
    stk = ImageStack(mask.getWidth(), mask.getHeight())
    p = PA(PA.SHOW_MASKS, 0, None, 200, 100000)
    p.setHideOutputImage(True)
    for i in range(mask_stk.getSize()):
        mask.setSliceWithoutUpdate(i + 1)
        p.analyze(mask)
        mmap = p.getOutputImage()
        stk.addSlice(mmap.getProcessor())

    mask.setStack(stk)
    mask.setSliceWithoutUpdate(1)
    mask.setTitle(mask_title(imPlus.getTitle()))
    mask.show()
    return mask
Пример #3
0
def creatResultsCompisite(pathdict, impbin, impsig):
	impbin.killRoi()
	impsig.killRoi()
	impid = Duplicator().run(impbin)
	IJ.run(impbin, "Red", "")
	for i in range(impid.getStackSize()):
		impid.getStack().getProcessor(i+1).setColor(0)
		impid.getStack().getProcessor(i+1).fill()
		impid.getStack().getProcessor(i+1).setColor(255)
	for pathid, path in pathdict.iteritems():
		for nuc in path.nucs:
			ip = impid.getStack().getProcessor(int(nuc.frame))
			ip.setColor(255)
			ip.drawString(str(pathid), int(nuc.x), int(nuc.y))
			#print 'Draw Path ID:',str(pathid)			 	
	images = jarray.array([impbin, impsig, impid], ImagePlus)
	comb = RGBStackMerge().mergeHyperstacks(images, False)
	comb.setTitle('Measurement Map.tif')
	return comb
def analyze(iDataSet, tbModel, p, output_folder):

  #
  # LOAD FILES
  #

  filepath = tbModel.getFileAPth(iDataSet, "RAW", "IMG")
  filename = tbModel.getFileName(iDataSet, "RAW", "IMG") 
  print("Analyzing: "+filepath)
  IJ.run("Bio-Formats Importer", "open=["+filepath+"] color_mode=Default view=Hyperstack stack_order=XYCZT");
  imp = IJ.getImage()
  
  #
  # INIT
  #
  IJ.run("Options...", "iterations=1 count=1"); 

 
  #
  # SCALING
  #
  IJ.run(imp, "Scale...", "x="+str(p["scale"])+" y="+str(p["scale"])+" z=1.0 interpolation=Bilinear average process create"); 
  imp = IJ.getImage()
  # save output file
  output_file = filename+"--downscale_input.tif"
  IJ.saveAs(IJ.getImage(), "TIFF", os.path.join(output_folder, output_file))
  tbModel.setFileAPth(output_folder, output_file, iDataSet, "INPUT","IMG")

  #
  # CONVERSION
  #
  
  #IJ.run(imp, "8-bit", "");
 
  
  #
  # CROPPING
  #
  
  #imp.setRoi(392,386,750,762);
  #IJ.run(imp, "Crop", "");

  
  #
  # BACKGROUND SUBTRACTION
  #
  
  # IJ.run(imp, "Subtract...", "value=32768 stack");

  IJ.run(imp, "Z Project...", "projection=[Average Intensity]");
  imp_avg = IJ.getImage()
  ic = ImageCalculator();
  imp = ic.run("Subtract create 32-bit stack", imp, imp_avg);
 
  #
  # REGION SEGMENTATION
  #
  
  imp1 = Duplicator().run(imp, 1, imp.getImageStackSize()-1)
  imp2 = Duplicator().run(imp, 2, imp.getImageStackSize())
  imp_diff = ic.run("Subtract create 32-bit stack", imp1, imp2);
  #imp_diff.show()

  IJ.run(imp_diff, "Z Project...", "projection=[Standard Deviation]");
  imp_diff_sd = IJ.getImage()
 
  # save
  IJ.run(imp_diff_sd, "Gaussian Blur...", "sigma=5");
  output_file = filename+"--sd.tif"
  IJ.saveAs(imp_diff_sd, "TIFF", os.path.join(output_folder, output_file))
  tbModel.setFileAPth(output_folder, output_file, iDataSet, "SD","IMG")

  IJ.run(imp_diff_sd, "Enhance Contrast", "saturated=0.35");
  IJ.run(imp_diff_sd, "8-bit", "");
  IJ.run(imp_diff_sd, "Properties...", "unit=p pixel_width=1 pixel_height=1 voxel_depth=1");
  IJ.run(imp_diff_sd, "Auto Local Threshold", "method=Niblack radius=60 parameter_1=2 parameter_2=0 white");
  
  rm = ROIManipulator.getEmptyRm()
  IJ.run(imp_diff_sd, "Analyze Particles...", "add");


  # select N largest Rois
  diameter_roi = []
  for i in range(rm.getCount()):
    roi = rm.getRoi(i)
    diameter_roi.append([roi.getFeretsDiameter(), roi])
  diameter_roi = sorted(diameter_roi, reverse=True)
  #print diameter_roi

  rm.reset()
  for i in range(min(len(diameter_roi), p["n_rois"])):
    rm.addRoi(diameter_roi[i][1]) 
  
  # save 
  output_file = filename+"--rois"
  ROIManipulator.svRoisToFl(output_folder, output_file, rm.getRoisAsArray())  
  tbModel.setFileAPth(output_folder, output_file+".zip", iDataSet, "REGIONS","ROI")

   
  #
  # FFT in each region
  #

  IJ.run(imp, "Variance...", "radius=2 stack");
  output_file = filename+"--beats.tif"
  IJ.saveAs(imp, "TIFF", os.path.join(output_folder, output_file))
  tbModel.setFileAPth(output_folder, output_file, iDataSet, "BEATS","IMG")
  
  n = rm.getCount()
  for i_roi in range(n):
    imp_selection = Duplicator().run(imp)
    rm.select(imp_selection, i_roi)
    IJ.run(imp_selection, "Clear Outside", "stack");
    imp_selection.show()
    
    # FFT using Parallel FFTJ
    transformer = FloatTransformer(imp_selection.getStack())
    transformer.fft()
    imp_fft = transformer.toImagePlus(SpectrumType.FREQUENCY_SPECTRUM)
    imp_fft.show()

    # Analyze FFt
    IJ.run(imp_fft, "Gaussian Blur 3D...", "x=0 y=0 z=1.5");
    IJ.run(imp_fft, "Plot Z-axis Profile", "");
    output_file = filename+"--Region"+str(i_roi+1)+"--fft.tif"
    IJ.saveAs(IJ.getImage(), "TIFF", os.path.join(output_folder, output_file))
    tbModel.setFileAPth(output_folder, output_file, iDataSet, "FFT_R"+str(i_roi+1),"IMG")

    IJ.run(imp_fft, "Select All", "");
    rm.addRoi(imp_fft.getRoi())
    rm.select(rm.getCount())
    rt = ResultsTable()
    rt = rm.multiMeasure(imp_fft); #print(rt.getColumnHeadings);
    x = rt.getColumn(rt.getColumnIndex("Mean1"))
    #rm.runCommand("delete")
    
    peak_height_pos = []
    x_min = 10
    for i in range(x_min,len(x)/2):
      before = x[i-1]
      center = x[i]
      after = x[i+1]
      if (center>before) and (center>after):
        peak_height_pos.append([float(x[i]),i])
        
    if len(peak_height_pos)>0:
      peak_height_pos = sorted(peak_height_pos, reverse=True)
    
    n_max = 3
    for i_max in range(min(len(peak_height_pos),n_max)):
      tbModel.setNumVal(round(float(len(x))/float(peak_height_pos[i_max][1]),2), iDataSet, "F"+str(i_max+1)+"_R"+str(i_roi+1))
      tbModel.setNumVal(int(peak_height_pos[i_max][0]), iDataSet, "A"+str(i_max+1)+"_R"+str(i_roi+1))