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