1

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

下面是我画的一些例子:

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

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

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

4

4 回答 4

1

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

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

对于霍夫变换;http://en.wikipedia.org/wiki/Hough_transform#Circle_Detection_Process 并将其与省略号一起使用http://en.wikipedia.org/wiki/Randomized_Hough_transform

于 2013-06-22T21:01:46.303 回答
0

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

使用具有低参数 2 的霍夫变换- 因为您应该检测仅给出顶部的圆。

另一种方式应该是这样;

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

2- 颜色过滤器 - 可选(如果您知道,请使用对象的颜色,否则尝试从像素(image.width/2,0)获取颜色

3-精明边缘检测(再次,请参阅文档)

4-查找轮廓(再次,请参阅文档)

5-如果您的轮廓最好具有大面积并包括像素(image.width/2,0)-您将在此处使用pointPolygonTest-那么底部有一个斑点。

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

  • 椭圆曲线有 1 个且只有 1 个峰值点。应该只有 1 个轮廓像素具有最大高度。
  • 椭圆曲线的任何 3 个点都不能代表一条线。这并不难实现,但对于算法来说很复杂。
于 2013-06-22T22:20:07.333 回答
0

椭圆检测可以参考这篇文章。这两种方法都基于霍夫变换,并且可以根据需要轻松调整。

于 2013-06-23T21:10:10.853 回答
0

我会建议一种比 Hough 变换更简单的方法。从上面的图像中,我看到椭圆具有统一的颜色,而图像的其余部分则没有。

  1. 选择合适的色彩空间(可能是 HSV)
  2. 以灰度作为色调或饱和度 - 这些将描述图像中的颜色(而不是像素的强度)
  3. 计算(2)的梯度
  4. 梯度 = 0 的像素属于椭圆
于 2013-06-23T05:47:35.080 回答