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' 将被计算。下面的列表就是所有有效的属性字符串,它们大小写敏感并且可以缩写。

属性详细定义:本部分将结合一个具体的例子说明各种字串相关属性的意义,矩阵取自在蚁蛉模式识别中做过预处理后的斑纹分割图像,如下图:

这是一幅二值图像,在应用regionprops函数之前必须将其标注,可以调用 bwlabel函数和伪彩色处理,标注后的图像如下图:

下面基于以上的材料来考察属性的含义。

'Area':是标量,计算出在图像各个区域中像素总个数。注意:这个数值可能与由函数 bwarea 计算的值有轻微的不同。对于这样一个数值,我们可以使用它除以整个图像区域的像素个数而得到斑纹比例,可以作为模式识别的候选特征,并且这个特征是仿射不变的。

'BoundingBox':是1行ndims(L)*2列的向量,即包含相应区域的最小矩形。BoundingBox 形式为 [ul_corner width],这里 ul_corner 以 [x y z ...] 的坐标形式给出边界盒子的左上角、boxwidth 以 [x_width y_width ...] 形式指出边界盒子沿着每个维数方向的长度。本例的各部分区域最小矩形如下图!注意:请在这熟悉一下函数rectangle的使用方法。

'Centroid':是1行ndims(L)列的向量,给出每个区域的质心(重心)。注意:Centroid 的第一个元素是重心水平坐标(x坐标)、第二个元素是重心垂直坐标(y坐标)。Centroid 所有其它元素则按照维顺序排列。下图采用以中心为圆心的小圆来演示质心检测的效果:

'MajorAxisLength':是标量,与区域具有相同标准二阶中心矩的椭圆的长轴长度(像素意义下)。本属性只支持二维标注矩阵。

'MinorAxisLength':是标量,与区域具有相同标准二阶中心矩的椭圆的短轴长度(像素意义下)。本属性只支持二维标注矩阵。

'Eccentricity':是标量,与区域具有相同标准二阶中心矩的椭圆的离心率(可作为特征)。本属性只支持二维标注矩阵。

'Orientation':是标量,与区域具有相同标准二阶中心矩的椭圆的长轴与x轴的交角(度)。本属性只支持二维标注矩阵。

我们可以考察离心率的变化趋势,得到对于整个区域中的各区域的似圆性如何的大致感觉,比如下图是12个区域的离心率变化情形:

由上图可以看出区域整体的似圆性并不好,实际上可以考虑使用离心率向量作为一个模式识别的特征!!

'Image':二值图像,与某区域具有相同大小的逻辑矩阵。你可以用这个属性直接将每个子区域提取出来,然后再作相应的处理!

'FilledImage':与上相同,唯一区别是这是个做了填充的逻辑矩阵!
本例中和上面的没有区别,只有区域有空洞时才有明显差别。

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

'ConvexHull':是p行2列的矩阵,包含某区域的最小凸多边形。此矩阵的每一行存储此多边形一个顶点的xy坐标。此属性只支持2维标注矩阵。例如:本例中的所有子区域的最小凸多边形图形如下图

看看第2个区域的大图:

'ConvexImage':二值图像,用来画出上述的区域最小凸多边形。同时此凸包内的像素均打开,图像尺寸和此区域对应边界矩形相同。此属性只支持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维标注矩阵。

'Solidity':是标量,同时在区域和其最小凸多边形中的像素比例。计算公式为:Area/ConvexArea,这也是个仿射特征,实际上反映出区域的固靠性程度。此属性只支持2维标注矩阵。

'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 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1
bwlabel 创建一个包含两个分别由整数1和2标注的连续区域标注矩阵

mylabel = bwlabel(BW) mylabel = 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 2 2
double 创建一个包含一个由整数1标注的不连续区域标注矩阵。

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

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

获取图像中的连通区域,可以使用以下代码:

src_img_name = '1.jpg';
img = imread(src_img_name);% get binary image
gray_img = rgb2gray(img);
T = graythresh(gray_img);
bw_img = im2bw(gray_img, T);% find the largest connected region
img_reg = regionprops(bw_img,  'area', 'boundingbox');
areas = [img_reg.Area];
rects = cat(1,  img_reg.BoundingBox);

显示所有连通区域

% show all the largest connected region
figure(1),
imshow(bw_img);
for i = 1:size(rects, 1)rectangle('position', rects(i, :), 'EdgeColor', 'r');
end

显示最大连通区域:

[~, max_id] = max(areas);
max_rect = rects(max_id, :);% show the largest connected region
figure(2),
imshow(bw_img);
rectangle('position', max_rect, 'EdgeColor', 'r');

