现在的位置: 首页 > 综合 > 正文

graycoprops 计算 灰度共生矩阵(GLCM)的特征

2018年10月31日 ⁄ 综合 ⁄ 共 8416字 ⁄ 字号 评论关闭

matlab 函数名称: graycoprops()

功                   能: 计算灰度共生矩阵(GLCM)的各个特征值+

句法:

    stats = graycoprops(glcm, properties)

描述:

    stats = graycoprops(glcm, properties) 从灰度共生矩阵(glcm)中,计算properties指定的特征的统计值。glcm是一个m x n x p 的矩阵,它由有效的灰度共生矩阵(m x n)组成。如果glcm是一个GLCMs的数组,stats是由每个glcm的统计值组成的矩阵。

    graycoprops() 归一化灰度共生矩阵,以便它的元素的和等于1。归一化的GLCM中的每一个元素(r,c)是图像中像素值分别为r和c的像素对出现的联合概率。graycoprops使用归一化的GLCM来计算特征值。

    properties可以是由逗号隔开的字符串,字符元胞数组,'all’字符串,或者空格隔开的字符串。

property的取值:

   'Contrast'  即对比度,返回整幅图像中某个像素与它的邻居之间的对比度。常量组成的图像的Contrast是0。计算公式为:

    'Correlation'  即互相关,返回整幅图像中某个像素与它的邻居之间的互相关度。取值范围是 [-1 , 1]。常量组成的图像的互相关度Correlation是NaN。相关度1和-1分别对应完全正相关和完全负相关。计算公式为:

     'Energy'  即能量,返回GLCM中所有元素的平方和。取值范围是 [0 , 1]。常量组成的图像的能量Energy是1。计算公式为:

    'Homogeneity'  即齐次性(同质性),返回的值反映了GLCM中元素相对于GLCM对角线的分布的紧密度。取值范围是 [0 , 1]。对角的GLCM的Homogeneity齐次性是1。公式为:

       graycoprops()的返回变量states是一个结构体,它的域fields由properties指定。每一个field包含一个 1 x p 的数组,p是GLCM中灰度共生矩阵的数目。例如,GLCM是一个8 x 8 x 3 的矩阵,并且属性为‘Energy’,那么,states是一个包含‘Energy’域的结构体,其中,Energy包含一个 1 x 3 的数组。

注释:

     Energy(能量)也叫做uniformity, uniformity of energy, 和 angular second moment。

     Contrast(对比度)也叫做variance 和 inertia。

支持的类型:

     glcm可以是逻辑型或数值型,并且它必须由非负的、有限的(和实数的)整数组成。     states是一个结构体。

举例说明:

GLCM = [0 1 2 3;1 1 2 3;1 0 2 0;0 0 0 3];
stats = graycoprops(GLCM)

I = imread('circuit.tif');
GLCM2 = graycomatrix(I,'Offset',[2 0;0 2]);
stats = graycoprops(GLCM2,{'contrast','homogeneity'})

 

 

 ************************************************************************************************************************************************************************

 

 *************************************************************  graycoprops源程序代码  *****************************************************************************

 ************************************************************************************************************************************************************************

 

