1 Download
Updated 22 Mar 2006
No License
This function is a modified form of original code (see below). I vectorized the code to make the code time efficient.
The function calculates the mean curvature of the input structured matrix data. The input are the coordinate matrices of x,y & z (as generated by meshgrid or similar functions).
The outputs are a matrix containing the mean curvature at each point and a scalar giving the surface average mean curvature (SAMC).
Mistake found by Anthony Beaucamp. Thanks for letting me know! File has been updated.
1.0.0.0  Mistake in formula. Found by Anthony Beaucamp. Thanks for letting me know! 

update description 

To provide better description of the function 

To provide better description of the function 

To provide better description of the function 

To provide better description of the function 

To provide better description of the function 
Inspired by: Mean Curvature
Create scripts with code, output, and formatted text in a single executable document.
Abdelrahman Shaath (view profile)
% First Derivatives
[Xu,Xv] = gradient(X); [Yu,Yv] = gradient(Y); [Zu,Zv] = gradient(Z);
% Second Derivatives
[Xuu,Xuv] = gradient(Xu); [Yuu,Yuv] = gradient(Yu); [Zuu,Zuv] = gradient(Zu);
[Xuv,Xvv] = gradient(Xv); [Yuv,Yvv] = gradient(Yv); [Zuv,Zvv] = gradient(Zv);
% Initialize Gaussian and mean curvature
K = zeros(size(Z));
H = zeros(size(Z));
% Calculate both Gaussian and mean curvature
for i=1:size(Z,1)
for j=1:size(Z,2)
% assign vector values that we are going to work on
r_u = [Xu(i,j) Yu(i,j) Zu(i,j)];
r_v = [Xv(i,j) Yv(i,j) Zv(i,j)];
r_uu = [Xuu(i,j) Yuu(i,j) Zuu(i,j)];
r_uv = [Xuv(i,j) Yuv(i,j) Zuv(i,j)];
r_vv = [Xvv(i,j) Yvv(i,j) Zvv(i,j)];
% First fundamental Coeffecients of the surface (E,F,G)
E = dot(r_u, r_u);
F = dot(r_u, r_v);
G = dot(r_v, r_v);
% Calculate the unite normal vector (the perpendicular vector for
% both of these vectors)
m = cross(r_u,r_v,2);
n = m./sqrt(dot(m,m,2));
% Second fundamental Coeffecients of the surface (L,M,N)
L = dot(r_uu,n);
M = dot(r_uv,n);
N = dot(r_vv,n);
% Gaussian Curvature
K(i,j) = (L.*N  M.^2)./(E.*G  F.^2);
% Mean Curvature
H(i,j) = (E.*N + G.*L  2.*F.*M)./(2*(E.*G  F.^2));
end
end
Jose Cappelletto (view profile)
Nadal (view profile)
Hi Claude,
When I run by providing the point cloud data it throws error:
Error using gradient (line 49)
Too many output arguments.
Can you provide a way how should i run for 3D point cloud as an example.
Hi pratik,
Can you please let me know how I can use your code to calculate the curvature of a 2D curve?
Thanks,Mehdi
@Claude Gouedard:
I acknowledged the original author in my post. I dont think I am responsible for any missing citations on the part of the original author.
(This review might appear twice).
I apologize !
I didn't send my code to you ...
It was to Ahmed Elnagar about "Gaussian Curvature " http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=5229&objectType=file
However ...
this code, yours, sounds a lot like mine. Perhaps there is only one way to program fine ....
It seems I recognize my own code (!) I sent you because I told you that yours was not in the Matlab spirit ...
I don't see any citation ...no thanks ...
File updated to remove error found by Anthony Beaucamp. Thanks for letting me know! Dont know how I missed that! Btw, the original file also has the same error.
That's a big improvement from the original code, but you made a mistake: It's not (2.*(E.*G)F.^2) but 2.*((E.*G)F.^2). Anyway, I am working on an extended version that calculates everything: Principal Curvatures, Directions, Mean and Gaussian. I will post it as soon as it's ready.
Cleaned up the help and description. I also compared this code to its predecessor  on a 100x100 grid, I saw a 40x speedup.
(This review may appear twice.)
Thnx for the comments John. I will update the file description. Presently, I am having trouble logging into my account.
That this function does not work on a triangulation does not make it worth deletion. It merely makes it of less value to at least one user than it might be otherwise.
I do have two issues though. First is the claim in the description that it works on a "point cloud". The phrase point cloud suggests an unstructured set of points. This code requires a structured array of data, as meshgrid might have generated. My second comment is a related one  There is very little information supplied in the help to this function, only one vague line. I'd have preferred a much better description of what the inputs must be. Ordinarily I'd have given this file a rating of 2 due to these flaws, but since its already gotten a rating of 1, I chose to round up.
Computing the mean curvature of an implicit surface is very simple and straightforward. The challenging problem is how to efficiently compute the curvatures of a 3D triangle mesh. The most common representation of a 3D surface in computer graphics is the triangle mesh which consists of a set of vertices (geometry) and a set of faces (connectivety).