从图像轮廓或边缘检测圆弧

时间:2014-02-24 11:24:31

标签: python opencv image-processing

我正在尝试检测图像中的弧线。我确定的信息是弧的半径。我可以尝试并且可能得到我想要识别的弧的圆心。

Open CV中是否有任何算法可以告诉我们检测到的轮廓(或来自canny边缘的边是圆弧或弧的近似值)

有关如何使用Python或甚至一般方法在OpenCV中实现这一点的任何帮助都会非常有帮助

由于

3 个答案:

答案 0 :(得分:1)

如果您认为形状没有任何变化(我的意思是圆弧不会变成直线或类似的东西)那么您可以看一下 Generalized Hough Transform (GHT) 可以检测出你想要的任何形状。

缺点:

  • 对于GHT,openCV库没有直接的功能,但你可以在互联网上获得几个源代码。

  • 有时速度很慢但如果正确设置参数会变快。

  • 无法检测形状是否发生变化。例如,我试图使用GHT检测方块,但是我得到了很好的结果但是当方形不是完美的方块(即矩形或类似的东西)时,它没有检测到。

答案 1 :(得分:0)

你可以这样做:

  1. 使用精确过滤器将图像转换为边缘。
  2. 使用阈值函数制作图像二进制文件,可以选择常规阈值,otsu或自适应。
  3. 查找具有足够长度的轮廓(findContours函数)
  4. 迭代所有轮廓并尝试拟合椭圆(fitEllipse函数)
  5. 按半径验证拟合的椭圆。
  6. 检查检测到的椭圆是否合适 - 检查检测到的椭圆上有多少轮廓像素。 选择最好的一个。
  7. 每次从二值化图像中选择6个点并尝试适合时,您可以尝试使用RANSAC来提高速度。

答案 2 :(得分:0)

我的数学很生疏,但是...

如何通过在轮廓的复合边缘节点上循环并找到边缘之间的角度变化不快且符号不变的轮廓来评估轮廓呢?

一个角度链(θ),其中:

0 <θ i max

具有边数( c ),其中:

c> d const

将表示以下内容的弧线:

半径∝ 1 /(θ i i + 1 + ... +θ n )/ n)

或:

r ∝ 1 /θ ave

和:

arclenth ∝ c

Get angle from OpenCV Canny edge detector中讨论了找到这些角度的方法