File Exchange

## Fit 2D gaussian function to data

version 1.5 (3.56 KB) by

Fits a 2D Gaussian function to simulated data.

Updated

The program generates a 2D Gaussian. The program then attempts to fit the data using the MatLab function “lsqcurvefit “ to find the position, orientation and width of the two-dimensional Gaussian.
Execute “mainD2GaussFitRot.m” with not input parameters.
The two-dimensional Gaussian function is defined by the function “D2GaussFunctionRot.m” and “D2GaussFunction.m”

Emily Pendleton

### Emily Pendleton (view profile)

Hello! I'm really interested in using this code, but am having trouble using it. I've posted a question on MATLAB Answers if anyone is willing to help. Thanks! https://www.mathworks.com/matlabcentral/answers/386720-fit-2d-gaussian-function

warren hong

lihua6644

grüne Sonne

Martin Ahrens

Neema Prakash

### Neema Prakash (view profile)

Thank you for this code.

ZY

### ZY (view profile)

Thank you for the code. What are the errors associated with the the fitting parameters?

Bin Xu

### Bin Xu (view profile)

Good work . I would glad to know how the code work

Brian.L

### Brian.L (view profile)

Great work Gero! I also would like to know how the code might be adapted for 3D system...

Jozsef Orbán

### Jozsef Orbán (view profile)

Could you please provide the code with dependencies (as lsqncommon, lsqcurvefit, ...)

YuTing Huang

### YuTing Huang (view profile)

I would like to know the x(6) in the script of D2GaussFunctionRot function. I know it means the angle(in rad), however, I don't understand what the angle exactly based on?

Nathan Neff-Mallon

### Nathan Neff-Mallon (view profile)

Jan Simon's criticism is misplaced, only minor changes are needed to plot real data. If you have a regular grid of points, all you must do is:
change line 29 to the appropriate initial guesses
change line 30 to xs=x0;
change line 31 to noise=0;
change line 38 to [X,Y] = meshgrid(x,y);
where x and y a vectors with your x an y axis points
change line 47 to Z = zdata;
where zdata is a length(x) by length(y) matrix with the data you wish to fit such that zdata(i,j)=z(x_i,y_j).
Line 48 should be commented out.

If your grid points are not regular, you must set up the X, Y, and Z matrices so that they are all the same size and element i of X, Y and Z all correspond to the point (X(i),Y(i),Z(i)). There might be additional restrictions on the size and shape (I think it must be a matrix and not an array), but I'm not certain.

At any rate, thank you very much Gero. This is very helpful. :)

Leo

xavier

Gaszton

Jan

### Jan (view profile)

What a pity that this is a script, which generates the data by a random function. Before it can be used for real problems, substantial changes are required.

It would increase the usability, if the calculations are move to a function and separated from the generation of test data.

Gar Waterman

### Gar Waterman (view profile)

Works well for 2D system...any chance of broadening it to 3D?

 12 Jun 2012 1.5 file was renamed and the definition of the gaussian width was changed. Also a screenshot was added.
##### MATLAB Release
MATLAB 7.12 (R2011a)