我正在使用MATLAB。
我有一个充满逻辑的三维数组。该阵列表示具有N个均匀成形但是任意定向的钉的圆柱体的数据。体积在体素(3维像素)中离散化,逻辑“1”表示“此时在圆柱体中IS是钉的一部分”,而“0”表示“在圆柱体中的此点是空气”。 以下图片包含完整卷的 ONE 二维切片。想象一下由这些切片组成的完整体积。 白色表示“1”,黑色表示“0”。
现在我的问题是:我必须尽可能分开每个主食。 输出产品应该是N个三维数组,只有属于某个主要部分的体素为“1”,其他所有“0”。所以我的数组只包含一个主食的数据。
最大的问题是,'1种不同的主食可以彼此相邻(相互接触并被纠缠),因此很难决定它们属于哪种主食。 简化的事实是,可以切除钉书钉的边界体素,我可以使用任何保留原始钉书钉的近似形状的输出阵列。
也许你们中的某些人可以提出如何解决这样一个问题的想法,或者甚至将我的算法命名为我可以看一看的算法。 提前谢谢。
答案 0 :(得分:2)
由于订书钉是许多像素对象,因此您可以使用3d median filtering或bwareaopen
来减少噪音。然后bwlabeln
可用于标记二进制数组中的连接组件。然后你可以使用
REGIONPROPS进一步分析每个连接的对象,看看这是一个独立的主食还是更多。这可以使用诸如“周界”之类的功能来识别不同的情况,但您必须自己调查这些和其他regionprops功能。