C++ 如何用opencv检测模糊圆的圆心

C++ 如何用opencv检测模糊圆的圆心,c++,image-processing,opencv,C++,Image Processing,Opencv,我得到了以下图像: 这幅画上有曲线。 我想找到包含曲线的圆的中心 我尝试了opencv和hough圆变换,但没有结果。自然的候选对象是CVHough圆。每条曲线的每个部分都为标识中心点的X/Y/R三元组添加一个“投票”。现在,您只有部分圆圈,因此投票数量有限,准确性降低,但您可能也有同样的怀疑。 对图像设置阈值 腐蚀它直到几乎没有噪音(小斑点) 把它放大 找到大斑点。如果仍有一些小水滴,请选择最大面积 使用cv::矩查找其质心 以下是我将首先尝试的内容: 请注意,如果从圆的真实中心绘制光线,则

我得到了以下图像:

这幅画上有曲线。 我想找到包含曲线的圆的中心


我尝试了opencv和hough圆变换,但没有结果。

自然的候选对象是
CVHough圆
。每条曲线的每个部分都为标识中心点的
X/Y/R
三元组添加一个“投票”。现在,您只有部分圆圈,因此投票数量有限,准确性降低,但您可能也有同样的怀疑。

  • 对图像设置阈值
  • 腐蚀它直到几乎没有噪音(小斑点)
  • 把它放大
  • 找到大斑点。如果仍有一些小水滴,请选择最大面积
  • 使用cv::矩查找其质心

    • 以下是我将首先尝试的内容:

      请注意,如果从圆的真实中心绘制光线,则沿圆的图像强度的局部最大值会以与光线方向无关的间隔出现。这些间隔是连续圆半径长度之间的差值

      因此,固定一个数字或光线方向,比如说16个以[0,pi]等距排列,并定义一个成本函数,该函数在圆心的(xc,yc)坐标和圆的ri半径上参数化,成本等于,例如,沿半径的最大值位置的方差
      在不同的半径之间,

      可能是一个更好的问题,看起来像中心实际上在图像之外,是正确的吗?是的,中心在外面,但是当我使用霍夫圆变换时,我在中间使用这个更大的图片。