2015-05-26 127 views
0

我有一些二进制图像,希望根据它们在MATLAB中的形状进行分类。如果它们具有圆形或椭圆形状,则它们属于第一类,如果它们具有椭圆形状且在其边界上具有凹痕,则它们属于第二类。我不知道如何使用此功能。任何机构能帮助我吗?测量圆度或椭圆度

回答

3

您可以使用regionprops中的eccentricity属性。从MATLAB文档eccentricity

偏心率是椭圆焦点和其长轴长度之间的距离的比率。 (0和1是简并的情况,其中偏心率为0的椭圆实际上是圆形,而偏心率为1的椭圆是线段)。

因此, eccentricity增加,椭圆开始变为更平坦。因此,在它的最大值= 1时,它是一条线段。

要检查椭圆中是否有凹痕,可以使用检查凸度。每当椭圆中有一个凹痕时,它就是非凸的。换句话说,如果你试图拟合一个凸多边形,它将不能很好地逼近形状。您可以使用convexArea属性检查相同。来自MATLAB的文档convexArea

返回一个p-by-2矩阵,该矩阵指定可以包含区域的最小凸多边形。矩阵的每一行包含多边形一个顶点的x和y坐标。仅支持2-D标签矩阵。

所以你用bwlabel从你的二进制映像创建一个2-d标签矩阵,然后检查你的二值图像的区域和拟合凸多边形的面积之间的差异。测量区域可以像计算像素一样简单。你已经知道你的拟合凸多边形的数量像素= p。只需将p与原始二进制图像中的像素数之间的绝对差异。您应该能够轻松设置一个阈值,将其分为两类中的一类。

我认为你可以为此编写代码。希望这可以帮助。

+0

感谢您总结文档。 +1。 – rayryeng