我正在尝试检测彩色图像中包含椭圆形顶部的区域。
下面是我画的一些例子:
http://i.imgur.com/fh6udfL.jpg
http://i.imgur.com/3qLBrVn.jpg
你将如何做到这一点?我在图像处理方面缺乏经验,但我愿意阅读和学习。我主要将 OpenCV 与 C++ 一起使用,但我也可以使用其他库。
我正在尝试检测彩色图像中包含椭圆形顶部的区域。
下面是我画的一些例子:
http://i.imgur.com/fh6udfL.jpg
http://i.imgur.com/3qLBrVn.jpg
你将如何做到这一点?我在图像处理方面缺乏经验,但我愿意阅读和学习。我主要将 OpenCV 与 C++ 一起使用,但我也可以使用其他库。
一般来说,你问的是一个大问题。在现实世界的图像中,您需要找到每个椭圆形,区分哪个有顶部(直到您容忍和考虑的角度?)。然后你需要很好地分割这些形状,这样你就可以找到顶部椭圆形物体的区域。
但是,如果您需要像示例中那样查找更简单的图像,但仍然是更通用的方法,您可以首先使用任何边缘检测(例如 Canny)来获取边缘。然后,对曲线和椭圆使用霍夫变换。但我认为没有功能或库。所以你可能需要实现你自己的霍夫变换。为此,您必须确定椭圆形顶部的确切含义。对于您的两个图像,如果您成功找到椭圆形顶部,只需获取它下方的区域即可。但是为了获得更通用的信息,您可能希望使用更复杂的方法在其下分割形状。
对于霍夫变换;http://en.wikipedia.org/wiki/Hough_transform#Circle_Detection_Process 并将其与省略号一起使用http://en.wikipedia.org/wiki/Randomized_Hough_transform
在opencv中实际上有一个检测圆圈的功能。
使用具有低参数 2 的霍夫变换- 因为您应该检测仅给出顶部的圆。
另一种方式应该是这样;
1- 低通滤波器(高斯模糊,在 opencv 文档中搜索)
2- 颜色过滤器 - 可选(如果您知道,请使用对象的颜色,否则尝试从像素(image.width/2,0)获取颜色
3-精明边缘检测(再次,请参阅文档)
4-查找轮廓(再次,请参阅文档)
5-如果您的轮廓最好具有大面积并包括像素(image.width/2,0)-您将在此处使用pointPolygonTest-那么底部有一个斑点。
6-检测这个斑点是否是“椭圆形”是一个大问题;但是您可以使用“椭圆度”的属性进行一些过滤;
椭圆检测可以参考这篇文章。这两种方法都基于霍夫变换,并且可以根据需要轻松调整。
我会建议一种比 Hough 变换更简单的方法。从上面的图像中,我看到椭圆具有统一的颜色,而图像的其余部分则没有。