Matlab 骨骼化后找到纤维之间的交叉点

Matlab 骨骼化后找到纤维之间的交叉点,matlab,image-processing,intersection,mesh,Matlab,Image Processing,Intersection,Mesh,在Matlab中,我重建了一个包含多种纤维的三维胶原网格。因此,我已经确定了所有的纤维。我可以绘制每根纤维,它看起来像原始输入图像的骨架化版本。我现在的目标是找到这些纤维之间的交叉点。(下面显示了图像的一小部分以及我在Matlab中进行的重建) 我已经考虑了一段时间,我应该采取哪些步骤来实现这一点,然而,我想有一个更简单和优化的方法。以下是我建议的主要步骤: -计算所有纤维的厚度。这可以通过检查同一光纤的几个点到最近背景点(像素值为0的点)之间的距离来实现。然后计算所有距离的平均值,并将其作为该

Matlab中,我重建了一个包含多种纤维的三维胶原网格。因此,我已经确定了所有的纤维。我可以绘制每根纤维,它看起来像原始输入图像的骨架化版本。我现在的目标是找到这些纤维之间的交叉点。(下面显示了图像的一小部分以及我在Matlab中进行的重建)

我已经考虑了一段时间,我应该采取哪些步骤来实现这一点,然而,我想有一个更简单和优化的方法。以下是我建议的主要步骤:

-计算所有纤维的厚度。这可以通过检查同一光纤的几个点到最近背景点(像素值为0的点)之间的距离来实现。然后计算所有距离的平均值,并将其作为该纤维的最终厚度值

-下一个。一旦我们知道了所有纤维的厚度,尝试通过取与骨架化纤维的每个点的距离相等(加上阈值)的所有点来计算每个纤维的表面

-最后。一旦我得到了每根纤维的外部网格点(“蒙皮点”),计算所有纤维网格之间的交点

我从未在Matlab中使用过网格,所以我不太确定是否使用它们。我甚至不知道这是否可能。提前感谢您的帮助

原始图像(ImajeJ重建)

使用代码后得到的(骨架化版本)

假设您将每个点表示为(x,y,z,val),其中x,y和z是空间坐标,val是一个位字段,指示特定点是其中的一部分。最初,所有点的val均为0。如果某些(x1,y1,z1)属于光纤-1,则设置val的LSB,使该点为(x1,y1,z1,0x01):val为十六进制。如果某些(x2,y2,z2)属于光纤-2,则(x2,y2,z2,0x02),同样地,您可以根据val所属的光纤设置val的特定位。对所有点执行此操作时,它们的val字段将指示它们所属的光纤。因此,所有在val字段中设置了超过1位的点都将为您提供相交的光纤。

如果您愿意,请显示实际图像。@Maurits我已经添加了原始图像和我的重建。如果我有每根光纤的所有点,就可以了(所有或外部像素,生成每根光纤的体积表示,如第一幅图像所示)。然而,我只有这些纤维的骨架化版本。无论如何,好主意!如果你在点集上进行形态学闭合怎么办?那么你很可能会得到纤维的填充区域。因为你已经有了纤维的骨架,你可以使用这两个的组合。对不起,在我上面的回答中,对于(x1,y1,z1)val应该是0x01,for(x2,y2,z2)应该是0x02(这是我第一篇文章中的0x10。我刚刚编辑过它)等等。只有一个问题?使用十六进制有什么特别的原因吗?没什么特别的。只是我对位域的c/c++练习