function stats = graycoprops(varargin)
%GRAYCOPROPS Properties of gray-level co-occurrence matrix.  
%   STATS = GRAYCOPROPS(GLCM,PROPERTIES) normalizes the gray-level
%   co-occurrence matrix (GLCM) so that the sum of its elements is one. Each
%   element in the normalized GLCM, (r,c), is the joint probability occurrence
%   of pixel pairs with a defined spatial relationship having gray level
%   values r and c in the image. GRAYCOPROPS uses the normalized GLCM to
%   calculate PROPERTIES.
%
%   GLCM can be an m x n x p array of valid gray-level co-occurrence
%   matrices. Each gray-level co-occurrence matrix is normalized so that its
%   sum is one.
%
%   PROPERTIES can be a comma-separated list of strings, a cell array
%   containing strings, the string 'all', or a space separated string. They
%   can be abbreviated, and case does not matter.
%
%   Properties include:
%  
%   'Contrast'      the intensity contrast between a pixel and its neighbor 
%                   over the whole image. Range = [0 (size(GLCM,1)-1)^2]. 
%                   Contrast is 0 for a constant image.
%
%   'Correlation'   statistical measure of how correlated a pixel is to its 
%                   neighbor over the whole image. Range = [-1 1]. 
%                   Correlation is 1 or -1 for a perfectly positively or
%                   negatively correlated image. Correlation is NaN for a 
%                   constant image.
%
%   'Energy'        summation of squared elements in the GLCM. Range = [0 1].
%                   Energy is 1 for a constant image.
%  
%   'Homogeneity'   closeness of the distribution of elements in the GLCM to
%                   the GLCM diagonal. Range = [0 1]. Homogeneity is 1 for
%                   a diagonal GLCM.
%  
%   If PROPERTIES is the string 'all', then all of the above properties are
%   calculated. This is the default behavior. Please refer to the
%   Documentation for more information on these properties.
%  
%   STATS is a structure with fields that are specified by PROPERTIES. Each
%   field contains a 1 x p array, where p is the number of gray-level
%   co-occurrence matrices in GLCM. For example, if GLCM is an 8 x 8 x 3 array
%   and PROPERTIES is 'Energy', then STATS is a structure containing the
%   field 'Energy'. This field contains a 1 x 3 array.
%
%   Notes
%   -----  
%   Energy is also known as uniformity, uniformity of energy, and angular second
%   moment.
%
%   Contrast is also known as variance and inertia.
%
%   Class Support
%   -------------  
%   GLCM can be logical or numeric, and it must contain real, non-negative, finite,
%   integers. STATS is a structure.
%
%   Examples
%   --------
%   GLCM = [0 1 2 3;1 1 2 3;1 0 2 0;0 0 0 3];
%   stats = graycoprops(GLCM)
%
%   I = imread('circuit.tif');
%   GLCM2 = graycomatrix(I,'Offset',[2 0;0 2]);
%   stats = graycoprops(GLCM2,{'contrast','homogeneity'})
%  
%   See also GRAYCOMATRIX.

% Copyright 2003-2009 The MathWorks, Inc.

allStats = {'Contrast','Correlation','Energy','Homogeneity'};
  
[glcm, requestedStats] = ParseInputs(allStats, varargin{:});

% Initialize output stats structure.
numStats = length(requestedStats);
numGLCM = size(glcm,3);
empties = repmat({zeros(1,numGLCM)},[numStats 1]);
stats = cell2struct(empties,requestedStats,1);

for p = 1 : numGLCM
  
  if numGLCM ~= 1 %N-D indexing not allowed for sparse. 
    tGLCM = normalizeGLCM(glcm(:,:,p));
  else 
    tGLCM = normalizeGLCM(glcm);
  end
  
  % Get row and column subscripts of GLCM.  These subscripts correspond to the
  % pixel values in the GLCM.
  s = size(tGLCM);
  [c,r] = meshgrid(1:s(1),1:s(2));
  r = r(:);
  c = c(:);

  % Calculate fields of output stats structure.
  for k = 1:numStats
    name = requestedStats{k};  
    switch name
     case 'Contrast'
      stats.(name)(p) = calculateContrast(tGLCM,r,c);
      
     case 'Correlation'
      stats.(name)(p) = calculateCorrelation(tGLCM,r,c);
      
     case 'Energy'
      stats.(name)(p) = calculateEnergy(tGLCM);
      
     case 'Homogeneity'
      stats.(name)(p) = calculateHomogeneity(tGLCM,r,c);
    end
  end

end


%-----------------------------------------------------------------------------
function glcm = normalizeGLCM(glcm)
  
% Normalize glcm so that sum(glcm(:)) is one.
if any(glcm(:))
  glcm = glcm ./ sum(glcm(:));
end
  
%-----------------------------------------------------------------------------
function C = calculateContrast(glcm,r,c)
% Reference: Haralick RM, Shapiro LG. Computer and Robot Vision: Vol. 1,
% Addison-Wesley, 1992, p. 460.  
k = 2;
l = 1;
term1 = abs(r - c).^k;
term2 = glcm.^l;
  
term = term1 .* term2(:);
C = sum(term);

