(9)MATLAB 特征分析

   常用的简单区域描绘:

   周长,面积,致密性,质心,灰度均值,灰度中值,包含区域最小矩形,最小或最大灰度级,大于或小于均值的像素数,欧拉数。

函数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



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值