我有一些二进制图像想要在MATLAB中根据它们的形状对它们进行分类。如果它们具有圆形或椭圆形,则它们属于第一类,如果它们具有椭圆形状,其边界具有凹痕,则它们属于第二类。我不知道如何使用此功能。任何人都能帮助我吗?
答案 0 :(得分:3)
您可以使用regionprops
中的eccentricity
媒体资源。来自eccentricity
的MATLAB文档:
偏心率是椭圆的焦点与其长轴长度之间的距离的比率。该值介于0和1之间。(0和1是退化情况。偏心率为0的椭圆实际上是圆形,而偏心率为1的椭圆是线段。)
随着eccentricity
的值增加,椭圆开始变得更平坦。因此,在其最大值= 1时,它是一个线段。
要检查椭圆中是否有凹痕,可以使用检查凸度。只要椭圆中有凹痕,它就会是非凸的。换句话说,如果您尝试拟合凸多边形,它将无法很好地逼近形状。您可以使用convexArea
属性来检查相同的内容。来自convexArea
的MATLAB文档:
返回一个p-by-2矩阵,指定可包含该区域的最小凸多边形。矩阵的每一行包含多边形的一个顶点的x坐标和y坐标。仅支持二维标签矩阵。
因此,您使用bwlabel
从二进制图像创建二维标签矩阵,然后检查二进制图像区域与拟合凸多边形区域之间的差异。测量区域可以像计算像素一样简单。您已经知道拟合凸多边形的数字像素= p
。只需获取p
与原始二进制图像中像素数之间的绝对差值即可。您应该能够轻松设置阈值以分类为两个类别中的一个。
我认为你可以为此编写代码。希望这会有所帮助。