当前位置: 首页 > 知识库问答 >
问题:

在给定图像区域边界的情况下进行图像分割

戎桐
2023-03-14

我得到了一个图像,也得到了图像中区域的边界。例如,我有一个逻辑类型的掩码,边界的值为1,而对于其他像素,该值为0。我想对边界分割的区域进行标注,而我不确定如何基于连续边界对区域进行分割和标注。

边界看起来是这样的:

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

有了上面的图表,将会识别出四个区域。

共有1个答案

宦炜
2023-03-14

图像处理工具箱中的函数bwlabel是您应该用来标记二进制掩码中非零像素的每个连续区域的理想函数。但是,您希望在设置为1的“边界”像素所描绘的零像素上执行此操作。因此,只需使用二进制掩码的逆掩码,就可以在零像素上操作,而不是在非零像素上操作。从你的定义来看,区域是用4个像素连接分开的。bwlabel在搜索连续区域时默认使用8个像素连通性,这意味着它在N、NE、E、SE、S、SW、W和NW方向上查找。您需要手动指定4个像素的连通性,它只在N、E、S和W方向上显示。

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

labels = bwlabel(~L, 4);

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

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

>> 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并从第一原则出发,您可以参考我之前的文章使用深度优先搜索查找连接组件的区域:如何在MATLAB中查找二进制图像中的所有连接组件?。请注意,这不是有效的代码,因此您应该只将其用于教育和研究目的。建议使用bwlabel,因为它是一个快速的函数,并且经过了良好的测试。您还必须修改代码,使它不在8像素连接中搜索,它应该只查看4像素连接。请确保在使用代码之前也反向输入。

 类似资料:
  • 问题内容: 我想创建一个函数,例如: 可以给定文件和调整大小的位置。 当前函数的效果很好,只是在必要时不会裁剪。 如果给出的是矩形图像,并且需要调整正方形大小(宽度=高度),则必须进行一些中心加权的裁剪。 问题答案: 您需要在调整大小之前正确裁剪图像。基本思想是确定源图像的最大矩形区域,该区域的纵横比(宽高比)与缩略图图像相同,然后在调整为缩略图尺寸之前将其周围的任何多余部分修剪(裁剪)。这是一个

  • 目前,我正在用下面的代码做一个非常简单的方法。 如果我删除代码的部分,它将图像打印为正常质量+正常大小,因为我希望它的高度限制在250,并返回类似于此图像的内容。 但它返回的内容类似于下面显示的内容。

  • 据我所知,您可以通过以下方式使用PIL获取图像大小 但是,我希望获得图像的宽度和高度,而不必将图像加载到内存中。可能吗?我只做图像大小的统计,不关心图像内容。我只是想让我的处理速度更快。

  • 问题内容: 我有一张图片,但是我还没有定义来源。它有一个边框:/ 例如: 如果提供源,则边框会消失(由于css:)。 没有来源时如何删除图片周围的边框? 问题答案: 我的建议是,如果没有src =“”将其删除,您可以 或者,如果您知道url中包含一些特殊字词(例如http),则可以执行以下操作:

  • 问题内容: 我正在网上浏览,看到了以前从未见过的东西。在此网站上:http : //blogof.francescomugnai.com/2009/04/mega-roundup-of-geektool-scripts- inspiration-gallery/ 当您向下浏览页面时,仅当图像位于浏览器的可见部分时才加载图像。我以前从未见过这种情况,想知道是否还有其他人,以及究竟该怎么做。 我猜这是

  • 在对一个非常大的映像做了大量工作后,我意外地运行了而不是。我的意图是用新的作品更新旧的图像,但现在我有两个非常大的图像: 如何解决这个问题,即只有一个映像,而当前的更改只出现在新映像中?