CURVECMOMENT Compute centered inertia moment of a 2D curve. M = curveCMoment(CURVE, P, Q) Example curveCMoment See also polygons2d, curveMoment, curveCSMoment Reference Based on ideas and references in: "Affine curve moment invariants for shape recognition" Dongmin Zhao and Jie Chen Pattern Recognition, 1997, vol. 30, pp. 865-901 ------ Author: David Legland e-mail: david.legland@grignon.inra.fr Created: 2009-03-25, using Matlab 7.7.0.471 (R2008b) Copyright 2009 INRA - Cepia Software Platform.
0001 function m = curveCMoment(curve, p, q) 0002 %CURVECMOMENT Compute centered inertia moment of a 2D curve. 0003 % M = curveCMoment(CURVE, P, Q) 0004 % 0005 % Example 0006 % curveCMoment 0007 % 0008 % See also 0009 % polygons2d, curveMoment, curveCSMoment 0010 % 0011 % Reference 0012 % Based on ideas and references in: 0013 % "Affine curve moment invariants for shape recognition" 0014 % Dongmin Zhao and Jie Chen 0015 % Pattern Recognition, 1997, vol. 30, pp. 865-901 0016 % 0017 % 0018 % ------ 0019 % Author: David Legland 0020 % e-mail: david.legland@grignon.inra.fr 0021 % Created: 2009-03-25, using Matlab 7.7.0.471 (R2008b) 0022 % Copyright 2009 INRA - Cepia Software Platform. 0023 0024 % compute curve centroid 0025 centroid = polylineCentroid(curve); 0026 0027 % coordinate of vertices 0028 px = curve(:,1)-centroid(1); 0029 py = curve(:,2)-centroid(2); 0030 0031 % compute centroids of line segments 0032 cx = (px(1:end-1)+px(2:end))/2; 0033 cy = (py(1:end-1)+py(2:end))/2; 0034 0035 % compute length of each line segment 0036 dl = hypot(px(2:end)-px(1:end-1), py(2:end)-py(1:end-1)); 0037 0038 % compute moment 0039 m = zeros(size(p)); 0040 for i=1:length(p(:)) 0041 m(i) = sum(cx(:).^p(i) .* cy(:).^q(i) .* dl(:)); 0042 end