--- a
+++ b/combinedDeepLearningActiveContour/functions/polycenter.m
@@ -0,0 +1,79 @@
+function [area,cx,cy] = polycenter(x,y,dim)
+
+%POLYCENTER Area and centroid of polygon.
+%   [AREA,CX,CY] = POLYCENTER(X,Y) returns the area and the centroid
+%   coordinates of the polygon specified by the vertices in the vectors X
+%   and Y. If X and Y are matrices of the same size, then POLYCENTER
+%   returns the centroid and area of polygons defined by the columns X and
+%   Y. If X and Y are arrays, POLYCENTER returns the centroid and area of
+%   the polygons in the first non-singleton dimension of X and Y.
+%
+%   POLYCENTER is an extended version of POLYAREA.
+%
+%   The polygon edges must not intersect. If they do, POLYCENTER returns
+%   the values of the difference between the clockwise encircled parts and
+%   the counterclockwise ones. As with POLYAREA, the absolute value is used
+%   for the area.
+%
+%   [AREA,CX,CY] = POLYCENTER(X,Y,DIM) returns the centroid and area of the
+%   polygons specified by the vertices in the dimension DIM.
+%
+%   Example:
+%   -------
+%       x0 = rand(1); y0 = rand(1);
+%       L = linspace(0,2.*pi,6);
+%       xv = cos(L)' + x0; yv = sin(L)' + y0;
+%       xv = [xv ; xv(1)]; yv = [yv ; yv(1)];
+%       [A,cx,cy] = polycenter(xv,yv);
+%       plot(xv,yv,cx,cy,'k+')
+%       title(['Area = ' num2str(A)]), axis equal
+%
+%   Damien Garcia, 08/2007, directly adapted from POLYAREA
+%
+%   See also POLYAREA.
+
+if nargin==1 
+  error('MATLAB:polycenter:NotEnoughInputs','Not enough inputs.'); 
+end
+
+if ~isequal(size(x),size(y)) 
+  error('MATLAB:polycenter:XYSizeMismatch','X and Y must be the same size.'); 
+end
+
+if nargin==2
+    [x,nshifts] = shiftdim(x);
+    y = shiftdim(y);
+elseif nargin==3
+    perm = [dim:max(length(size(x)),dim) 1:dim-1];
+    x = permute(x,perm);
+    y = permute(y,perm);
+end
+
+warn0 = warning('query','MATLAB:divideByZero');
+warning('off','MATLAB:divideByZero')
+    
+siz = size(x);
+if ~isempty(x)
+    tmp = x(:,:).*y([2:siz(1) 1],:) - x([2:siz(1) 1],:).*y(:,:);
+    area = reshape(sum(tmp),[1 siz(2:end)])/2;
+    cx = reshape(sum((x(:,:)+x([2:siz(1) 1],:)).*tmp/6),[1 siz(2:end)])./area;
+    cy = reshape(sum((y(:,:)+y([2:siz(1) 1],:)).*tmp/6),[1 siz(2:end)])./area;
+    area = abs(area);
+else
+    area = sum(x); % SUM produces the right value for all empty cases
+    cx = NaN(size(area));
+    cy = cx;
+end
+
+warning(warn0.state,'MATLAB:divideByZero')
+
+if nargin==2
+   area = shiftdim(area,-nshifts);
+   cx = shiftdim(cx,-nshifts);
+   cy = shiftdim(cy,-nshifts);
+elseif nargin==3
+    area = ipermute(area,perm);
+    cx = ipermute(cx,perm);
+    cy = ipermute(cy,perm);
+end
+