Posted by
Fred Damen on
Mar 13, 2018; 5:56pm
URL: http://imagej.273.s1.nabble.com/fitting-y-f-x-data-to-arbitrary-functions-in-ImageJ-tp5020273p5020278.html
Below is a routine to fit MRI Inversion Recover data for T1.
Note:
a) CurveFitter comes with ImageJ.
b) Calls are made to UserFunction once for each x.
c) If your initial guess is not close it does not seem to converge.
Bonus question for Java Gurus:
How to declare the user function as a variable, call it, and pass it to
another function?
Enjoy,
Fred
private double[] nonlinearFit(double[] x, double[] y) {
CurveFitter cf = new CurveFitter(x, y);
double[] params = {1, 2*y[0], -(y[0]+y[y.length-1])};
cf.setMaxIterations(200);
cf.doCustomFit(new UserFunction() {
@Override
public double userFunction(double[] p, double x) {
return Math.abs( p[1] + p[2]*Math.exp(-x/p[0]) );
}
}, params.length, "", params, null, false);
//IJ.log(cf.getResultString());
return cf.getParams();
}
On Tue, March 13, 2018 11:06 am, Kenneth Sloan wrote:
> I have some simple data: samples of y=f(x) at regularly spaced discrete values
> for x. The data
> is born as a simple array of y values, but I can turn that into (for example)
> a polyline, if that
> will help. I'm currently doing that to draw the data as an Overlay. The size
> of the y array is between 500 and 1000. (think 1 y value for every integer
> x-coordinate in an image - some y values may be recorded as "missing").
>
> Is there an ImageJ tool that will fit (more or less) arbitrary functions to
> this data? Approximately 8 parameters.
>
> The particular function I have in mind at the moment is a difference of
> Gaussians. The Gaussians
> most likely have the same location (in x) - but this is not guaranteed, and
> I'd prefer
> to use this as a sanity check rather than impose it as a constraint.
>
> Note that the context is a Java plugin - not a macro.
>
> If not in ImageJ, perhaps someone could point me at a Java package that will
> do this. I am far
> from an expert in curve fitting, so please be gentle.
>
> If not, I can do it in R - but I prefer to do it "on the fly" while displaying
> the image, and the Overlay.
>
> --
> Kenneth Sloan
>
[hidden email]
> Vision is the art of seeing what is invisible to others.
>
> --
> ImageJ mailing list:
http://imagej.nih.gov/ij/list.html>
--
ImageJ mailing list:
http://imagej.nih.gov/ij/list.html