def fit_curve(x, y): """fits curve of a single gaussian, returns FWHM, R^2, and the fn args. """ cf = CurveFitter(x, y) cf.doFit(12) params = cf.getResultString() fwhm, r2 = getFWHM(params) return fwhm, r2, params
# http://hyperphysics.phy-astr.gsu.edu/hbase/math/gaufcn2.html import ij.measure.CurveFitter imp = IJ.getImage() prof = ProfilePlot(imp) curprofile = prof.getProfile() print(len(curprofile)); #for i in curprofile: # print(i) pixx = range(len(curprofile)) fitA = range(len(curprofile)) cf = CurveFitter(pixx, curprofile) cf.doFit(cf.GAUSSIAN) #print(cf.getFormula()) print(cf.getResultString()) cfp = cf.getParams() EstimatedDiameter = "Diameter = " + str(2.355*cfp[3]) IJ.log(EstimatedDiameter) for i in range(len(curprofile)): fitA[i] = cf.f(cfp, i) fitplot = Plot("fitted", "pixels", "intensity", pixx, fitA) fitplot.addPoints(pixx, curprofile, fitplot.CIRCLE) fitplot.addLabel(0.1, 0.1, EstimatedDiameter) fitplot.show()
from array import array from ij import IJ from ij.measure.CurveFitter import * # Example from # http://rsbweb.nih.gov/ij/macros/examples/CurveFittingDemo.txt # x = array('d', [0, 1, 2, 3, 4, 5]) # y = array('d', [0, 0.9, 4.5, 8, 18, 24]) # # make one where I know approximate coefficients x = array("d", [0, 1, 2, 3, 4, 5]) y = array("d", [0, 1.1, 1.9, 2.95, 4.02, 4.99]) cf = CurveFitter(x, y) cf.doFit(STRAIGHT_LINE) res = cf.getParams() # N.B. cf.getParams() returns # [ intercept, slope, sum of square residuals] b = res[0] m = res[1] p3 = res[2] print "Linear fit example: b=" + IJ.d2s(b, 6) + ", m =" + IJ.d2s(m, 6) + ", par3=" + IJ.d2s(p3, 6) print cf.getResultString()
normalized_curve = [] for i in range(n_slices): normalized_curve.append( (If[i] - min_intensity) / (mean_If - min_intensity) * mean_In / In[i] ) x = [i * frame_interval for i in range( n_slices ) ] y = normalized_curve xtofit = [ i * frame_interval for i in range( n_slices - bleach_frame ) ] ytofit = normalized_curve[ bleach_frame : n_slices ] # Fitter fitter = CurveFitter(xtofit, ytofit) fitter.doFit(CurveFitter.EXP_RECOVERY_NOOFFSET) IJ.log("Fit FRAP curve by " + fitter.getFormula() ) param_values = fitter.getParams() IJ.log( fitter.getResultString() ) # Overlay fit curve, with oversampling (for plot) xfit = [ (t / 10.0 + bleach_frame) * frame_interval for t in range(10 * len(xtofit) ) ] yfit = [] for xt in xfit: yfit.append( fitter.f( fitter.getParams(), xt - xfit[0]) ) plot = Plot("Normalized FRAP curve for " + current_imp.getTitle(), "Time ("+time_units+')', "NU", [], []) plot.setLimits(0, max(x), 0, 1.5 ); plot.setLineWidth(2) plot.setColor(Color.BLACK) plot.addPoints(x, y, Plot.LINE)