常用的简单区域描绘:
周长,面积,致密性,质心,灰度均值,灰度中值,包含区域最小矩形,最小或最大灰度级,大于或小于均值的像素数,欧拉数。
函数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