Code covered by the BSD License

# Geometric measures in 2D/3D images

### David Legland (view profile)

09 Nov 2011 (Updated )

Measure of geometric parameters in 2D or 3D images (surface area, perimeter, Euler Number...)

imAreaEstimate(img, varargin)
```function a = imAreaEstimate(img, varargin)
%Estimate area of binary 2D structure with edge correction
%
%   Aest = imAreaEstimate(IMG)
%   Aest = imAreaEstimate(IMG, DELTA)
%
%   Example
%   imAreaEstimate
%
%
%
% ------
% Author: David Legland
% e-mail: david.legland@grignon.inra.fr
% Created: 2010-01-21,    using Matlab 7.9.0.529 (R2009b)
% Copyright 2010 INRA - Cepia Software Platform.

%% Input arguments processing

% check image dimension
if ndims(img)~=2 %#ok<ISMAT>
error('first argument should be a 2D binary or label image');
end

% in case of a label image, return a vector with a set of results
if ~islogical(img)
labels = unique(img);
labels(labels==0) = [];
a = zeros(length(labels), 1);
for i=1:length(labels)
a(i) = imAreaEstimate(img==labels(i), varargin{:});
end
return;
end

% check image resolution
delta = [1 1];
if ~isempty(varargin)
delta = varargin{1};
end

%% Main processing

% compute area in whole image
a = sum(img(:));

% compute area on borders
a1 = sum(sum(img([1 end], :)));
a2 = sum(sum(img(:, [1 end])));

% compute area on corners
a0 = sum(sum(img([1 end], [1 end])));

% estimate area using edge weighting according to multiplicity
a = a -(a1+a2)/2 + a0/4;

% multiply by area of a single pixel
a = a*prod(delta);
```