用Matlab画外接矩形——Regionprops函数详解:度量图像区域属性相关推荐

  1. matlab中Regionprops函数详解——度量图像区域属性

    声明:原文链接https://blog.csdn.net/langb2014/article/details/49886787点击打开链接,仅学习使用,写的很不错. Regionprops:用途是ge ...

  2. 利用MATLAB求解非线性优化问题---fgoalattain函数详解及应用案例

    最近在做方程组的非线性优化问题,用到了fgoalattain函数,总结一下: 意义 解决多目标的非线性优化问题 函数形式 函数表示形式如下: 上式中,weight, goal, b和beq 是向量(组 ...

  3. Matlab二维绘图---plot函数详解

     plot函数是matlab中最主要的二维作图函数.(参考文献--MATLAB HELP 文档) 一.常用的函数主要的形式有以下几种: plot(X,Y) plot(X,Y,LineSpec) p ...

  4. 《MATLAB》专刊:dir函数详解

    目录 1. 函数介绍 2. 调用方法 3. 备注 4. 参考网址 1. 函数介绍 MATLAB中的dir()函数用于获得指定文件夹下的所有子文件夹和文件,并存放在一种文件结构体数组中.如图1所示,该结 ...

  5. 【MATLAB】sphere 球曲面函数详解

    官方文档 画个球瞅瞅 直接看坐标 官方文档 首先看一下 sphere 的官方文档 sphere % sphere 函数用于生成单位球面的 x,y,z 的坐标,以用于 surf or mesh.默认生成 ...

  6. matlab中max和find函数详解

    (1)max函数: C = max(A):

  7. 用matlab画椭圆曲线方程,椭圆曲线入门详解

    转载请注明http://blog.csdn.net/boksic 如有疑问欢迎留言 如果不知道数学上的群.循环群等概念,可以先了解ElGamal加密算法 后再回过来椭圆曲线加密 这两个算法有共通之处, ...

  8. matlab导数曲线怎样画,matlab三次样条曲线的绘制(spline和csape函数详解)

    matlab三次样条函数的绘制(spline和csape函数详解) 样条函数是工程中常用的插值函数.早期工程师制图时,把富有弹性的细长木条(所谓样条)用压铁固定在样点上,在其他地方让它自由弯曲,然后沿 ...

  9. matlab三次样条曲线的绘制(spline和csape函数详解)

    matlab三次样条函数的绘制(spline和csape函数详解) 前言 1.spline函数详解 1.一维非节点边界 2.第二边界条件 3.高维无约束 4.高维第二边界 5.利用第二边界条件绘制圆 ...

最新文章

  1. 串口的硬件流控和软件流控
  2. matplotlib的下载和安装方法
  3. BZOJ-3110-K大数查询-ZJOI2013-暴力
  4. 分布式事务:两段式提交(最终一致性)
  5. lighttpd安装配置支持php
  6. 工具使用-----Jmeter的基础用法
  7. 使用PuTTY远程连接Linux
  8. 个人总结——学期总结
  9. Python入门--字符串的判断操作
  10. 深度学习计算机视觉五大技术:图像分类、对象检测、目标跟踪、语义分割和实例分割
  11. 网上下载的php源码怎么运行,在中国站长站下载的asp源码,如何在自己电脑上运行?...
  12. 23种设计模式总结+清晰图解(必收藏)
  13. 【着色器实现Shine局部或整体扫光效果_Shader效果第三篇】
  14. sysbench和lua的简单研究
  15. couldn't recognize data in image file问题的解决方案
  16. 网站安全防护措施有哪些
  17. 【JZOJ 5421】【NOIP2017提高A组集训10.25】嘟嘟噜
  18. EPUB和PDF的区别,有什么好用的epub阅读器
  19. 关于文本编辑器的一点思考
  20. 手把手教你用JSP完成登录注册插入数据库数据

热门文章

  1. progress java驱动_JAVA连接Progress数据库
  2. Word处理控件Aspose.Words功能演示:使用 Python 将 Word 文档的内容复制到另一个文档
  3. 新手入门 - 详解 frp 内网穿透 frpc.ini 配置
  4. 证券信息软件出现程序假死的解决办法
  5. 多大仇,这个离职证明大家怎么看?
  6. linux和windows怎么鼠标切换,如何在Linux系统中设置微软鼠标
  7. odoo tree视图默认分组
  8. object.key和object[key]的区别
  9. python自动化的实践笔记
  10. 海外推广:常见的7个海外推广营销方式!