Algorithm 如果一个物体是圆,你需要知道的最小信息是什么?

Algorithm 如果一个物体是圆,你需要知道的最小信息是什么?,algorithm,data-structures,computer-vision,object-detection,Algorithm,Data Structures,Computer Vision,Object Detection,所以基本上我有一个程序,它运行在一个物体的图像中,并且应该计算圆环的数量。我可以大致准确地检测所有对象,并存储每个对象的以下结果: 区域(像素数)、X位置、Y位置等边界 我试图通过假设每个物体都是圆来区分圆和非圆,找到半径并使用pi*r^2来获得面积。如果该区域与像素数匹配,那么它就是一个圆 然而,这会导致一些错误。例如,当一个对象占用与圆相同的面积,但不是圆时 我能试一下吗?在有噪声的情况下它也会失败,因为我的算法没有保存暗像素(与背景一样计算) 编辑:我不能使用任何已经建立的算法,如休变换理

所以基本上我有一个程序,它运行在一个物体的图像中,并且应该计算圆环的数量。我可以大致准确地检测所有对象,并存储每个对象的以下结果: 区域(像素数)、X位置、Y位置等边界

我试图通过假设每个物体都是圆来区分圆和非圆,找到半径并使用pi*r^2来获得面积。如果该区域与像素数匹配,那么它就是一个圆


然而,这会导致一些错误。例如,当一个对象占用与圆相同的面积,但不是圆时

我能试一下吗?在有噪声的情况下它也会失败,因为我的算法没有保存暗像素(与背景一样计算)


编辑:我不能使用任何已经建立的算法,如休变换理论上,只有圆的周长等于(填充)面积的2π的平方根。但你需要对周界进行准确的评估

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


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

也许您要查找的是a,这是(我可以想象)大多数计算机视觉库所支持的,例如。使用边界:同时从左、右、上、下转到中心和中间,并查看像素计数是否相似/相同位置<代码>顶部=0;底部=10;左=0;右=10
isCircle=true;while(top)表示“一个物体占用的面积与一个圆相同,但不是一个圆”。你能举一个这样的物体的例子吗?根据你对“半径”的定义,这种情况可能是不可能的。另外,我想你指的是“封闭圆盘的面积”因为一个圆没有面积。@iAmOren嘿,谢谢,这是有意义的。唯一的问题是,我没有存储光盘的每个像素。我只存储最小X值,最大X值,最小Y,最大Y…这就足以计算半径等。在我循环光盘时,我应该如何有效地存储光盘的像素,以便我可以使用你的方法?我不想使用太多的内存。如果你有边界,你可以推断出中心和面积。对角和中心进行采样怎么样(角的颜色应该类似,并且与中心相差很大)。这可能会给你一个“钻石”,因此,样本NE/NW/SE/SW与中心的距离大于对角线的一半,但小于半径:如果所有四个类似于中心-可能是圆。因此:中心(x,y),半径(1/2宽度==1/2高度),以及:左上角、右上角、左下角、右下角、东北角、西北角、东南角和西南角的颜色。-收集数据后,您可以使用上面的检查并决定保留/删除。