用MATLAB进行图像处理

图像处理概念,算法和MATLAB

使用ismember和regionprops的输出

我最近听到一位MathWorks应用工程师(嗨,布雷特!)说一小段regionprops文档非常“强大”。下面就是:

这个函数ismember和一起使用有用吗regionprops根据一定的标准选择区域。例如,这些命令创建一个仅包含面积大于80的区域的二进制图像。

Idx = find([stats.]面积]> 80);BW2 = ismember(L,idx);

当我听到布雷特的评论时,我立即从我的后口袋里拿出我的高科技笔记设备(索引卡)并写道:“regionprops - ismember -博客主题。”

基本思想是这样的:如果我有一个包含对象的二值图像,我如何制作一个包含满足特定条件的对象子集的新二值图像?答案分为三个部分:

1.使用bwlabel而且regionprops计算物体的测量值。

2.为满足条件的对象计算一个标签向量。有时一种叫做“逗号分隔列表”的特殊结构语法对这一步非常有用;我将在下面展示该语法。

3.使用ismember计算所需的二值图像。

我已经发布了几个使用bwlabel而且regionprops,所以我就不详细讲了。在二值图像中使用标记对象bwlabel,然后使用。计算标记对象的几何测量regionprops

让我们使用blobs.png图像作为示例。

Bw = imread(“blobs.png”);imshow (bw)
L = bwlabel(bw);s = regionprops(L,“区域”的边界框(“大小));(1)
ans =区域:35 BoundingBox: [0.5000 0.5000 14 14]

regionprops返回一个结构数组,其中包含每个对象所需的测量值。

结构的逗号分隔列表语法提供了一种简单的方法,可以将特定字段从结构数组转换为向量,假设字段值始终是标量。下面是它的工作原理。当年代是一个包含字段foo的结构数组,您可以编写以下表达式:

s.foo

MATLAB将其转换为“逗号分隔的列表”:

(1)。喷火,年代(2).foo, ..., s(end).foo

因此,如果(k) . foo是标量,你可以创建一个矢量的所有喷火的值s.foo在括号中,像这样:

Foo_fector = [s.foo];

这是它是如何工作的“区域”我们在上面计算了blobs.png图像的测量值。

Area_values = [s.]区)
area_values = 1 ~ 7列35 393 19 139 36 58 736 8 ~ 14列53 22 1 22 2 15 ~ 21列1 196 3940 4326 504 40 422 22 ~ 28列966 655 175 40 39 1108 35

假设我们想要一个区域在100到1000之间的所有对象的列表。我们可以用找到关系操作符,像这样:

Idx = find(100 <= area_values) & (area_values <= 1000))
Idx = 24 7 16 19 21 22 23 24

这就把我们带到ismember.我们可以通过传递构造一个包含所有面积在100到1000之间的物体的二值图像l而且idxismember。

bw2 = ismember(L, idx);imshow (bw2)

让我们尝试另一种测量方法,可靠性.固体度定义为区域的面积除以该区域的凸包面积。

s = regionprops(L, {“稳健”});坚固度= [s]。可靠性)
solid =第1至9列0.2397 0.9680 0.6786 0.0700 0.8000 0.1321 0.4461 0.7910 1.0000第10至18列1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.0972 0.1681第19至27列1.0000 0.2235 0.0386 0.1505 0.9791 0.9669 0.2260 0.2191 0.5604第28列0.2397

以下是所有固体度为0.9或更高的物体:

imshow(ismember(L, find(固体度>= 0.9)))

这里是所有固体度为0.25或更低的物体:

imshow(ismember(L, find(固体度<= 0.25)))




使用MATLAB®7.7发布

|
  • 打印
  • 发送电子邮件

评论

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