Matlab:找到二进制区域的主轴

时间:2011-08-10 07:54:51

标签: matlab image-processing

某些处理的输出包含具有多个连接区域的二进制映射。

对于每个区域,目标是在图像上计算和绘制穿过其最长轴上的区域但不进一步延伸的线。线条位于区域内是非常重要的,因此椭圆拟合不是很好。

有关如何以有效的方式实现此结果的任何提示?

2 个答案:

答案 0 :(得分:2)

如果您有图像处理工具箱,可以使用regionprops,这将为您提供任何二进制连接区域的几个标准度量。这包括

您还可以获得最紧凑的矩形边界框,质心,周长,方向。这些都将帮助您进行椭圆拟合。

根据您想要绘制线条的方式,regionprops函数还会返回2-D连接区域中长轴和短轴的长度,并按照每个连接区域进行,为您提供轴长度的矢量。如果您指定 4邻居连接,则相当确保长度将完全在连接区域内。但是这不能保证,因为`regionprops'计算椭圆的长轴长度,该椭圆具有与连通区域相同的归一化第二中心矩。

答案 1 :(得分:1)

我的第一个倾向是将像素视为2D点并使用主成分分析。 PCA会为您提供每个区域的主轴(princomp,如果您有统计工具箱)。

关于制作线段而不是线,不了解这些区域的形状,我不会想到一种有效的方法。假设该区域可以具有任意形状,您可以沿着每条线追踪,直到到达该区域的边缘。然后在另一个方向重复。

我假设您已将二进制图像划分为多个区域。如果不是这样,你可以使用bwlabel(如果区域没有接触)或k-means(如果它们是)。