%-----------------------------------------------------------------------------
function Corr = calculateCorrelation(glcm,r,c)
% References: 
% Haralick RM, Shapiro LG. Computer and Robot Vision: Vol. 1, Addison-Wesley,
% 1992, p. 460.
% Bevk M, Kononenko I. A Statistical Approach to Texture Description of Medical
% Images: A Preliminary Study., The Nineteenth International Conference of
% Machine Learning, Sydney, 2002. 
% http://www.cse.unsw.edu.au/~icml2002/workshops/MLCV02/MLCV02-Bevk.pdf, p.3.
  
% Correlation is defined as the covariance(r,c) / S(r)*S(c) where S is the
% standard deviation.

% Calculate the mean and standard deviation of a pixel value in the row
% direction direction. e.g., for glcm = [0 0;1 0] mr is 2 and Sr is 0.
mr = meanIndex(r,glcm);
Sr = stdIndex(r,glcm,mr);
  
% mean and standard deviation of pixel value in the column direction, e.g.,
% for glcm = [0 0;1 0] mc is 1 and Sc is 0.
mc = meanIndex(c,glcm);
Sc = stdIndex(c,glcm,mc);

term1 = (r - mr) .* (c - mc) .* glcm(:);
term2 = sum(term1);

Corr = term2 / (Sr * Sc);

%-----------------------------------------------------------------------------
function S = stdIndex(index,glcm,m)

term1 = (index - m).^2 .* glcm(:);
S = sqrt(sum(term1));

%-----------------------------------------------------------------------------
function M = meanIndex(index,glcm)

M = index .* glcm(:);
M = sum(M);

%-----------------------------------------------------------------------------
function E = calculateEnergy(glcm)
% Reference: Haralick RM, Shapiro LG. Computer and Robot Vision: Vol. 1,
% Addison-Wesley, 1992, p. 460.  
  
foo = glcm.^2;
E = sum(foo(:));

%-----------------------------------------------------------------------------
function H = calculateHomogeneity(glcm,r,c)
% Reference: Haralick RM, Shapiro LG. Computer and Robot Vision: Vol. 1,
% Addison-Wesley, 1992, p. 460.  
  
term1 = (1 + abs(r - c));
term = glcm(:) ./ term1;
H = sum(term);

%-----------------------------------------------------------------------------
function [glcm,reqStats] = ParseInputs(allstats,varargin)
  
numstats = length(allstats);
iptchecknargin(1,numstats+1,nargin,mfilename);

reqStats = '';
glcm = varargin{1};

% The 'nonnan' and 'finite' attributes are not added to iptcheckinput because the
% 'integer' attribute takes care of these requirements.
iptcheckinput(glcm,{'logical','numeric'},{'real','nonnegative','integer'}, ...
              mfilename,'GLCM',1);

if ndims(glcm) > 3
  eid = sprintf('Images:%s:invalidSizeForGLCM',mfilename);
  msg = 'GLCM must either be an m x n or an m x n x p array.';
  error(eid,'%s',msg);
end

% Cast GLCM to double to avoid truncation by data type. Note that GLCM is not an
% image.
if ~isa(glcm,'double')
  glcm = double(glcm);
end

list = varargin(2:end);

if isempty(list)
  % GRAYCOPROPS(GLCM) or GRAYCOPROPS(GLCM,PROPERTIES) where PROPERTIES is empty.
  reqStats = allstats;
else
  if iscell(list{1}) || numel(list) == 1
    % GRAYCOPROPS(GLCM,{...})
    list = list{1};
  end

  if ischar(list)
    %GRAYCOPROPS(GLCM,SPACE-SEPARATED STRING)
    list = strread(list, '%s');
  end

  anyprop = allstats;
  anyprop{end+1} = 'all';
  
  for k = 1 : length(list)
    match = iptcheckstrs(list{k}, anyprop, mfilename, 'PROPERTIES', k+1);
    if strcmp(match,'all')
      reqStats = allstats;
      break;
    end
    reqStats{k} = match;
  end
  
end

% Make sure that reqStats are in alphabetical order.
reqStats = sort(reqStats);

if isempty(reqStats)
  eid = sprintf('Images:%s:internalError',mfilename);
  msg = 'Internal error: requestedStats has not been assigned.';
  error(eid,'%s',msg);
end

 

 

 

 

 

 

 

抱歉!评论已关闭.