4

我正在使用 MATLAB。

我有一个充满逻辑的三维数组。这个数组表示一个圆柱体的数据,其中有 N 个形状均匀但方向任意的订书钉。体积以体素(3 维像素)离散化,逻辑“1”表示“圆柱体中的这一点是订书钉的一部分”,而“0”表示“圆柱体中的这一点是空气”。下图包含一个完整卷的二维切片。想象一下由这些切片组成的完整卷。白色表示“1”,黑色表示“0”。 体积的一部分

现在我的问题是:我必须尽可能地分开每个主食。输出的产品应该是 N 个三维数组,只有属于某个主食的体素为“1”,其他均为“0”。这样我就有了只包含一个主食的数据的数组。

最大的问题是,不同订书钉的'1'可以彼此相邻(相互接触并被缠结),难以确定它们属于哪个订书钉。简化的事实是,订书钉的边界体素可能会被切掉,我可以使用任何保留原始订书钉近似形状的输出阵列。

也许你们中的某个人可以提供一个想法如何解决这样的问题,或者甚至给我命名算法,我可以看看。提前致谢。

4

1 回答 1

2

由于订书钉是许多像素对象,因此您可以使用3d 中值过滤bwareaopen开始减少噪声。然后 bwlabeln可用于标记二进制数组中的连通分量。然后您可以使用
REGIONPROPS进一步分析每个连接的对象,看看这是一个独立的主食还是更多。这可以使用诸如“周界”之类的功能来识别不同的情况来完成,但是您必须自己调查这些和其他 regionprops 功能。

于 2013-05-26T22:43:20.263 回答