MATLAB在图像处理中的应用

图像处理概念、算法和MATLAB

Regionprops、tables和struct2table

今天我和斯潘丹(这里的常客博主)谈论了图像处理工具箱功能的历史区域道具. 此函数是工具箱中广泛使用的一个工作区。我在这里的许多博客文章都在实践中证明了这一点。

这个函数区域道具计算像素区域的属性。大多数情况下,这些区域对应于二值图像的单个“对象”(前景像素的连接组件)。这是一个例子。

bw=imread(“text.png”); imshow(bw)
s = regionprops (bw)
struct array with fields: Area Centroid BoundingBox . s = 88x1 struct数组

输出是一个88x1结构数组,其中的元素包含二进制图像中对象的测量值。(我们没有告诉你区域道具所以它默认计算Area, Centroid和BoundingBox。)这是第10个物体的测量结果。

(10)
ans=面积:61质心:[54 39]边界框:[49.5000 33.5000 9 11]

这种输出形式在某些方面很方便,但在另一些方面却很不方便或别扭。例如,它需要模糊的“逗号分隔列表”语法来将所有面积测量值放入单个向量中,以便调用函数,例如的意思是最小值,或最大值

a=[s.面积];平均值(a)
ans=54.2386
min(a)
ans=6
max ()
ans=106

在结构数组的逗号分隔列表语法中,表达式[s。区)自动展开为表达式[s(1).面积,s(2).面积,…,s(结束).面积].但认识或理解这种语法的人相对较少。

struct array方面的另一个不方便的方面是很难获得所有数据的表格视图。如上所示,您可以通过显示来查看第10个对象的数据(10),但很难看到多个对象的所有数据。例如:

s(1:5)
ans=5x1带字段的结构数组:区域质心边界框

如果我在设计区域道具从现在开始,基于MATLAB的最新版本,我可以区域道具归还桌子.在R2013b中介绍了表作为一种新的MATLAB基本类型。这里有一个简单的例子来说明。

年龄=[38 43 38 40 49]';身高=[7169646764]';重量=[176 163 131 133 119];血压=[124 93;109 77;125 83;117 75;122 80];t=表(年龄、身高、体重、血压)
t=年龄、身高、体重、血压、身高、体重、血压、身高、体重、血压、身高、体重、血压、身高、体重、体重

t、 高度是一个普通的5乘1的高度向量。

t、 高度
ans=71 69 64 67 64

t、 血压是一个普通的5×2矩阵。(表“变量”通常是列向量,但只要行数与表的高度相同,它们就可以有任何大小。)

t、 血压
Ans = 124 93 109 77 125 83 117 75 122 80

我们对MATLAB中表格的引入感到兴奋,我们认为它们将逐渐用于越来越多的情况,以前人们使用结构数组。

例如区域道具

那么该怎么办呢?

那么功能呢,struct2table这里很方便!正如您可能从名称中猜到的,它会自动将结构数组转换为表。

试试看:

t=结构2表
。边界框(t =区域质心大小  ____ __________________ ____________ 66 11 13.5 [1 x4双]41 7.6829 - 38.171 [1 x4双]63 17.889 38.857 [1 x4双]80 22.95 15.963 [1 x4双]53 26.472 - 36.604 [1 x4双]63年34.889 - 16.857 [1 x4双]63年41 43.683 - 38.171 34.889 - 38.857 [1 x4双][1 x4双]48 48.396 - 15.875 [1 x4双][1 x4 61 54 39双]63 41 65.683 - 16.171 56.889 - 16.857 [1 x4双][1 x4双]48 67.396 - 37.875 [1 x4双]105 78.79 76.5 16.79 [1 x4双]66 [1 x4双]68 16.696 93.529 39.265 [1 x4双]92 100 [1 x4双]41 106.68 - 38.171 [1 x4双]68 31.5 113.53 17.265 [1 x4双]6 114 [1 x4双]33 114年39 [1 x4双]85年123.24 - 38.259 [1 x4双]48121.4 - 15.875 [1 x4双]63年129.89 - 16.857 [1 x4双]100年41 138.68 - 16.171 134.87 - 40.86 [1 x4双][1 x4双]63年145.89 - 38.857 [1 x4双]61年149年80年[1 x4双]17日159.95 - 15.963 [1 x4双]85 195 156.5 163.26 185.76 [1 x4双]6 [1 x4双]211 [1 x4双]156.5 85 163.26 218.76 [1 x4双]48 159.4 - 37.875 (1 x4双)61 164 107[1 x4双]68年164.26 - 117.47 [1 x4双]63年41 163.17 - 139.32 163.86 - 129.11 [1 x4双][1 x4双]68年164.26 - 147.47 [1 x4双]61 164 164 [1 x4双]63 163.86 - 175.11 [1 x4双]33 164 195 [1 x4双]54 163.44 203 [1 x4双]33 164 211 [1 x4双]80 167.95 - 37.962 [1 x4双]9 168 233 [1 x4双]9 168 238 [1 x4双]9 168 243[1 x4双]63年171.89 - 16.857 [1 x4双]68年180.53 - 39.265 [1 x4双]48 184.88 - 67.604 [1 x4双]106 127 178.5 183.6 118.53 [1 x4双]6 [1 x4双]85年185.26 - 134.76 [1 x4双]85年185.26 - 164.24 [1 x4双]85 212 178.5 185.26 179.76 [1 x4双]6 [1 x4双]85年185.26 - 238.76 [1 x4双]85年184.24 - 16.259 72 185.68 - 76.653 [1 x4双][1 x4双]63年41 185.17 - 98.317 185.86 - 88.111 [1 x4双][1 x4双]63 185.86 - 107.11 [1 x4双]33 186 127 [1 x4双]74 187.2 185.86 152.31 [1 x4双]63 [1 x4双]72 185.68 203.65 192.11 [1 x4双]33 186 212 [1 x4双]68 41 185.17 - 230.32 186.26 - 219.47 [1 x4双][1 x4双]48 188.4 - 37.875 [1 x4双]9 199 43 [1 x4双]48206.88 161.6 [1x4 double] 6 200.5 235 [1x4 double] 9 204 43 [1x4 double] 61 208 125 [1x4 double] 105 207.79 139.21 [1x4 double] 63 207.86 153.11 [1x4 double] 61 208 170 [1x4 double] 74 209.2 181.31 [1x4 double] 61 208 192 [1x4 double] 41 207.17 207.32 [1x4 double] 63 207.86 216.11 [1x4 double] 54 207.44 227 [1x4 double] 33 208 235 [1x4 double] 41 207.17 242.32 [1x4 double] 9 209 43 [1x4 double] 9 212 117 [1x4 double]

您可以立即看到,使用表可以更容易地查看数据。如果你打开,你可以滚动和编辑t在变量编辑器中。

你可以直接用表格变量中的数据绘制:

imshow(bw)暂停绘图(t形心(:,1),t形心(:,2),的r *)轴([5 100.5.5 100.5])保持

逻辑索引对于基于各种标准筛选对象非常方便。例如,下面的代码从表中删除面积小于10的对象。

t(t.面积<10,:)=[];

您可以轻松地将表格导出为各种格式。这是我们的表格导出为.CSV文件,然后读取到Excel中。

writetable (t)“regionprops.csv”);

我鼓励每一个使用过区域道具来玩玩表(假设你有MATLAB R2013b),看看它们在你自己的工作中是如何有用的。




与MATLAB®R2013b一起发布

|
  • 打印
  • 发送电子邮件

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。