删除方形对象

fft*_*tyy 4 matlab image image-processing computer-vision image-segmentation

在此输入图像描述

我的图像包括圆形,椭圆形,方形物体和类似的东西.我想只得到循环物体.我通过使用objets的Solidity和Enccentricity级别来应用过滤器但是我无法移除方形对象.没有尖角的方形物体与圆形物体具有几乎相同的Solidity和Enccentricity水平.

我的问题是,有没有其他参数或方法来检测方形对象?

Sha*_*hai 11

您可以使用以下公式比较蒙版的面积与其周长

ratio = 4 * pi * Area / ( Perimeter^2 )
Run Code Online (Sandbox Code Playgroud)

对于圆形,这个比例应该非常接近于1,对于其他形状,它应该显着更低.
有关示例,请参阅本教程.

这个公式背后的基本原理:圆的周长 - 面积比最佳 - 给定周长的最大面积.给定周长,您可以估算等效圆的半径Perimeter = 2*pi*R,使用此估计,R您可以使用计算"等效圆区域" eqArea = pi*R^2.现在,您只需要检查形状的实际面积与计算的"等效面积"之间的比率.

注:因为AreaPerimeter掩膜对象是基于像素级离散这些估计可能是相当粗糙尤其是对小的形状估计.如果发现量化/离散化错误,请考虑使用更高分辨率的掩码.


Emi*_*ien 2

存在霍夫变换(imfindcircles),以便在图像中查找圆圈,这正是您首先需要的。

  • 实际上,这在上面的图像上效果会很差,因为正方形也会被拟合成圆形。这是一个友好的 GUI 应用程序,用于试验“imfindcircles”:http://www.mathworks.com/matlabcentral/fileexchange/34365-findcirclesgui (2认同)