gpt4 book ai didi

image - 给定图像中区域的边界进行图像分割

转载 作者:行者123 更新时间:2023-12-01 11:09:02 25 4
gpt4 key购买 nike

我得到一张图片,还有图片中区域的边界。比如我有一个logical类型的mask,boundary的值为1,而其他pixels的值为0。我想给被boundaries分割的区域打上标签,但是不知道怎么分割和打标签基于连续边界的区域。

边界看起来像这样:

0 0 0 1 0 0 0 1 0 0 
0 0 1 0 0 0 0 1 0 0
1 1 0 1 0 0 0 1 0 0
0 0 0 0 1 0 1 0 0 0

根据上图,将识别出四个区域。

最佳答案

函数bwlabel来自图像处理工具箱的是一个理想的函数,您应该使用它来标记二进制掩码中非零像素的每个连续区域。但是,您想对由设置为 1 的“边界”像素划定的 像素执行此操作。因此,只需使用二进制掩码的逆函数,以便您在零像素而不是非零像素。同样根据您的定义,区域使用 4 像素连接进行分隔。 bwlabel 在搜索连续区域时默认使用 8 像素连接,这意味着它在 N、NE、E、SE、S、SW、W 和 NW 方向上查找。您需要手动指定 4 个像素连接,它仅在 N、E、S 和 W 方向上查看。

假设您的掩码存储在变量 L 中,只需执行以下操作:

labels = bwlabel(~L, 4);

输出 labels 将是一张 map ,告诉您每个像素的成员资格。相同成员的区域告诉您这些像素属于同一组。

使用您的示例,我们得到:

>> L = [0 0 0 1 0 0 0 1 0 0 
0 0 1 0 0 0 0 1 0 0
1 1 0 1 0 0 0 1 0 0
0 0 0 0 1 0 1 0 0 0];
>> labels = bwlabel(~L, 4)

labels =

1 1 1 0 3 3 3 0 4 4
1 1 0 3 3 3 3 0 4 4
0 0 2 0 3 3 3 0 4 4
2 2 2 2 0 3 0 4 4 4

每个零岛都有一个唯一的 ID,属于同一 ID 的像素属于同一岛或区域。如果你不想使用 bwlabel 并从第一原则开始,你可以引用我之前的帖子使用深度优先搜索来查找连接组件的区域:How to find all connected components in a binary image in Matlab? .请注意,这不是高效的代码,因此您应该仅将其用于教育和研究目的。推荐使用 bwlabel,因为它是一个快速的函数并且经过了良好的测试。您还必须修改代码,使其不在 8 像素连接中搜索,而应该只查看 4 像素连接。确保在使用代码之前还反转了输入。

关于image - 给定图像中区域的边界进行图像分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37693964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com