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