Matlab图像处理函数求偏心率等区域的属性值

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab图像处理函数求偏心率等区
域的属性值
Matlab图像处理函数:regionprops
这里给出在Matlab图像处理工具箱中非常重要的一个图像分析函数:regionprops。

顾名思义:它的用途是get the properties of region,即用来度量图像区域属性的函数。

语法
STATS=regionprops(L,properties)
描述
测量标注矩阵L中每一个标注区域的一系列属性。

L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素对应区域2;以此类推。

返回值STATS是一个长度为max(L(:))的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。

properties可以是由逗号分割的字符串列表、饱含字符串的单元数组、单个字符串'all'或者'basic'。

如果properties等于字符串'all',则所有下述字串列表中的度量数据都将被计算,如果properties没有指定或者等于'basic',则属性:
'Area','Centroid',和'BoundingBox'将被计算。

下面的列表就是所有有效的属性字符串,它们大小写敏感并且可以缩写。

属性字符串列表
AreaEquivDiameter MajorAxisLength BoundingBox EulerNumber MinorAxisLength Centroid Extent Orientation ConvexArea Extrema PixelIdxList ConvexHull FilledArea PixelList ConvexImage FilledImage Solidity Eccentricity Image
属性详细定义
本部分将结合一个具体的例子说明各种字串相关属性的意义,矩阵取自在蚁蛉模式识别中做过预处理后的斑纹分割图像,如下图:
这是一幅二值图像,在应用regionprops函数之前必须将其标注,可以调用bwlabel函数和伪彩色处理,标注后的图像如下图:
下面基于以上的材料来考察属性的含义。

'Area'
是标量,计算出在图像各个区域中像素总个数。

注意:这个数值可能与由函数bwarea计算的值有轻微的不同。

对于这样一个数值,我们可以使用它除以整个图像区域的像素个数而得到斑纹比例,可以作为模式识别的候选特征,并且这个特征是仿射不变的。

在本例中最后计算出的面积向量是
[3.8952,9.7213,17.663,3.5762,1.3432,1.6958,0.41974,0.41974,21.625 ,12.324,4.8187,1.5111]/10000.
'BoundingBox'
是1行ndims(L)*2列的向量,即包含相应区域的最小矩形。

BoundingBox 形式为[ul_corner width],这里ul_corner以[x yz.]的坐标形式给出边界盒子的左上角、boxwidth以[x_width y_width.]形式指出边界盒子沿着每个维数方向的长度。

本例的各部分区域最小矩形如下图!注意:请在这熟悉一下函数rectangle的使用方法。

'Centroid'
是1行ndims(L)列的向量,给出每个区域的质心(重心)。

注意:Centroid 的第一个元素是重心水平坐标(x坐标)、第二个元素是重心垂直坐标(y坐标)。

Centroid所有其它元素则按照维顺序排列。

下图采用以中心为圆心的小圆来演示质心检测的效果:
图中各质心坐标(标准化后的)依次为:
(x,y)=0.10478,0.76739 0.11883,0.081545 0.19586,0.61092
0.30701,0.30807 0.65712,0.31613 0.73165,0.30531 0.74548,0.35378
0.80624,0.72802 0.84546,0.61564 0.90554,0.079574 0.93477,0.77871
0.97611,0.15576
'MajorAxisLength'
是标量,与区域具有相同标准二阶中心矩的椭圆的长轴长度(像素意义下)。

本属性只支持二维标注矩阵。

'MinorAxisLength'
是标量,与区域具有相同标准二阶中心矩的椭圆的短轴长度(像素意义下)。

本属性只支持二维标注矩阵。

'Eccentricity'
是标量,与区域具有相同标准二阶中心矩的椭圆的离心率(可作为特征)。

本属性只支持二维标注矩阵。

'Orientation'
是标量,与区域具有相同标准二阶中心矩的椭圆的长轴与x轴的交角(度)。

本属性只支持二维标注矩阵。

本例的各区域椭圆数据为:长轴:
18.767,45.172,43.003,30.687,16.505,15.698,5.8833,5.8833,46.954,38.873 ,22.929,15.429短轴:
16.211,26.079,32.709,9.8458,6.8019,8.6386,5.8833,5.8833,35.976,31.022 ,16.98,7.8038离心率:
0.50387,0.81652,0.6492,0.94713,0.91114,0.83497,0,0,0.64262,0.60262,0. 67205,0.86266方向角:-29.219,-32.192,-9.3909,-50.904,-
70.333,48.823,0,0,14.035,17.986,3.0319,-34.238我们可以考察离心率的变
化趋势,得到对于整个区域中的各区域的似圆性如何的大致感觉,比如下图是
12个区域的离心率变化情形:
由上图可以看出区域整体的似圆性并不好,实际上可以考虑使用离心率向
量作为一个模式识别的特征!
'Image'
二值图像,与某区域具有相同大小的逻辑矩阵。

