LOCALGLCM2D - Textural features based on the Grey Level Co-occurrence Matrix.

Contents

Description

Compute local textural features using the 2D histograms of joint distribution of greylevel pairs as defined in the Grey Level Co-occurrence Matrix (GLCM) approach of [Hara79,HSD73].

Syntax

   O = LOCALGLCM2D(I);
   O = LOCALGLCM2D(I, 'Property', propertyvalue, ...);

Inputs

I : input image with dimension C, possibly multispectral (C>1 bands).

Properties [propertyname propertyvalues]: 'dcar' : (nd,2) matrix list of nd displacement vectors, expressed in cartesian coordinates X-Y, used for the estimation of the 2D joint greylevel distributions; default: nd=1 and dcar=[1 1].

'dpol' : similarly, (nd,2) matrix list of nd displacement vector expressed in polar coordinates; incompatible with previous 'dcar'; default: ignored, 'dcar' is used.

'win' : fixed size of the analyzing window used for local estimation;

'res' : number of levels of quantization of the image (ie. the resolution of the histograms); if is set to 0, the resolution will be a constant estimated w.r.t. to the window size; default: res=64.

'wei' : parameter defining the weighting scheme adopted for the estimation of local neighbourhoods used in histogram weighting; it is either:

default: wei='inv'.

'sig' : optional parameter defining either:

default (in both cases): sig=2.

'mask': optional label image of categorisation (with values >=0).

'im' : optional label(s) for which the textural features are computed when the image of labels mask has been passed as well; default=-1, ie. the textural features are estimated for all pixels in the input image.

Output

O : GLCM-based features.

References

[HSD73] R.M. Haralick, K. Shanmugam, and I. Dinstein: "Textural features for image classification", IEEE Trans. Systems, Man and Cybernetics, 3(6):610-621, 1973. http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4309314

[Hara79] R.M. Haralick: "Statistical and structural approaches to texture", Proceedings of IEEE, 67:786-804, 1979. http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1455597

[ST99] L. Soh and C. Tsatsoulis: "Texture analysis of SAR sea ice imagery using gray level co-occurrence matrices", IEEE Trans. on Geoscience and Remote Sensing, 37(2), 1999. http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=752194

[Clausi02] D A. Clausi: "An analysis of co-occurrence texture statistics as a function of grey level quantization", Canadian Journal of Remote Sensing, 28(1):45-62, 2002. http://www.eng.uwaterloo.ca/~dclausi/Papers/Published%202002/Clausi%20-%20GLCP%20and%20quantization%20-%20CJRS%202002.pdf

[GTY02] J. Grazzini, A. Turiel, and H. Yahia: "Entropy estimation and multiscale processing in meteorological satellite images", Proc. of ICPR, vol. 3, pp: 764-768, 2002. http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1048103

[GTY03] J. Grazzini, A. Turiel, and H. Yahia: "Analysis and comparison of functional dependencies of multiscale textural features on monospectral infrared images", Proc. of IGARSS, vol. 3, pp: 2045-2047, 2003. http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1294334

[JC06] R. Jobanputra and D.A. Clausi: "Preserving boundaries for image texture segmentation using grey level co-occurring probabilities", Pattern Recognition, 39:234-245, 2006. http://www.sciencedirect.com/science/article/pii/S0031320305002992

See also

Ressembles: LOCALGLOV2D, LOCALGLSDV2D. Requires: LOCALGLCM2D_BASE,

Function implementation

function O = localglcm2d(I, varargin)

parsing parameters

if ~isnumeric(I)
    disp('a matrix is required in input'); return;
end

% optional parameters
p = createParser('LOCALGLCM2D');   % create an instance of the inputParser class.
% mandatory (required) variables
%p.addRequired('I', @isnumeric);
p.addParamValue('res', 64, @(x)isscalar(x) && x>=0);
p.addParamValue('dcar', [1 1], @(x)isnumeric(x) && min(size(x))<=2 && ....
    all(round(x(:))==x(:)));
p.addParamValue('dpol', [], @(x)isnumeric(x) && any(size(x))==2 && ...
    all(x(:,1))>0 && -pi<all(x(:,2)) && pi>all(x(2)));
p.addParamValue('win', [], @(x)isscalar(x) && x>=1);
p.addParamValue('wei', 'ave', @(x)ischar(x) && ...
    any(strcmpi(x,{'gaus','ave','inv'})));
%p.addParamValue('n', 'global', @(x)ischar(x) && ...
%    any(strcmpi(x,{'local','global'})));
p.addParamValue('sig', '2.0', @(x)isscalar(x) && x>0.1 && x<10);
p.addParamValue('mask', [], @(x)isnumeric(x) && all(x>=0));
p.addParamValue('feat', 'all', @(x)ischar(x) && ...
    any(strcmpi(x,{'all','con','ene','ent','ent10',...
    'hom','var','dis','cor','inv'})));

% parse and validate all input arguments
p.parse(varargin{:});
p = getvarParser(p);

checking parameters and setting internal variables

if strcmp(p.wei,'gaus')
    if ~isempty(p.sig) && isempty(p.win)
        p.win = 6*p.sig + 1;
    end
elseif isempty(p.win)
    p.win = 7;
end

% ensure that the window size is odd
if ~isempty(p.win) && mod(p.win,2) == 0
    p.win = p.win + 1;
end

main calculation

O = localglcm2d_base(I, p.feat, p.res, p.dcar, p.dpol, p.win, p.wei, p.sig, p.mask);
end % end of localglcm2d