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

matlab中Regionprops函数详解——度量图像区域属性声明:原文链接https://blog.csdn.net/langb2014/article/details/49886787点击打开链接,仅学习使用,写的很不错。Regionprops:用途是getthepropertiesofregion,即用来度量图像区域属性的函数。语法:STATS=regionprops(L,properties)描述:测量标注矩阵L中每一个…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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

 

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

属性字符串列表

Area

EquivDiameter

MajorAxisLength

BoundingBox

EulerNumber

MinorAxisLength

Centroid

Extent

Orientation

ConvexArea

Extrema

PixelIdxList

ConvexHull

FilledArea

PixelList

ConvexImage

FilledImage

Solidity

Eccentricity

Image

 

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

这是一幅二值图像,在应用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

Jetbrains全家桶1年46,售后保障稳定

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

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

 

[cpp] view plain copy

  1. src_img_name = ‘1.jpg’;  
  2. img = imread(src_img_name);  
  3.   
  4. % get binary image  
  5. gray_img = rgb2gray(img);  
  6. T = graythresh(gray_img);  
  7. bw_img = im2bw(gray_img, T);  
  8.   
  9. % find the largest connected region  
  10. img_reg = regionprops(bw_img,  ‘area’‘boundingbox’);  
  11. areas = [img_reg.Area];  
  12. rects = cat(1,  img_reg.BoundingBox);  

 

显示所有连通区域

 

[cpp] view plain copy

  1. % show all the largest connected region  
  2. figure(1),  
  3. imshow(bw_img);  
  4. for i = 1:size(rects, 1)  
  5.     rectangle(‘position’, rects(i, :), ‘EdgeColor’‘r’);  
  6. end  

 

显示最大连通区域,

[cpp] view plain copy

  1. [~, max_id] = max(areas);  
  2. max_rect = rects(max_id, :);  
  3.   
  4. % show the largest connected region  
  5. figure(2),   
  6. imshow(bw_img);  
  7. rectangle(‘position’, max_rect, ‘EdgeColor’‘r’);  

显示结果:

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

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/219523.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • servlet-Cookie与Session

    servlet-Cookie与SessionCookieCookie是服务器通知客户端保存键值对儿的一种技术客户端有了Cookie后,每次请求都发送给服务器每个 Cookie的大小都不超过4kb注意Cookie值不包含空格,方括号,圆括号,等号,逗号,双引号,斜杠,问号,at符号,冒号和分号,空值在所有浏览器上的行为也不一样。需要使用BASE64编码。Cookie生命控制setMaxAge()正数,表示在指定的秒数后过期负数,表示浏览器一关闭,Cookie就会被删除零 ,表示马上删除CookiePath属性Cooki

  • pycharm与mysql连接错误系统_pycharm怎么使用anaconda环境

    pycharm与mysql连接错误系统_pycharm怎么使用anaconda环境pycharm与数据库MySQL连接

  • linux 权限详解rwx[通俗易懂]

    linux 权限详解rwx[通俗易懂]第2~10个字符当中的每3个为一组,左边三个字符表示所有者权限,中间3个字符表示与所有者同一组的用户的权限,右边3个字符是其他用户的权限。这三个一组共9个字符,代表的意义如下:r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。x(eXec

  • eclipse代码自动补全[通俗易懂]

    eclipse代码自动补全[通俗易懂]1、点击菜单栏,打开Eclipse->Window->Perferences2、找到Java下的 Editor下的 ContentAssist,点击它3、找到第二个“AutoactivationtriggersforJava:”选项,在其后的文本框中会看到一个“.”存在。这表示:只有输入“.”之后才会有代码提示和自动补全,把该文本框中的“.”换成“abcdefghijklmnopqrstuvwxyz.”即可。…

  • 时序逻辑电路基础_时序逻辑电路的逻辑功能

    时序逻辑电路基础_时序逻辑电路的逻辑功能题目:简述建立时间和保持时间,作图说明建立时间Tsu(setup):触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的最小时间。保持时间Th(hold):触发器在时钟上升沿到来之后,其数

  • Mac 开启apache PHP

    Mac 开启apache PHP命令行:开启apache服务:sudoapachectlstart停止apache服务:sudoapachectlstop重启服务:sudoapachectlrestart查看版本:httpd-v开启之后打开浏览器输入:localhost,看到Itworks!说明服务正常开启!命令行打开系统隐藏目录:open/etc/apache21.httpd

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号