gusucode.com > 精通Matlab数字图像处理与识别源码程序 > 精通Matlab数字图像处理与识别源码程序/chapter12/code/grayMat.m
function grayMat = grayMat( I, nLevel, x1, y1, x2, y2 ) % 计算图像I的灰度共现矩阵 % I - 输入图像 % nLevel - 要统计的灰度级数目 % x1, y1, x2, y2 - 要统计的空间位置关系 % % grayMat - 灰度共现矩阵,大小为nLevel*nLevel if nargin < 3 x1 = 1;% 默认是+45度的位置关系 y1 = -1; x2 = -1; y2 = 1; end % 对 I 进行灰度级划分 minVal = min(I(:)); maxVal = max(I(:)); [m n] = size(I); if (maxVal - minVal + 1) >= nLevel span = double(maxVal-minVal) / nLevel; ruler = double(minVal):span:double(maxVal); ind = find(I < ruler(2)); I2 = I; % I2为进行灰度级压缩后的图像,灰度级下标从1开始 I2(ind) = 1; clear ind; for iLevel = 2:nLevel-1 for ii = 1:m for jj = 1:n if ( (I(ii, jj) >= ruler(iLevel)) && (I(ii, jj) < ruler(iLevel+1)) ) I2(ii, jj) = iLevel; end end end end ind = find(I >= ruler(nLevel)); I2(ind) = nLevel; clear ind; else error('hello'); end grayMat = zeros(nLevel, nLevel); % 计算灰度共现矩阵 for ii = 1:m for jj = 1:n ii2 = ii+y1; jj2 = jj+x1; if( (ii2 >= 1) && (ii2<=m) &&(jj2>=1) &&(jj2<=n) ) grayMat(I2(ii, jj), I2(ii2, jj2)) = grayMat(I2(ii, jj), I2(ii2, jj2)) + 1; end ii2 = ii+y2; jj2 = jj+x2; if( (ii2 >= 1) && (ii2<=m) &&(jj2>=1) &&(jj2<=n) ) grayMat(I2(ii, jj), I2(ii2, jj2)) = grayMat(I2(ii, jj), I2(ii2, jj2)) + 1; end end end