本文主要是介绍(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*nLevelif nargin < 3x1 = 1;% 默认是+45度的位置关系y1 = -1;x2 = -1;y2 = 1;
end% 对 I 进行灰度级划分
minVal = min(I(:));
maxVal = max(I(:));
[m n] = size(I);if (maxVal - minVal + 1) >= nLevelspan = 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-1for ii = 1:mfor jj = 1:nif ( (I(ii, jj) >= ruler(iLevel)) && (I(ii, jj) < ruler(iLevel+1)) )I2(ii, jj) = iLevel;endendend
endind = find(I >= ruler(nLevel));
I2(ind) = nLevel;
clear ind;elseerror('hello');
endgrayMat = zeros(nLevel, nLevel);% 计算灰度共现矩阵
for ii = 1:mfor jj = 1:nii2 = 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;endii2 = 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;endend
end
这篇关于(9)MATLAB 特征分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!