你可以用这个属性直接将
每个子区域提取出来,然后再作相应的处理!比如本例的第一个斑纹区域提出
后是:
'FilledImage'
与上相同,唯一区别是这是个做了填充的逻辑矩阵!本例中和上面的没有
区别,只有区域有空洞时才有明显差别。

'FilledArea'
是标量,填充区域图像中的on像素个数。

'ConvexHull'
是p行2列的矩阵,包含某区域的最小凸多边形。

此矩阵的每一行存储此
多边形一个顶点的xy坐标。

此属性只支持2维标注矩阵。

例如:本例中的所有子区域的最小凸多边形图形如下图
看看第2个区域的大图:
'ConvexImage'
二值图像,用来画出上述的区域最小凸多边形。

同时此凸包内的像素均打开,图像尺寸和此区域对应边界矩形相同。

此属性只支持2维标注矩阵。

例如:本例中的第2个子区域的最小凸多边形图形为。

注意:此处函数roipoly很有用!
'ConvexArea'
是标量,填充区域凸多边形图像中的on像素个数。

'EulerNumber'
是标量,几何拓扑中的一个拓扑不变量--欧拉数,等于图像中目标个数减去这些目标中空洞的个数。

此属性只支持2维标注矩阵。

本例中的欧拉数均为1。

'Extrema'
8行2列矩阵,八方向区域极值点。

矩阵每行存储这些点的xy坐标,向量格式为[top-left top-right right-top right-bottom bottom-right bottom-left left-bottom left-top]。

此属性只支持2维标注矩阵。

'EquivDiameter'
是标量,等价直径:与区域具有相同面积的圆的直径。

计算公式为:
sqrt(4*Area/pi)。

.此属性只支持2维标注矩阵。

本例标准化后的12区域直径向量为:
[2.227,3.5182,4.7423,2.1339,1.3077,1.4694,0.73105,0.73105,5.2473,
3.9612,2.477,1.3871]/100.
'Solidity'
是标量,同时在区域和其最小凸多边形中的像素比例。

计算公式为:
Area/ConvexArea,这也是个仿射特征,实际上反映出区域的固靠性程度。

此属性只支持2维标注矩阵。

本例12区域凸元素比例向量为:
[0.97071,0.66171,0.90846,0.86585,0.84211,0.94393,1,1,0.9096,0.755 14,0.90823,0.94737].
'Extent'
是标量,同时在区域和其最小边界矩形中的像素比例。

计算公式为:Area 除以边界矩形面积,这也是个仿射特征,实际上反映出区域的扩展范围程度。

此属性只支持2维标注矩阵。

不再给出计算结果!
'PixelIdxList'
p元向量,存储区域像素的索引下标。

'PixelList'
p行ndims(L)列矩阵,存储上述索引对应的像素坐标。

支持类
输入的标注矩阵L可以有任意的数值类型。

提醒
使用逗号分割列表语法
当你基于regionprops函数的输出作算法设计时,使用逗号分割列表语法就凸显出其非常的价值。

例如:对于一个存储标量的属性,可以利用此语法创建一个包含图像中不同区域内此属性值的向量。

例如以下两句是等价的:
stats(1).Area,stats(2).Area,.,stats(end).Area stats.Area因此,可以使用下面的方法创建相应的向量:
regionprops(L,'Area');allArea=[stats.Area];allArea就是一个与结构数组stats具备相同长度的向量。

基于特定原则的区域选择
当你要基于特定准则条件选择某个区域时,将函数ismember和regionprops联合使用是很有用处的。

例如:创建一个只包含面积大于80的二值图像,用以下命令
idx=find([stats.Area]80);BW2=ismember(L,idx);
计算性能考虑
大多数的属性测量计算时间都非常地少,除了那些非常依赖于图像L中区域个数和像素个数的属性。

例如:
'ConvexHull''ConvexImage''ConvexArea''FilledImage'另外建议一次性计算所有属性值,因为分开计算和一起计算时间相差无几!
使用二值图像工作
在调用regionprops之前必须将二值图像转变为标注矩阵。

两个函数可以做到:
L=bwlabel(BW);L=double(BW);注意:虽然这两个函数从同一二值图像产生不同的标注矩阵,但是它们是等效的!例如:给出如下的二值矩阵BW,
1 10 00 01 10 00 00 00 00 00 00 01 10 00 01 1bwlabel创建一个包含两个分别由整数1和2标注的连续区域标注矩阵
mylabel=bwlabel(BW)mylabel=1 10 00 01 10 00 00 00 00 00 00 02 20 00 02 2double创建一个包含一个由整数1标注的不连续区域标注矩阵。

mylabel2=double(BW)mylabel2=1 10 00 01 10 00 00 00 00 00 00 01 10 00 01 1regionprops并不负责自动转换二值图像数据类型,而是由你自己决定使用何种数据转换方法来存储自己想要的数据。

regionprops函数的扩展思路
在regionprops函数的基础上,你可以使用它提供的基本数据来扩展它的功能,将区域的曲率数据和骨架数据作为它的另外属性值来开发,从而希望它能用来做更细致的特征提取。

相关文档
最新文档