检测彩色图像中的水平圆边

时间:2013-06-22 19:15:48

标签: opencv image-processing computer-vision edge-detection

我试图检测彩色图像中包含椭圆形顶部的区域。

以下是我绘制的一些例子:

http://i.imgur.com/fh6udfL.jpg

http://i.imgur.com/3qLBrVn.jpg

你将如何做到这一点?我对图像处理缺乏经验,但我愿意阅读和学习。我主要使用OpenCV和C ++,但我也可以使用其他库。

4 个答案:

答案 0 :(得分:1)

总的来说,你提出的问题是一个大问题。在现实世界的图像中,你需要找到每个椭圆形状,区分哪个有顶部(直到你容忍和考虑的角度?)。然后你需要很好地分割这些形状,这样你就可以找到顶部椭圆形物体的区域。

但是,如果你需要像示例中那样找到更简单的图像,但仍然是一种更通用的方法,你可能首先通过使用任何边缘检测来获得边缘(例如Canny)。然后,使用Hough Transform作为曲线和椭圆。但我认为没有功能或库。所以你可能需要实现自己的Hough变换。为此,您必须确定椭圆形顶部的确切含义。对于你的两张图片,如果你成功找到椭圆形顶部,只需获得它下面的区域。但是为了更加通用,您可能希望使用更复杂的方法对其下的形状进行分段。

对于霍夫变换; http://en.wikipedia.org/wiki/Hough_transform#Circle_Detection_Process 并使用椭圆http://en.wikipedia.org/wiki/Randomized_Hough_transform

答案 1 :(得分:0)

实际上有一个功能可以检测opencv中的圆圈。

使用低参数2的hough transform - 因为你应该检测到只有顶部的圆圈。

另一种方式应该是这样的;

1-低通滤波器(高斯模糊,在opencv doc中搜索)

2-彩色滤镜-optional(如果你知道的话,使用对象的颜色,否则尝试从像素中获取颜色(image.width / 2,0)

3- canny边缘检测(再次参考文档)

4-找到轮廓(再次参考文档)

5-如果你的轮廓具有最大的区域并且包括像素(image.width / 2,0) - 你将在这里使用pointPolygonTest - 那么你底部有一个blob。

6-检测这个斑点是否是“椭圆形”是一个大问题;但你可以使用“ovality”属性进行一些过滤;

  • 椭圆曲线有1个且只有1个峰值点。应该只有1个轮廓像素具有最大高度。
  • 椭圆曲线的任何3点都不能代表一条线。这并不难实现,但算法很复杂。

答案 2 :(得分:0)

对于圆圈,我建议采用比霍夫变换更简单的方法。 从上面的图像中,我看到椭圆形具有均匀的颜色,而其余部分则是如此 图像没有。

  1. 选择合适的色彩空间(可能是HSV)
  2. 将灰度作为色调或饱和度 - 这些将描述图像中的颜色(不是像素的强度)
  3. 计算(2)
  4. 的梯度
  5. 渐变= 0的像素属于椭圆

答案 3 :(得分:0)

对于椭圆检测,您可以参考this post。这两种方法基于霍夫变换,如果需要可以轻松调整。