【问题标题】:What is the minumum info you need to tell if an object is a circle?如果一个物体是一个圆,你需要知道的最少信息是多少?
【发布时间】:2020-09-17 11:11:43
【问题描述】:

所以基本上我有一个程序可以遍历对象的图像,并且应该计算圆圈的数量。我可以或多或少准确地检测到所有对象并存储每个对象的以下结果: 面积(像素数)、xPosition、YPosition 等边界。

我尝试通过假设每个对象都是一个圆来区分圆和非圆,找到半径并使用 pi*r^2 来获取面积。如果该区域与像素数匹配,则它是一个圆圈。

但是,这会导致一些错误。例如,当一个对象占据与圆形相同的区域时,但不是圆形。

关于我可以尝试什么的任何想法?它在嘈杂的情况下也失败了,因为我的算法不保存黑暗的像素(这被视为像背景一样)

编辑:我不能使用任何已经建立的算法,例如休变换

【问题讨论】:

  • 也许您正在寻找的是一个circle Hough transform,(我想)大多数计算机视觉库都支持它,例如OpenCV
  • 使用边界:同时从左到右和从上到下到中心和中间,看看像素数是否相似/相同的位置。 top=0; bottom=10; left=0; right=10;isCircle=true; while (top<bottom AND left<right) { if(rowPixelCount(top)~rowPixelCount(bottom) AND columnPixelCount(left)~columnPixelCount(right)) { top++, bottom--, left++, right++; }; else isCircle=false; };
  • “例如,当一个对象占据与圆形相同的区域时,但不是圆形。”你能举一个这样的物体的例子吗?根据您对“半径”的定义,这种情况可能是不可能的。另外,我假设您的意思是“封闭圆盘的面积”,因为圆没有面积。
  • @iAmOren 嘿,谢谢,这是有道理的。唯一的问题是,我不存储光盘的每个像素。我只存储最小 X 值,最大 X 值,最小 Y,最大 Y ......这足以计算半径等。关于我应该如何有效地存储光盘像素的任何意见,因为我循环它们以便我可以用你的方法?我不想占用太多内存
  • 如果你有边界,你可以推断出中心和面积。如何对角落和中心进行采样(角落的颜色应该与中心相似但有很大不同)。这可能会给您一个“钻石”,因此在距中心超过一半对角线但小于半径的距离处采样 NE/NW/SE/SW:如果所有四个都与中心相似 - 可能是圆形。因此:中心(x,y),半径(1/2 宽度 == 1/2 高度)和颜色:左上角、右上角、左下角、右下角、NE、NW、SE 和西南。 - 收集数据后,您可以使用上面的检查并决定保留/丢弃。

标签: algorithm data-structures computer-vision object-detection


【解决方案1】:

理论上,只有圆的周长等于 2π 乘以(填充)面积的平方根。但您需要准确评估周长。

或者,通过任何方法*找到圆参数(中心和半径的坐标),并检查轮廓的像素是否满足圆方程(计算平均偏差)。

*如果形状不是圆形,这些参数将具有“随机”值,但这并不重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2021-10-21
    • 2021-08-04
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多