常用的简单区域描绘:
周长,面积,致密性,质心,灰度均值,灰度中值,包含区域最小矩形,最小或最大灰度级,大于或小于均值的像素数,欧拉数。
函数regionprops 用于 简单区域的描绘。
I = imread('../bw_mouth.bmp'); %读入二值图像 Il = bwlabel(I); %标注连通区,得到标记矩阵Il D = regionprops(Il, 'area', 'centroid'); %提取面积和质心 D % 查看返回的结构体 D.Area % 4个连通区域的面积 v1 = [D.Area] % 将面积转存为向量 D.Centroid % 4个连通区域的质心 v2 = [D.Centroid] %将质心转存为向量
load fisheriris %载入Matlab自带的鸢尾属植物数据集 data = [meas(:,1), meas(:,2)]; %采用花瓣长度和花瓣宽度作为特征 figure scatter(data(1:50, 1), data(1:50, 2), 'b+') % 第一类 hold on,scatter(data(51:100, 1), data(51:100, 2), 'r*') % 第二类 hold on,scatter(data(101:150, 1), data(101:150, 2), 'go') % 第三类 data = [meas(:,1), meas(:,3)]; %采用花瓣长度和萼片长度作为特征 figure scatter(data(1:50, 1), data(1:50, 2), 'b+') % 第一类 hold on,scatter(data(51:100, 1), data(51:100, 2), 'r*') % 第二类 hold on,scatter(data(101:150, 1), data(101:150, 2), 'go') % 第三类
I = imread('../mh_gray.bmp'); %读入图像 [hist1, I_LBP1] = getMBLBPFea(I, 1); [hist2, I_LBP2] = getMBLBPFea(I, 2); [hist3, I_LBP3] = getMBLBPFea(I, 3); figure, imshow(I_LBP1, []) %得到图12.21(b) figure, imshow(I_LBP2, []) %得到图12.21(c) figure, imshow(I_LBP3, []) %得到图12.21(d)
I = imread('../mh_gray.bmp'); %读入图像 histLBP1 = getLBPHist(I, 14, 13, 1); %按照14×13分区后像素块大小为1的复合LBP直方图特征 histLBP2 = getLBPHist(I, 7, 6, 2); %按照7×6分区后像素块大小为2的复合LBP直方图特征 histLBP3 = getLBPHist(I, 5, 4, 3); %按照5×4分区后像素块大小为3的复合LBP直方图特征 figure, plot(histLBP1) %得到图12.22(b) figure, plot(histLBP2) %得到图12.22(c) figure, plot(histLBP3) %得到图12.22(d)
灰度共现矩阵算法源码
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